泗县网站建设与推广培训自己主机做多个网站
题目:基于UDP实现直播间聊天的功能
 需求:
     软件划分为用户客户端和主播服务端两个软件client.c和server.c 
    用户客户端负责:
         1.接收用户的昵称
         2.接收用户输入的信息,能够将信息发送给服务端
         3.接收服务端回复的数据信息,并完成显示
     
     主播服务端负责:
         1.对所有加入直播间的用户的IP地址和端口实现管理(加入、退出)
         2.当有新的客户端加入时,能够向所有客户端提示:"欢迎 XXX 用户进入直播间"
         3.当有客户端退出时,能够向所有客户端提示:"XXX 离开直播间"
         4.能够实现客户端聊天内容的转发,当某个客户端发送聊天信息时,能够将该信息转给除了该用户之外聊天室内所有其余客户端用户
     
         实现服务端对用户的管理(1.查看当前直播间的在线人数 2.能够实现禁言、踢出直播间功能)
TCP通信: (可做流量控制)
TCP发端:        5
   1.  socket               创建套接字文件  描述符
     2.connect               发送链接请求
     3.send                       发送数据
     4.recv                         接受数据
     5.close                          关闭套接字fd
TCP收端:          7
     1. socket 
     2.bind                  在 套接字 上绑定一个    IP地址和端口号
     3.listen                  监听客户端发送的 连接请求
    4.accept                    处理 等待连接队列 中的 第一个连接请求    
    5.send                                
     6.recv 
     7.close                           close(fd),close(sockfd)
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 
