初夏小谈:基于UDP协议的网络通信

一、通信基础:

在网络通信中必须要知道的几个属性

1.IP地址:

(1).就是唯一标识网络中的一台主机。我们所常用的是IPV4,它是32位,四个字节的数字(uint32_t)。由于数字太长我们不便于记忆,所以就用点分十进制的字符串来表示,便于记忆,比如:192.168.166.132

(2).由于IPV4是32位这意味这只能表示4,294,967,296台主机,大约42亿九千万台,在当今的社会中,显然已经远超过这么多数量。所以又出现了IPV6 16个字节即128位来标识主机,这显然已经足够使用,但是它不兼容IPV4.所以没有推广起来。那么这怎么办呢?IPV4不得不重新分配IP地址。

          两种方式:第一种是动态地址分配技术:就是只给上网的电脑分配IP地址,不上网的不分配。但在日益上网的人数越来越多的情况下,有点捉襟见肘。所以就有产生了下面这种方法

                             第二种是:网络地址转换技术,就是让几个不太上网的电脑共用同一个IP地址,这个IP地址被分配给路由器,让后在路由器上来标识这些电脑。当消息发送时会先经过路由器选择出IP。当发到路由器后,路由器会将数据发送给指定的电脑。

(3)由于一个端口只能连接一个进程,所以在客户端主机上最多只能启动65536个客户端。而服务器是不需要通过端口来接收的,因为,所有的客户端都是发送给服务器,所以理论上服务器是可以接收无上限。但受服务器资源限制。

(4)在网络中通信数据必须有一个统一个格式即协议,另外从一台主机的某个进程给另一台主机的某个进程发送。这就必须明确原发送的IP地址和源端口号。方面目的方回复信息。另外给谁发那么就必须知道目的端的IP地址和该IP地址的主机上的端口号。。

2.网络字节序:

            (1).字节序:字节序就是计算机上CPU对数据在内存中的存取顺序。

            (2).主机字节序:分为两种大端字节序和小段字节序,这取决于CPU的架构。

            (3).在网络中通信由于有两种顺序,所以为了避免数据的二义性,所以统一大端字节序。即低地址存高位,网络字节序:大端字节序。

            (4).在计算中CPU存取数据是按字节存取的,所以除了(32位操作系统)char型不用转换外其它数据类型都必须转换字节序。

二、传输层协议即TCP/UDP协议

        1.TCP是传输控制协议,它面向连接,可靠传输,面向字节流。

        2.UDP协议是用户数据报协议:无连接,不可靠,面向数据报。

        3.TCP是在UDP的基础上进行了改进,牺牲了高效性来换取数据的可靠传输。它适合于像文件传输等对数据安全要求较高的的场景。

        4.UDP是原始的协议,它虽然有可能会产生丢包问题,但是这也是概率非常小的。但它非常高效。就像视频传输,音乐传输等对数据安全要求不是太高的场景。

三、基于UDP协议的网络通信

        1.在网络中通信中分为客户端和服务端。在网络通信中有一套socket接口供我们来使用。

      一.服务端所进行的操作:

        1.首先在服务器开始创建socket套接字。通过这个socket函数内核会创建socket结构体,通过套接字来与网卡建立联系。

        2.接下来在服务器端为套接字绑定地址和端口。

        3.之后就是进行数据的接收与发送。

        4.最后关闭套接字。

       二.客户端所进行的操作:

        1.开始也是创建套接字。

        2.为套接字绑定地址课端口。

        3.进行收发数据

        4.关闭套接字。

        客户端不推荐手动绑定套接字,但是操作系统会自动为它绑定。

      三.代码实例:

1.实现udp的所需要的接口,方便在客户端和服务端进行调用。

2.服务端:

3.客户端程序:

4运行结果:

   4.1服务端:

4.2客户端:

5.注意在UDP协议下通信,不管对方有没有在,他都会发送,它不会检测对方是否断开。

                                                                                                                                                         珍&源码

猜你喜欢

转载自blog.csdn.net/IT_xiaoQ/article/details/90605519