首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

Tcp ip recv老是返回10060,但又能正常接收发送数据

2013-04-09 
Tcp ip recv总是返回10060,但又能正常接收发送数据?本帖最后由 t101706 于 2013-04-03 11:00:17 编辑bool

Tcp ip recv总是返回10060,但又能正常接收发送数据?
本帖最后由 t101706 于 2013-04-03 11:00:17 编辑


bool CCoffee::Connect(void)
{
u_longulTmp;
SOCKADDR_INSockAddr;

Disconnect(); // 断开连接

// 创建socket
mc_SendSocket = socket(PF_INET, SOCK_STREAM, IPPROTO_IP);
if(mc_SendSocket == INVALID_SOCKET)
goto ErrEntry;

// 设置socket为阻塞方式
ulTmp = 0;
if(ioctlsocket(mc_SendSocket, FIONBIO, &ulTmp) != 0)
goto ErrEntry;

// 设置socket发送超时
if(setsockopt(mc_SendSocket, SOL_SOCKET, SO_SNDTIMEO, (char *)&mc_nSendTimeOut, sizeof(mc_nSendTimeOut)) != 0)
goto ErrEntry;

if(setsockopt(mc_SendSocket, SOL_SOCKET, SO_RCVTIMEO, (char *)&mc_nRecvTimeOut, sizeof(mc_nRecvTimeOut)) != 0)
goto ErrEntry;
// 连接服务端
InitSockAddr(&SockAddr, mc_ServerIpAddr.GetBuffer(), mc_Port);
if(connect(mc_SendSocket, (sockaddr *)&SockAddr, sizeof(SOCKADDR_IN)) != 0)
goto ErrEntry;


return TRUE;
ErrEntry:
int i = GetLastError();
Disconnect();
return FALSE;
}

void CCoffee::SendRecv(void)
{
char Buf[32768] = {0}; // 接收缓冲区
int nErr;
while(true)
{
memset(Buf,0,32768);
nErr = recv(mc_SendSocket, Buf, 32768, 0);

if(nErr == SOCKET_ERROR) // 有错误发生
{
nErr = WSAGetLastError();
if(nErr == WSAECONNRESET){
// socket连接被peer端关闭,虚电路复位等错误,出现此类型的错误时socket必须被关闭。
//ForcePostMessage(WM_SOCKETCLOSE, 0, (LPARAM)m_pTcpClient);
break;
}
else
{

//ForcePostMessage(WM_SOCKETRECVERR, 0, (LPARAM)m_pTcpClient);
}
}
else if(nErr == 0) // socket被动关闭
{
//ForcePostMessage(WM_SOCKETCLOSE, 0, (LPARAM)m_pTcpClient);
break;
}
else // 接收到数据
{
SendDoRecv(Buf, nErr); // 处理接收到的数据
}
}; // while
}



tcp socket c
[解决办法]
if(setsockopt(mc_SendSocket, SOL_SOCKET, SO_SNDTIMEO, (char *)&mc_nSendTimeOut, sizeof(mc_nSendTimeOut)) != 0)
        goto ErrEntry;
     
    if(setsockopt(mc_SendSocket, SOL_SOCKET, SO_RCVTIMEO, (char *)&mc_nRecvTimeOut, sizeof(mc_nRecvTimeOut)) != 0)
        goto ErrEntry;

这里发送了两次。。
[解决办法]
10060是由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败

我没有看懂楼主的程序。

 InitSockAddr(&SockAddr, mc_ServerIpAddr.GetBuffer(), mc_Port);
初始化服务端的地址和端口,连接
然后recv指定监听 32768端口。没有看到你bind这个端口啊
服务器发给客户端的数据,是发到32768端口上吗?

热点排行