总是发不了包?!原因何在?(100分)

  • 主题发起人 主题发起人 oldwolf201
  • 开始时间 开始时间
O

oldwolf201

Unregistered / Unconfirmed
GUEST, unregistred user!
void __fastcall TMyThread::Execute()
{
while(blncontinue)
{
memset(RecvBuf, 0, sizeof(RecvBuf));
//表示接收内网的IP包
blnin=false;
//接收内部IP包
iErrorCode = recv(Sockin, RecvBuf, sizeof(RecvBuf), 0);
if (iErrorCode>=0)
{
CheckSockError(iErrorCode,"recv");
//IP包解包
blncontinue = DecodeIpPack(RecvBuf, iErrorCode);
if (blncontinue)
{
CheckSockError(iErrorCode, "Decode");
//IP_HEADER *pIpheader;
//pIpheader = (IP_HEADER *)RecvBuf;
//ShowMessage(pIpheader->sourceIP);
//ShowMessage(pIpheader->destIP);
iErrorCode=send(Sockout,RecvBuf,sizeof(RecvBuf),3);
}
else
blncontinue=true;
}
}
}
iErrorCode的值始终为-1,请问原因何在?
 
有几个问题:
1、memset(RecvBuf, 0, sizeof(RecvBuf));
-》memset(RecvBuf, 0, strlen(RecvBuf));//或者直接用recvbuf数组的长度
2、iErrorCode = recv(Sockin, RecvBuf, sizeof(RecvBuf), 0);
iErrorCode=send(Sockout,RecvBuf,sizeof(RecvBuf),3);
这个修改同1,因为,一个sizeof(char *) = 4;sizeof(char) = 1;
3、如果你的socket是nonblock方式,在接收时需要先调用select,如果是可读的,才能调用recv;
 
先改掉上面的错误,不过即使缓冲区大小为1也不应该返回-1
建议调用WSAGetLastError看看错误码
 
你这段程序本身没有什么问题哦
应该不会总是返回-1
你多测试几次
 
不好意思,确实是在测试的时候没注意
程序只是偶尔返回-1,是正确的。
 
多人接受答案了。
 
后退
顶部