本节将要实现的功能是:当有客户端程序连接到服务端时,服务端通知所有客户端,有新的客户端加入。
首先增加一个消息命令和消息结构体:
enum CMD
{
CMD_LOGIN,
CMD_LOGIN_RESULT,
CMD_LOGINOUT,
CMD_LOGOUT_RESULT,
CMD_ERROR,
CMD_NEWUSERJOIN,
};
struct NewUserJoin :public DataHeader
{
NewUserJoin()
{
dataLength = sizeof(LogoutResult);
cmd = CMD_NEWUSERJOIN;
result = 0;
}
int result;
};
服务端程序中:进行如下修改。 在有新的客户端连接时,对g_clinets 数组中的客户端发送消息,告诉大家有新的客户端接入。
if (FD_ISSET(_sock, &fdRead)) //判断_sock是否在fdRead中, 如果在 表明有客户端连接请求
{
FD_CLR(_sock, &fdRead);
// 4. 等待接受客户端连接 accept
sockaddr_in _clientAddr = {};
int cliendAddrLen = sizeof(_clientAddr);
SOCKET _clientSock = INVALID_SOCKET; // 初始化无效的socket 用来存储接入的客户端
_clientSock = accept(_sock, (sockaddr*)&_clientAddr, &cliendAddrLen);//当客户端接入时 会得到连入客户端的socket地址和长度
if (INVALID_SOCKET == _clientSock) //接受到无效接入
{
cout <