我用TCP协议编写c/s socket。刚开始的时候一切正常,双客户可以同时工作。时间长了以后就出问题了。有个客户就卡住了,没有反应。A客户卡住的时候,点击B客户时B客户卡住了没有反应而A客户得到正确数据不卡了。再点击A客户则A客户卡住,B客户得到正确数据并解卡。这样交替进行。很是奇怪。
我调试了一下。sever在recv的时候得到A客户的SOCKET_ERROR,然后关闭套结字和线程。但是客户端阻塞在recv就没有反应了,卡在这里。当B客户建立连接的时候,sever接受到的是A的内容,然后好像是从A的socket中把数据发走了,所以A客户解卡,B客户取而代之。
代码如下:
sever端:
ret=recv(sock,&recvBuff[idx],nLeft,0);
if(ret==SOCKET_ERROR)
{
TRACE("recv failed: %d!\n",WSAGetLastError()); int recverror=0;
ret=send(sock,(char*)&recverror,4,0); closesocket(sock);
return 0;
}
客户端就是发了一个字符串然后等待接受。为什么我的closesocket(sock)好像没有关闭sock呢?WSAGetLastError()返回的错误是10038或者10054。我把linger设置成强制关闭也没有效果!请大家帮忙!
我调试了一下。sever在recv的时候得到A客户的SOCKET_ERROR,然后关闭套结字和线程。但是客户端阻塞在recv就没有反应了,卡在这里。当B客户建立连接的时候,sever接受到的是A的内容,然后好像是从A的socket中把数据发走了,所以A客户解卡,B客户取而代之。
代码如下:
sever端:
ret=recv(sock,&recvBuff[idx],nLeft,0);
if(ret==SOCKET_ERROR)
{
TRACE("recv failed: %d!\n",WSAGetLastError()); int recverror=0;
ret=send(sock,(char*)&recverror,4,0); closesocket(sock);
return 0;
}
客户端就是发了一个字符串然后等待接受。为什么我的closesocket(sock)好像没有关闭sock呢?WSAGetLastError()返回的错误是10038或者10054。我把linger设置成强制关闭也没有效果!请大家帮忙!
解决方案 »
- 关于socket的问题,请教大牛
- 做资源dll如何处理CGridCtrl
- 求助:求OpenGL中虚拟球的详细教程。。。
- 如何用钩子屏蔽鼠标的输入?
- 怎样用vc开发录音程序,并且格式要为wma格式,我自己开发的程序录音质量太差!
- 关于消息钩子的问题:抓到消息后,想把消息转发给自己的应用程序处理该用什么函数呢?SENDMESSAGE行不通...内详
- 字符串拷贝有几种函数?能够限制,拷贝到目的地址,最大长度的是哪种?
- 我在win2000用isapi的*pCtxt << _T("")输出到html为什么到8k就不能输了?
- 关于microsoft platform windows server 2003 sp1
- 请问这有什么区别?
- MAPI 相关
- 请问有没有快捷的方法可以实现excel的两个worksheet之间的比较
10054 An existing connection was forcibly closed by the remote host. WSAECONNRESET