网络通信协议和UDP通信

通过计算机网络可以使多台计算机实现连接,位于同一个网络中的计算机在进行连接和通信时需要遵守一定的规则,这就好比在道路中行驶的汽车一定要遵守交通规则一样。在计算机网络中,这些连接和通信的规则被称为网络通信协议,它对数据的传输格式、传输速率、传输步骤等做了统一规定,通信双方必须同时遵守才能完成数据交换。

网络通信协议有很多种,目前应用最广泛的是TCP/IP协议(Transmission Control Protocal/Internet Protoal传输控制协议/英特网互联协议),它是一个包括TCP协议和IP协议,UDP(User Datagram Protocol)协议和其它一些协议的协议组。

在进行数据传输时,要求发送的数据与收到的数据完全一样,这时,就需要在原有的数据上添加很多信息 ,以保证数据在传输过程中数据格式完全一致。上传的时候需要根据多个层进行包装,读取的时候也需要对多个层进行包装。

要想使网络中的计算机能够进行通信,必须为每台计算机指定一个标识号,通过这个标识号来指定接受数据的计算机或者发送数据的计算机。这个就是我们通常说的ip,可以标识唯一一台电脑,但是如果要使用该电脑上的某个程序还需要这个程序的端口号;端口号是用两个字节(16位的二进制数)表示的,它的取值范围是0~65535,其中,0~1023之间的端口号用于一些知名的网络服务和应用,用户的普通应用程序需要使用1024以上的端口号,从而避免端口号被另外一个应用或服务所占用,被占用的话,就会报一个端口冲突的问题。

我们传入数据不仅要明确ip地址还要明确端口号。

JDK里面专门提供一个一个类来封装ip地址的一个类inetaddress,并且提供了4个方法 getbyname()给了主机名的情况下确认ip地址

getlocalhost()返回本地主机的ip地址 gethostname()获得此ip地址的主机名  gethostaddress()返回ip地址以字符串的形式表现出来。用自己的电脑进行代码演示如图

UDP是无连接通信协议,即在数据传输时,数据的发送端和接收端不建立逻辑连接。可以理解为我发出的一个文件,对面收没收到,我们不知道,对方收到一个文件,他也不会告诉我们这个文件他已经收到了。

由于使用UDP协议消耗资源小,通信效率高,所以通常都会用于音频、视频和普通数据的传输,例如我们打视频电话,中间因为网络原因卡顿了,并不影响我们的整体使用。直播,广播等等

TCP协议是面向连接的通信协议,即在传输数据前先在发送端和接收端建立逻辑连接,然后再传输数据,它提供了两台计算机之间可靠无差错的数据传输。就像是我们要上传一个文件,先给服务器发送请求(第一次握手),服务器收到请求了,反馈给我们(第二次握手),

我们向服务器发送确认信息,确认连接(第三次握手),下载文件也会经历着三个步骤,从而保证了下载文件的完整性。

UDP通信

UDP是一种面向无连接的协议,因此,在通信时发送端和接收端不用建立连接。就当做我们要发给对方一个快递,我们发出快递时,要打包好,留下手机号 发件人 发送物品 发给谁 对方住在哪 交给快递公司,由快递公司发给对方所在位置收件快递公司,注明要发给谁 他家住哪 然后送达对方位置,对方拆包确认。 

发送对象JDK中提供了一个datagrampacket类 它构造方法里面传 封装对象 对象长度 ip和端口号

 

 

 

 

快递公司我们也有对应的类datagramsocket,通过该类的构造方法和里面所提供的的方法进行操作

我们可以要实现UDP通信需要创建一个发送端程序和一个接收端程序的数据传输

发送端 1.建立数据打包对象,封装发送数据、接收端ip地址和端口号 2.创建快递公司 3.发送数据 4.释放资源 代码如下

接收端1创建快递公司明确端口号 2.创建接收对象 3.拆包 4.获取发送端的ip地址 5.获取发送端的端口号 代码如下

 

 我们可以扩转一下,6台电脑用同一个局域网也可以完成如下操作,就相当于建了一个6人群,群成员都在这个局域网使用,可以发送至同一个人 这个人可接收到其他5人的消息。将代码每次传输消息时,不需要创建的对象拿到while(true)外面 释放资源的部分删掉,即可实现此功能。

posted @ 2021-03-02 20:56  Dyl啊  阅读(185)  评论(0)    收藏  举报