【020】Linux网络编程-20 socket编程15

1.UDP聊天室的实现

1.1 架构图

先客户端C1向服务器发送一个登录消息C2S_LOGIN的登录消息;

如果登录成功,则服务器返回S2C_LOGIN_OK,如果登录失败则返回S2C_ALREADY_LOGINED已经登录过了);

如果登录成功之后,服务器会返回所当前登录过的列表给客户端;

同时,c1客户端登录成功后,服务器S会发送一个信息给S2C_SOMEONE_LOGIN给C2或者更多的客户端信息,表明

有新的用户登录了服务器;

 客户端同样可以给服务器S发送用户在线列表的请求C2S_ONLINE_USER;

 服务器会响应S2C_ONLINE_USER;

客户端退出聊天室C2S_LOGOUT,同时服务器会通知其他的客户端有用户登出了;

  • 客户端和客户端之间可以点对点的聊天,发送的是C2C_CHAT的指令;
  • 此处没有实现多聊:实现多聊的思路有两个:

【思路1】1个客户端发送消息给服务器,然后服务器发送给其他的客户端;

【思路2】客户端维护一个所有的其他客户端的列表和信息,客户发送给其他的客户端;

 1.2 测试

先启动聊天室的服务端程序,再启动客户端程序:

 

 如果再次登录同样的用户名aa,则服务器返回下面的信息:

 另外一个客户端登录后的之前登录的客户端的反馈信息:

另外一个客户端登录后的服务端的反馈信息:

 

【 发送消息bb给aa发送xxx的消息】

客户端aa:

客户端bb:

【用户退出】

退出的客户端

 服务器打印信息:

 

 其他的客户端收到的信息:

1.3 程序分析

首先把所有的信息定义到宏里:

 

posted @ 2021-10-06 15:48  OzTaking  阅读(35)  评论(0)    收藏  举报