聊天室



构建描述client的类对象
InetAddr就是sockaddr_in的 C++ 包装,帮你封装字节序转换、字符串 IP 和网络整数 IP 的互转,上层业务不用反复写htons/ntohs/inet_ntoa。

用户可能传进来ip和port
也有可能传进来套接字地址结构体sockaddr_in
sockaddr_in

ip和port

接下来修改一下之前的代码
填充网络信息

绑定网络信息,新增_len成员变量


cpp
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里面重载==

searchuser

adduser

deluser

modify

消息转发

Breadcase

为了获得用户顺序表在Usermanage里面要有接口给我们返回该顺序表

CheckUser
实现检查用户时否为第一次发消息,如果是第一次就加入

OffLineUser

服务端

上面两个内容都不是服务端应该要实现的,我们要用回调函数的方法来解决


相应的回调函数的方法传入,并且初始化

start实现调用

server
