聊天室构建描述client的类对象InetAddr就是sockaddr_in的 C 包装帮你封装字节序转换、字符串 IP 和网络整数 IP 的互转上层业务不用反复写htons/ntohs/inet_ntoa。用户可能传进来ip和port也有可能传进来套接字地址结构体sockaddr_insockaddr_inip和port接下来修改一下之前的代码填充网络信息绑定网络信息,新增_len成员变量void Init() { // 1.创建socket,打开网络文件---本质就是打开网卡 _sockfd socket(AF_INET, SOCK_DGRAM, 0); if (_sockfd 0) { exit(10); } cout 打开网络文件成功 endl; LOG(LogLevel::INFO) create socket success,sockfd: _sockfd; // 2.填充网络信息 InetAddr local(_port); // 3.bind socket信息 int n bind(_sockfd, (struct sockaddr *)local.GetNetAddrress(), local.GetLen()); // int n bind(_sockfd, (struct sockaddr *)local, sizeof(local)); if (n 0) { LOG(LogLevel::FATAL) bind socket error; exit(9); } else { LOG(LogLevel::INFO) bind socket success port: _port; } }管理client为了便于管理我们在InetAddr里面重载searchuseradduserdelusermodify消息转发构造函数Breadcase为了获得用户顺序表在Usermanage里面要有接口给我们返回该顺序表CheckUser实现检查用户时否为第一次发消息,如果是第一次就加入OffLineUser服务端上面两个内容都不是服务端应该要实现的,我们要用回调函数的方法来解决相应的回调函数的方法传入,并且初始化start实现调用server测试一下可以进行通信但是也存在问题也就说一方发消息另外一方可以进行接受,但是我们现在实现的这个却是有点问题,要一方发消息才能接受另外一方发过来的消息解决上面存在的问题