题目:基于UDP实现直播间聊天的功能
需求:
软件划分为用户客户端和主播服务端两个软件client.c和server.c
用户客户端负责:
1.接收用户的昵称
2.接收用户输入的信息,能够将信息发送给服务端
3.接收服务端回复的数据信息,并完成显示
主播服务端负责:
1.对所有加入直播间的用户的IP地址和端口实现管理(加入、退出)
2.当有新的客户端加入时,能够向所有客户端提示:"欢迎 XXX 用户进入直播间"
3.当有客户端退出时,能够向所有客户端提示:"XXX 离开直播间"
4.能够实现客户端聊天内容的转发,当某个客户端发送聊天信息时,能够将该信息转给除了该用户之外聊天室内所有其余客户端用户
实现服务端对用户的管理(1.查看当前直播间的在线人数 2.能够实现禁言、踢出直播间功能)
TCP通信:
TCP发端:
socket
connect
send
recv
close
TCP收端:
socket
bind
listen 监听
accept
send
recv
close
1.connect
int connect(int sockfd, const struct sockaddr *addr,
socklen_t addrlen);
功能:
发送链接请求
参数:
sockfd: 套接字文件描述符
addr: 目的地址 存放空间首地址
addrlen: IP地址的 大小
返回值:
成功返回0
失败返回-1
2.send
ssize_t send(int sockfd, const void *buf, size_t len, int flags);
功能:
发送数据
参数:
sockfd: 文件描述符
buf: 发送数据空间首地址
len: 发送数据的 长度
flags: 属性默认为0
返回值:
成功 返回 实际发送字节数
失败 返回 -1
3.recv
ssize_t recv(int sockfd, void *buf, size_t len, int flags);
功能:
接收数据
参数:
sockfd: 套接字文件描述符
buf: 存放数据空间首地址
len: 最大接收数据的长度
flags: 属性默认为0
返回值:
成功 返回 实际接收字节数
失败 返回-1
如果对方退出,返回0
4.listen
int listen(int sockfd, int backlog);
功能:
监听客户端发送的 连接请求
该函数不会阻塞
参数:
sockfd: 套接字文件描述符
backlog: 允许等待的尚未被处理的三次握手请求的最大个数 若最大接受10个 第11个不会接收 若处理完成10个 继续接收10个
返回值:
成功 返回 0
失败 返回 -1
5.accept
int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
功能:
处理 等待连接队列 中的 第一个连接请求
该函数具有阻塞功能(如果没有人发送链接请求,会阻塞等待)
参数:
socket: 套接字文件描述符
address: 存放IP地址的空间 首地址
addrlen: 存放IP 地址大小 空间首 地址
返回值:
成功 返回 一个新的文件描述符
失败 返回-1