----网络编程基础----
1、计算机网络
就是把分不在不同区域的计算机与专门的外部设备用通信线路相互连接成一个规模大,而且功能强的网络系统,从而使得计算机之间可以相互传递信息,共享数据、软件等资源
网络分类:按照地理范围:广域网(Internet),城域网(一个城市、多个城市),局域网(机房)
2、网络编程
所谓网络编程,指的就是在同一个网络中不同机器之间的通信
3、网络参考模型
OSI参考模型:包括七层:[物理层],[数据链路层]、[网络层]、[传输层]、[会话层]、[表示层]、[应用层]
TCP/IP参考模型,包括四层:
1)链路层:包括操作系统中的设备驱动程序,计算机中对应的网络接口卡
2)网络层:处理分组在网络中的活动,比如分组的选路
3)传输层:主要为两台主机上的应用提供端到端的通信
4)应用层:负责处理特定的应用程序细节
4、通信协议
协议的本质:数据格式
通信协议分类:
网络层IP协议:IPV4和IPV6,互联网协议
传输层协议:TCP和UDP
应用层协议:HTTP、FTP、SMTP、POP3
TCP协议:TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。数据大小无限制。建立连接的过程叫三次握手,断开叫四次断开
UDP协议:UDP(用户数据报协议),是TCP/IP参考模型中一种无连接的传输层协议,提供面向事物的简单不可靠信息传送服务,每个包的大小64kb
IP协议:网际协议,能使连接到网上的所有计算机网络实现相互通信的一套规则,规定了计算机在因特网上进行通信时应当遵守的规则。IP协议中包含一块非常重要的内容就是为计算机分配了一个唯一表示即Ip地址
----计算机之间通信----
1、IP地址
IP地址指的是互联网地址(Internet Protocol Address),是联网设备与互联网之间的唯一标识,在同一个网段中,IP地址唯一
查看ip:ipconfig
IPV4地址分类
A类:保留给政府机构,1.0.0.1 ~ 126.255.255.254
B类:分配给中型企业,128.0.0.1 ~ 191.255.255.254
C类:分配给任何需要的个人,192.0.0.1 ~ 223.255.255.254
D类:用于组播,224.0.0.1 ~ 239.255.255.254
E类:用于实验,240.0.0.1 ~ 255.255.255.254
回环地址:127.0.0.1,指本机,一般用于测试使用,使用ping命令测试:ping 127.0.0.1
2、端口
数据的发送和接收都需要通过端口出入计算机,端口号用于唯一标识通信实体上进行网络通讯的程序,同一台机器上不能两个程序占用同一个端口
端口号的取值范围:0 ~ 65535
端口分类:
公认端口:0 ~ 1023
注册端口:1024 ~ 49151
动态或私有端口:49152 ~ 65535
?? 常用端口:mysql:3306 oracle:1521 tomcat:8080 web服务器(http):80 ftp服务器:21 SMTP 25 POP3 110
----相关类的使用----
1、InetAddress类
Java提供了InetAddress类来代表ip地址,是对ip地址的抽取和封装,两个子类:Inet4Address(IPV4),Inet6Address(IPV6)
? 1)获取主机:主机名称和ip地址
InetAddress.getLocalHost();
2)获取ip地址的字符串表示形式
getHostAddress();
3)获取主机名
getHostName();
4)在给定主机名的情况下确定主机的ip地址(根据主机或ip地址获取InetAddress对象)
getByName(String host);
5)根据主机或ip地址获取所有InetAddress对象
getAllByName(String host);
2、URLEncoder类和URLDecoder类
用于完成普通字符串和application/x-www-form-urlencoded MIME字符串之间的转换
(把中文字符转换成可以网络传输的一种数据格式:URL编码)
//URL编码
String encode = URLEncoder.encode("好久不见","utf-8");
//URL解码
String decode = URLDecoder.decode(encode,"utf-8");
----基于TCP的网络编程----
1、概念
TCP:传输控制协议,基于字节流的传输层通信协议
特点:
1)面向连接
2)安全、可靠
3)传输数据大小不限制,一旦连接建立,双方可以按统一的格式传输任意多的数据
4)效率低
TCP的三次握手
1)客户端向服务器端发送一个请求
2)服务端收到请求后,回客户端一个响应
3)客户端收到服务端的响应后,回服务器端一个确认信息
2、基于TCP的Socket(套接字)通信模型
Socket是操作系统提供的一种底层的通信机制,Java仅仅是对底层的socket的一种封装。供开发人员方便使用
----Soket和ServerSocket----
1、客户端发送消息,服务端接收消息
TCP的服务器端
步骤:
(1)创建ServerSocket(服务器套接字对象),并指定端口号
ServerSocket listener = new ServerSocket(10086);
(2)倾听或监听,返回Socket(客户端套接字)
Socket socket = listener.accept();
(3)获取输入或输出流
InputStream is = socket.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
(4)处理数据
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String data = br.readLine();
(5)关闭资源
br.close();
socket.close();
listener.close();
TCP的客户端
步骤:
(1)创建客户端套接字Socket,并指定服务器的ip和端口号
Socket socket = new Socket("10.9.21.224",10086);
(2)获取输入、输出流
OutputStream os = socket.getOutputStream();
(3)发送数据
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(os));
bw.writer("好久不见");
(4)关闭
bw.close();
socket.close();
2、客户端发送消息,服务端回复消息
TCP的服务器端
步骤:
(1)创建ServerSocket(服务器套接字对象),并指定端口号
ServerSocket listener = new ServerSocket(10010);
(2)倾听或监听,返回Socket(客户端套接字)
Socket socket = listener.accept();
(3)获取输入或输出流
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
(4)处理数据
String data = br.readLine();
System.out.println("客户端说:"+data);
bw.Writer("还好吗");
bw.newLine();
bw.flush();
(5)关闭资源
br.close();
bw.close();
socket.close();
listener.close();
TCP的客户端
步骤:
(1)创建客户端套接字Socket,并指定服务器的ip和端口号
Socket socket = new Socket("10.9.21.224",10010);
(2)获取输入、输出流
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
(3)处理数据
bw.writer("好久不见");
bw.newLine();
bw.flush();
String reply = br.readLine();
System.out.println("服务器回复:"+reply);
(4)关闭
bw.close();
br.close();
socket.close();
3、客户端上传文件到服务端
TCP的服务器端
步骤:
(1)创建ServerSocket(服务器套接字对象),并指定端口号
ServerSocket listener = new ServerSocket(8888);
(2)倾听或监听,返回Socket(客户端套接字)
Socket socket = listener.accept();
(3)获取输入或输出流
InputStream is = socket.getInputStream();
FileOutputStream fos = new FileOutputStream("e:\\a.jpg");
byte[] buf = new byte[1024];
int len = -1;
(4)处理数据
while((len = is.read(buf))!=-1){
fos.write(buf,0,len);
}
(5)关闭资源
fos.close();
is.close();
socket.close();
listener.close();
TCP的客户端
步骤:
(1)创建客户端套接字Socket,并指定服务器的ip和端口号
Socket socket = new Socket("10.9.21.224",8888);
(2)获取输入、输出流
OutputStream os = socket.getOutputStream();
(3)读取文件并输出
FileInputStream fis = new FileInputStream("copy.jpg");
byte[] buf = new byte[1024];
int len = -1;
while ((len=fis.read(buf))!=-1){
os.write(buf,0,len);
}
(4)关闭
fis.close();
os.close();
socket.close();
----UDP编程----
1、概念
用户数据报协议,提供面向事物的简单不可靠信息传送服务
特点:
1)不安全 2)无连接 3)效率高 4)UDP传输数据时是有大小限制的,每个被传输的数据报必须限定在64kb之内
2、DatagramSocket和DatagramPacket
DatagramSocket:数据报套接字,表示用来发送和接收数据报包的套接字
DatagramPacket:此类表示数据报包,每个包最大64kb
接收方
1、创建DatagramSocket,指定端口号
DatagramSocket ds = new DatagramSocket(9999);
2、创建接收数据报包
byte[] buf = new byte[1024*8];
DatagramPacket dp = new DatagramPacket(buf,buf.length);
3、接收(阻塞方法,如果没有数据就阻塞,有数据则接收)
ds.receive(dp);
4、处理数据
String data = new String(dp.getData(),0,dp.getLength());
5、关闭
ds.close();
发送方:
1、创建DatagramSocket,使用随机端口号
DatagramSocket socket = new DatagramSocket();
2、创建发送数据报包
String say = "好久不见";
Datagrampacket dp = new Datagrampacket(say.getBytes,say.getBytes().length,InetAddress.LocalHost,9999);
3、发送
ds.send(dp);
4、关闭
ds.close();