1.网络通信协议

通过计算机网络可以使多台计算机实现连接,位于同一个网络中的计算机在进行连接和通信时需要遵守一定的规则。

在计算机网络中,这些连接和通信的规则被称为网络通信协议,它对数据的传输格式、传输速率、传输步骤等做了统一规定,通信双方必须同时遵守才能完成数据交换。

目前应用最广泛的是TCP/IP协议和UDP协议

2.InetAdderss类

2.1InetAdderss类的几个常用方法

多线程(四)网络通信协议和UDP通信_端口号

 

2.2使用



1     public static void main(String[] args) throws UnknownHostException {
2 //获取本地Inet对象
3 InetAddress inet = InetAddress.getLocalHost();
4 System.out.println(inet);//你的主机名和地址
5 //获取指定主机名的inet对象
6 InetAddress inet2 = InetAddress.getByName("LAPTOP-XXXXXXXX");
7 System.out.println(inet2);//你指定的主机名和地址,必须是同一网络
8 //获取ip
9 String ip = inet.getHostAddress();
10 //获取主机名
11 String name = inet.getHostName();
12 System.out.println(ip);//你的ip
13 System.out.println(name);//你的主机名
14 }


3.UDP协议和TCP协议

UDP协议是无连接通信协议,所以发送端在发送数据时,不会确认接收端是否存在,直接发送数据,所以使用UDP协议消耗资源小,通信效率高,所以通常都会用于音频、视频和普通数据的传输例如视频会议等,不建议用来传输重要数据。而接收端在接受数据时,也不会给发送端反馈来表示已接受。

TCP协议是面向连接的通信协议,在发送端发送数据时,会先向发出连接请求,然后接收端来向发送端反馈一个信息,通知发送端已收到请求,然后发送端再向接收端发送确认信息来建立连接。因此TCP协议能保证数据的完整性。

4.UDP通信

4.1DatagramPacket类,用于封装UDP通信中要发送或者接收的数据。

其有两种构造方法,第一种是用来做接收端的使用。

多线程(四)网络通信协议和UDP通信_数据_02

 

 第二种是用来做发送端的使用,发送端要明确主机地址和端口。

 

 多线程(四)网络通信协议和UDP通信_接收端_03

几种常用的方法

多线程(四)网络通信协议和UDP通信_封装_04

 

 4.2DatagramSocket类,用来发送和接收封装好的数据

其中也有两种构造方法,第一种接收端,要指定要接受的端口号

多线程(四)网络通信协议和UDP通信_接收端_05

第二种发送端

多线程(四)网络通信协议和UDP通信_数据_06

几种常用方法

 多线程(四)网络通信协议和UDP通信_数据_07

 

4.3UDP网络通信

1.建立发送端,循环发送



1 //发送端
2 public class UDPSend {
3 public static void main(String[] args) throws IOException {
4 Scanner sc = new Scanner(System.in);
5 //明确要发送的地址
6 InetAddress inet = InetAddress.getByName("192.168.1.171");
7 //创建快递公司对象
8 DatagramSocket ds = new DatagramSocket();
9 while(true){
10 //明确要发送的内容
11 byte[] bytes = sc.next().getBytes();
12 //创建打包对象,封装数据,明确目的地
13 DatagramPacket dp = new DatagramPacket(bytes,bytes.length,inet,8888);
14 //发送数据包
15 ds.send(dp);
16 }
17 }
18 }


 

2.建立接收端,循环接受



1 //接收端
2 public class UDPRecieve {
3 public static void main(String[] args) throws IOException {
4 //创建快递公司对象,明确端口号
5 DatagramSocket ds = new DatagramSocket(8888);
6 //创建字节数组等待接受
7 byte[] bytes = new byte[1024];
8 while(true){
9 //创建拆包对象
10 DatagramPacket dp = new DatagramPacket(bytes,bytes.length);
11 //接受数据包
12 ds.receive(dp);
13 //拆包
14 //获取发送端的ip地址
15 String ip = dp.getAddress().getHostAddress();
16 //获取发送端的端口号
17 int port = dp.getPort();
18 //获取数据长度
19 int len = dp.getLength();
20 System.out.println("ip地址为:"+ip+"端口号为:"+port+"发送的内容为:"+new String(bytes,0,len));
21 }
22 }
23 }