linux 内核udp编程,Linux下网络编程实现UDP,还有大量实例

【1】概念

【2】程序流程

【3】相关函数

1)创建套接字

2)绑定网络信息结构体

3)接受数据

4)发送数据

【4】项目:基于udp 的网络聊天室

【1】概念

UDP(User Datagram Protocol即用户数据报协议):面向无连接的,不可靠的,不保证分组顺序到达的网络服务

【2】程序流程

(1)服务器:

创建套接字 socket( )

填充服务器网络信息结构体 sockaddr_in

将套接字与服务器网络信息结构体绑定 bind( )

进行通信 recvfrom( )/sendto( )

(2)客户端:

创建套接字 socket( )

填充服务器网络信息结构体 sockaddr_in

进行通信 sendto( )/recvfrom( )

使用socket创建sockfd时应使用SOCK_DGRAM 数据报套接字 udp

shell指令 nc 选项 服务器的IP地址 端口号(客户端)加 -u 代表UDP 不加代表TCP

加 -l 代表服务器 不加代表客户端

模拟的是回声服务器作用

【3】相关函数

1)创建套接字

c238dcc4293736aea60e5526a40fced5.png

ef54a94d230c579a88ebe2c059d04af3.png

2)绑定网络信息结构体

609d7283e3d439b1ad8fbda6be33914e.png

495689bd4af236d18c5c0ca8165db1a4.png

eea236245792251ea26f1d54b59800ff.png

3)接受数据

88d7b974f5a1a4c60bedc3750cd2fcdc.png

d058dc7fbb869b58a7e23fc0f7f14ca1.png

注意:与accept类似,在定义socklen_t addrlen =sizeof(struct sockaddr); 取地址传参,必须先初始化,在不对len进行初始化时,recvfrom第一次接受的数据,内核处理会根据当前len值即乱码进行数据处理,得到的地址信息结构体数据也为乱码。之后,内核知晓地址信息结构体大小,会对len值进行修改,即第二次之后得到的地址信息结构体为正确的。未初始化时,如果变量内值为正数,则可以正常输出,但值不正确,但若变量内值为负值,内核无法处理,则会直接报错。

4)发送数据

a51616f1759a08491b5fc77cc26242d4.png

f527e2a9b9e47daaa25e3b8ccfb9cada.png

【4】项目:基于udp 的网络聊天室

功能:

当有人登陆时,其他在线的人可以收到这个人的登录信息当有人发消息时,其他在线用户可以接受到这个信息当有人退出时,其他人可以收到这个人的退出信息服务器可以发送系统信息

服务器端:

d6d296292db7b5cfb3fa0d7dfe96d59e.png

如何实现端对端的通信:

由服务器通知在线人员,然后客户端选择与谁通信

可以在服务器的存储链表中增加一个成员变量,用来标识每一个成员,而后根据客户端的选择进行通信在服务器发送消息的功能中,首先判断客户端是发送单聊或是群聊

服务器:

17eec1487d6702529979986a499a3095.png

38e61cda16989c391dee3a4c0a5fe62f.png

a07e8df6be10d477bcd9789ee305f594.png

c8717511381e3c237a8b9ce7315d51ba.png

04faac2a4ea0d97e81e94f81ad36c4d4.png

457185d7e38ed1cc8af6693948ea1488.png

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值