我的程序是一个十分简单的telnet客户端
先是用winsocket的connect()连接23端口
然后用recv()接受数据问题是,如果我connect()成功后马上开始循环调用recv()收数据
发现第一次收只会收到3个byte(对方发送过来的数据肯定大于3个)
但若在connect()和recv()间先sleep个几秒后则能正常收取数据
请问这是何故?-----部分代码-----------
WSAStartup(0x0101,&wd);
char pBuf[128]; CSocketDx SocketDx("166.111.8.238", IPPORT_TELNET);
m_hSocket = SocketDx.TelnetConnect(); Sleep(5000);//不加这句,第一次nRet就只等于3
while ((nRet = recv(m_hSocket,pBuf,sizeof(pBuf),0)) > 0)
{
if (nRet < sizeof(pBuf))
{
pBuf[nRet] = '\0';
ofile.Write(pBuf, nRet);
break;
}
if ( SOCKET_ERROR == nRet)
{
break;
}
ofile.Write(pBuf, nRet);
}
先是用winsocket的connect()连接23端口
然后用recv()接受数据问题是,如果我connect()成功后马上开始循环调用recv()收数据
发现第一次收只会收到3个byte(对方发送过来的数据肯定大于3个)
但若在connect()和recv()间先sleep个几秒后则能正常收取数据
请问这是何故?-----部分代码-----------
WSAStartup(0x0101,&wd);
char pBuf[128]; CSocketDx SocketDx("166.111.8.238", IPPORT_TELNET);
m_hSocket = SocketDx.TelnetConnect(); Sleep(5000);//不加这句,第一次nRet就只等于3
while ((nRet = recv(m_hSocket,pBuf,sizeof(pBuf),0)) > 0)
{
if (nRet < sizeof(pBuf))
{
pBuf[nRet] = '\0';
ofile.Write(pBuf, nRet);
break;
}
if ( SOCKET_ERROR == nRet)
{
break;
}
ofile.Write(pBuf, nRet);
}
使用非阻塞,的select或者其他 IO模型
---
可怎样才算全部接收完?当recv()返回等于0么?可我发现如果没有数据可收,程序会阻塞在recv(),并不会返回0
我telnet的设备只有1米多的网线 也要Sleep(3000);左右才会收到数据 。
我想socket就是这样的吧 。LZ可以使用多线程 。