客户端已经登陆了,但是没怎样。服务器端就认为客户端掉线了,怎么回事?服务器端:
DWORD WINAPI WatchThread(LPVOID lpParameter)
{
int i;
SOCKET ConnectSocket;
sockaddr_in clientService; 
ConnectSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (ConnectSocket == INVALID_SOCKET) {
return 0;
}
while (TRUE)
{
         Sleep(5000);
                 //下面是g_ouIndex个客户端
for(i=0;i<g_ouIndex;i++)
{
clientService.sin_family = AF_INET;
clientService.sin_addr.s_addr = inet_addr(g_onlineUser[i].pSI->ip);
clientService.sin_port = htons(HEARTBREAK_PORT);
//连接客户端
if(connect(ConnectSocket, (struct sockaddr *)&clientService, sizeof (clientService)) == SOCKET_ERROR) 
{
PrintSystemError("test,用户可能掉线");
}
}
return 0;
}客户端:
UINT threadRecvHeartbreak(LPVOID v)
{
SOCKET sListen, sAccept;
SOCKADDR_IN inetAddr;
if ((sListen = socket (AF_INET, SOCK_STREAM, IPPROTO_IP)) == INVALID_SOCKET) 
{
AfxMessageBox("线程threadRecvHeartbreak创建socket出错!");
return 1;
}
inetAddr.sin_family=AF_INET;
inetAddr.sin_addr.s_addr=  inet_addr(dlg->m_strServerIp);
inetAddr.sin_port=htons(HEARTBREAK_PORT);
if(bind(sListen,(SOCKADDR*)&inetAddr,sizeof(inetAddr)) ==SOCKET_ERROR)
{
exit(0);
return -1;
} //侦听
if(listen(sListen,5)!=0)
{
AfxMessageBox("错误:listen failed in threadMsg");
return -1;
}
while(TRUE)
{
   //接受侦听
   int sockLen = sizeof(inetAddr);
    if((sAccept=accept(sListen,(SOCKADDR*)&inetAddr,&sockLen))==INVALID_SOCKET)
    {
int iRet = WSAGetLastError();
PrintSystemError("不能接受socket accept连接请求");
return -1;
    }
}
return 0;
}