为啥总是大约2分钟后就会出现--接收数据错误:10053?

gavinyu 2005-02-20 08:23:52
代码如下:
long rc;
char buf[1024];

int count = 0;
bool bNewPacket = false;
int curLen = 0, packetLen = 0;
while(1)
{
fd_set fds;
fds.fd_count = 1;
fds.fd_array[0] = m_socket;//这个已经为有效值
timeval tv;
tv.tv_sec = 1;
tv.tv_usec = 0;

int iSelectRet = select(0, &fds, NULL, NULL, &tv);
if (iSelectRet == SOCKET_ERROR)
{
printf("Select error:%d\n", WSAGetLastError());
break;
}

if( __WSAFDIsSet(m_socket, &fds) == 0 )
continue;

if(bNewPacket)
{
rc = recv(m_socket, buf+curLen, packetLen-curLen, 0);
curLen += rc;

if(curLen == packetLen)
{
//Do something here...
bNewPacket = FALSE;
curLen = 0;
packetLen = 0;
count++;
}
else
continue;
}
else
{
rc = recv(m_socket, buf+curLen, 2, 0);
if (rc == SOCKET_ERROR)
{
printf("接收数据错误:%d\n", WSAGetLastError());
break;
}

curLen += rc;
if(curLen == 2)
{
bNewPacket = true;
packetLen = *(short*)buf;
}
}

}
...全文
135 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
kingzai 2005-02-21
  • 打赏
  • 举报
回复
10053表示对端有一个RST网络事件发生,所以你要检查你的对端程序.可能是客户端发送后引发了一个非正常的网络操作.你也可以用sniffer等网络抓包工具看看,问题应该出在你客户端程序send的时候
xjtuzhw 2005-02-21
  • 打赏
  • 举报
回复
过时断开
fisker0303 2005-02-21
  • 打赏
  • 举报
回复
看不出什么问题,会不会是因为在处理接收到的数据的时候,耽误的时间稍长而导致放弃连接?

以前我就遇到过,在数据库中处理接收的数据时时间过长,而导致服务器放弃连接。
gavinyu 2005-02-21
  • 打赏
  • 举报
回复
10053:是本机软件放弃连接阿...
总得有个原因吧~
ayanamiwww 2005-02-21
  • 打赏
  • 举报
回复
GetLastError()看错误代码
gavinyu 2005-02-21
  • 打赏
  • 举报
回复
问题解决了,不是这段程序的原因,协议的问题...
谢谢大家~~
flashboy 2005-02-20
  • 打赏
  • 举报
回复
可能是连接断开了。

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧