服务端开启一个线程,专门accept,如果有新的连接则创建新线程,在这新线程中也是一个while循环反复读取数据。除非读取出错。
在一个客户端的时候没有问题,但如果有两个客户端,第二个连接成功后过一下前一个负责读取客户端数据的线程就会退出,查看错误是10054“An existing connection was forcibly closed by the remote host. ”。不是listen问题,我设的最大连接数目是客户端数目的两倍。在想会不会和客户端的连接方法有关,或者和服务端绑定时的设置有关?
在一个客户端的时候没有问题,但如果有两个客户端,第二个连接成功后过一下前一个负责读取客户端数据的线程就会退出,查看错误是10054“An existing connection was forcibly closed by the remote host. ”。不是listen问题,我设的最大连接数目是客户端数目的两倍。在想会不会和客户端的连接方法有关,或者和服务端绑定时的设置有关?
解决方案 »
- 求助KeInitializeTimerEx 用法
- MFC规则DLL无法显示对话框(能正常运行结束)
- 向Vista Icon进军!
- 程序中,对话框大小动态改变时,对话框上的控件如何与之适应
- 奇怪的“啊”
- 问工具栏显示256色图标问题,位图有关!!
- 如何获得及反转py.ime?
- DCOM文件传输——银子不多,交个朋友
- -------------help--------ABOUT ACM
- 出错,为什么?VERIFY(m_Button.SubclassDlgItem(IDC_BUTTON1,this));
- 【SOS】ADO 查询ACCESS时不能区分大小写。该怎么区分?
- 请问我这段多线程代码为什么会死机?
应该是你处理client thread时,有公共变量的访问.调试下.
tcp_keepalive sKA_Settings = {0}, sReturned = {0} ;
sKA_Settings.onoff = 1 ;
sKA_Settings.keepalivetime = 5500 ; // Keep Alive in 5.5 sec.
sKA_Settings.keepaliveinterval = 3000 ; // Resend if No-Reply
if (WSAIoctl(tcpClientSock, SIO_KEEPALIVE_VALS, &sKA_Settings,
sizeof(sKA_Settings), &sReturned, sizeof(sReturned), &dwBytes,
NULL, NULL) != 0)
{
dwError = WSAGetLastError() ;
}之后是确定这是第几个连接,保存socket到全局数组里,然后就开启线程CWinThread* pThread=AfxBeginThread(RecvThread,(LPVOID)emptyIndex);RecvThread中也没什么特别的,就是while循环反复读取 while(1){
memset(&msg,0,sizeof(MSG_RECEIVE));
int count=recv(glClientInfoList[index].sock,(char*)&msg,sizeof(MSG_RECEIVE),0);
if(count>0){
ProcessMessage(glClientInfoList[index].module,msg,index);
}else
break;
}
LogDll("WSAGetLastError()",WSAGetLastError());但在新的客户端连接时,就会退出循环,打印出LastError是10054
memset(&msg,0,sizeof(MSG_RECEIVE));
int count=recv(glClientInfoList[index].sock,(char*)&msg,sizeof(MSG_RECEIVE),0);
msg是什么?
是结构体的话,直接就是:
memset(msg,0,sizeof(MSG_RECEIVE));
int count=recv(glClientInfoList[index].sock,(char*)msg,sizeof(MSG_RECEIVE),0);
http://topic.csdn.net/u/20080102/17/6a0edae5-f506-44e0-aa30-f54bf11a1e70.html