BOOL rtc = cUdpSocket->Create(localPort,SOCK_DGRAM);
if(rtc == FALSE)
{
int nErr = GetLastError();
return nErr;
}cUdpSocket->AsyncSelect(FD_READ|FD_CLOSE);
cUdpSocket->Connect(remoteHostName, remotePort);
------------------------------------------
以上代码是我创建UDP Socket的代码int rtc = 0;
rtc = Send(lpBuf, nBufLen, nFlags);
if(rtc == SOCKET_ERROR)
{
rtc = this->GetLastError();
}
return rtc;
----------------------------------------
以上是发送的代码
结果运行一段时间以后,Send数据包过去,对方没反应,但是我Send函数也不报错,可是我却能收到对方发过来的数据包,这是怎么回事?
if(rtc == FALSE)
{
int nErr = GetLastError();
return nErr;
}cUdpSocket->AsyncSelect(FD_READ|FD_CLOSE);
cUdpSocket->Connect(remoteHostName, remotePort);
------------------------------------------
以上代码是我创建UDP Socket的代码int rtc = 0;
rtc = Send(lpBuf, nBufLen, nFlags);
if(rtc == SOCKET_ERROR)
{
rtc = this->GetLastError();
}
return rtc;
----------------------------------------
以上是发送的代码
结果运行一段时间以后,Send数据包过去,对方没反应,但是我Send函数也不报错,可是我却能收到对方发过来的数据包,这是怎么回事?
网络错误一般是通过recv函数来捕获的。可以在recv函数后边捕获网络错误 我估计是他服务器端的问题,配合调试一下
另外如果发送端发送数据过快,接收端接收数据慢(可能正在处理其他数据)。接受缓冲区满后
udp是会直接将后来的数据丢弃的,因为udp不使用滑动窗口来协调双方发送和接受速度。
这样只能缓解丢包率(检查一下客户端机器是否比服务器端快,另外服务器的编写方式不好也可能造成没有及时从socket 缓冲区接收数据,导致缓冲区满) 2.也有可能是一小部分数据包在客户端,就被丢弃了;或者被服务器端的网络接口卡丢弃了。 3.总之,局域网之内发生很小的丢包率是正常的。丢包后需要客户端重新发送数据
rtc小于nBufLen,那么表明数据未完全发送出去,需将剩下的数据继续发送,直至全部数据发送完为止。
如果你收到的这个数据报,是因为对方相应了你发过去数据报,那就说明他受到了你的数据报。
如果你收到的这个数据报,是对方主动发给你的,我就晕了,呵呵还是用wireshark抓一下包
UDP的只能sendto