读书人

简单的socket接收有关问题

发布时间: 2012-09-14 23:00:49 作者: rapoo

简单的socket接收问题
环境:VS2008 MFC 单文档 Formview
问题:我使用socket连接2台仪器进行tcp通讯,对方做服务器端,我这是客户端。通讯过程中如果对方关掉closesocket(),我这边为什么检测不到?

C/C++ code
ret = send(m_sock, sdata0, 5, 0);    //发送数据            if(ret <= 0)            {                ret = WSAGetLastError();                TcpError(ret);                return;            }            rrlen = 0;            memset(m_tcpRcvData, 0, TCP_READ_DATA_LENGTH);            while(rrlen < TCP_READ_DATA_LENGTH)            {                int rlen = recv(m_sock, m_tcpRcvData + rrlen, TCP_READ_DATA_LENGTH - rrlen, 0);        //接收通道数据                if(rlen < 0)                    break;                rrlen += rlen;                ret = WSAGetLastError();                if(ret < 0)                {                    TcpError(ret);                    return;                }            }


服务端关掉socket后,我这里一直在while循环里阻塞,接收到的数据=0,WSAGetLastError也为0。但感觉如果对方关闭了 的话,应该接收出错才是吧,为什么没有报错呢?

[解决办法]
可以修改一下:
while(rrlen < TCP_READ_DATA_LENGTH)
{
int rlen = recv(m_sock, m_tcpRcvData + rrlen, TCP_READ_DATA_LENGTH - rrlen, 0); //接收通道数据
if(rlen == 0)
break;
//继续写 。。。。。

读书人网 >VC/MFC

热点推荐