我这样写的服务器端发送心跳包程序和客户端接受程序有什么问题么?

yoogle 2006-06-09 02:39:50
客户端已经登陆了,但是没怎样。服务器端就认为客户端掉线了,怎么回事?

服务器端:
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;
}
...全文
466 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
mynamelj 2006-06-12
  • 打赏
  • 举报
回复
对于TCP协议不需要心跳包,如果是UDP你则需要在应用层实现心跳包.
yoogle 2006-06-12
  • 打赏
  • 举报
回复
大家都是大牛人啊,对于每个问题,其实我也可以当专家阿,我也可以说去。。。吧,那里有很多例子。谁不知道那里有很多例子阿,但是我今天在这里问了问题,就是希望能得到一些能切实解决我的问题的回答。
是我的问题太简单不屑于回答么?还是太麻烦了,懒得回答。难道专家分就那么好赚么??
mynamelj 2006-06-12
  • 打赏
  • 举报
回复
TO:nuaawenlin(飘人) ( ) 信誉:105
-------------------------------------
www.baidu.com

这个更绝
yoogle 2006-06-12
  • 打赏
  • 举报
回复
ding
yoogle 2006-06-11
  • 打赏
  • 举报
回复
ding
nuaawenlin 2006-06-09
  • 打赏
  • 举报
回复
www.vckbase.com

有好多例子参照
yoogle 2006-06-09
  • 打赏
  • 举报
回复
帮忙改改吧?我第一回写网络相关的程序
jacklzw88 2006-06-09
  • 打赏
  • 举报
回复
你这个错误太多了吧首先客户端IPPROTO_IP?
其次你这个,一个服务器端都只能监控一个客户端了

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧