socket_udp
目录
1.服务端的实现Server:
1.1 UdpServer类结构概要:
1.2 主要成员函数讲解:
1.2.1 Init
(1)创建udp_socket
(2)绑定(bind) socket
1.2.2 Run
(1)接收客户端的消息:recvfrom
(2)检查用户是否第一次登入:CheckUser
(3)广播消息:Broadcast
2.客户端的实现Client:
2.1 概述过程:
2.2 具体实现:
2.2.2 接收信息 recv_message:
2.2.3 发送信息 send_message:
3.测试案例:
3.1 打开服务端:
3.2 打开客户端:
3.3 展示通信效果:
4.完整代码:
1.服务端的实现Server:
1.1 UdpServer类结构概要:
创建一个UdpServer类,其成员变量:

成员函数:
UdpServe ~UdpServe Init Run CheckUser Broadcat
1.2 主要成员函数讲解:
1.2.1 Init

(1)创建udp_socket

(2)绑定(bind) socket
先初始化struct socketaddr_in local (sin_family sin_port sin_addr)
端口号和IP地址都要网络序列化(大端存储)
用到了htons()和inet_addr()
然后再bind

1.2.2 Run

(1)接收客户端的消息:recvfrom

(2)检查用户是否第一次登入:CheckUser
通过unordered_map进行匹配查找。
(3)广播消息:Broadcast
把接收到的消息发送给所有用户的客户端。
sendto() 发送消息给客户端

2.客户端的实现Client:
2.1 概述过程:
采用多线程的方式实现,客户端既可以发送消息,也能接收消息。所有创建了2个线程,并创建一个结构体【struct ThreadData】来描述线程信息。
准备通信:还是和服务端一样创建socket,初始化服务端的各种成员,此处不需要手动bind,其客户端已经自动bind了。
然后让两个线程,一个发送信息,一个接收消息。
2.2 具体实现:
2.2.1 创建socke并初始化


2.2.2 创建线程:

2.2.2 接收信息 recv_message:

2.2.3 发送信息 send_message:

3.测试案例:
3.1 打开服务端:

3.2 打开客户端:
开启2个终端:【1】一个发送消息,【0】一个接收消息。

为什么要 2> 因为接收到消息后,打印到错误屏幕上,其文件描述符为2.
![]()
3.3 展示通信效果:
目前还存在终端缓存区问题。

4.完整代码:
全文代码:

Linux: 记录Linux学习。
