关于 CAsyncSocket Send 的一个小疑点! 马上给分
关于 CAsyncSocket Send 的一个小问题!!!!!!!! 马上给分
使用 CAsyncSocket 异步类,连接好后,在程序需要的时候 开调用send 发送数据。(可能会循环发送很多数据 量不大但是发送的次数可能会很多)
在局狱网中 测试良好,在Internet上测试,发现接收端 有很多包没有接受得到,但是连接却是正常的。
注:为了性能,我发送的数据并不需要接受端发来确认。
看了MSDN的资料,Send(buf,len) 会返回
==len,这个最好了
==SOCKET_ERROR 这种情况又要处理下面的
{
GetLastError() =
WSAEWOULDBLOCK //我理解为忙,但是数据已经复制到缓冲区,等会系统会自动帮你发
不是WSAEWOULDBLOCK //我理解为网络出错。
}
最后一种是 < len //这个这么处理?难道我要循环发送没有发完的数据?
MSDN 上是在OnSend里处理的,如果在我的程序里这样做,我根本不知道这个OnSend是发送哪块数据返回的。
我要怎么处理啊?
------解决方案--------------------
这个问题,我自己已经解决了!!
< len ,才是部分完成,剩下的系统会帮你完成。(换句话说,出现这个问题,你可以不用理睬)
GetLastError() =
WSAEWOULDBLOCK // 这个才是问题的关键 缓冲区满,发送不成功。 这个你需要重新循环发送,知道成功,当然这时候你就变成了非阻模式了。
使用 CAsyncSocket 异步类,连接好后,在程序需要的时候 开调用send 发送数据。(可能会循环发送很多数据 量不大但是发送的次数可能会很多)
在局狱网中 测试良好,在Internet上测试,发现接收端 有很多包没有接受得到,但是连接却是正常的。
注:为了性能,我发送的数据并不需要接受端发来确认。
看了MSDN的资料,Send(buf,len) 会返回
==len,这个最好了
==SOCKET_ERROR 这种情况又要处理下面的
{
GetLastError() =
WSAEWOULDBLOCK //我理解为忙,但是数据已经复制到缓冲区,等会系统会自动帮你发
不是WSAEWOULDBLOCK //我理解为网络出错。
}
最后一种是 < len //这个这么处理?难道我要循环发送没有发完的数据?
MSDN 上是在OnSend里处理的,如果在我的程序里这样做,我根本不知道这个OnSend是发送哪块数据返回的。
我要怎么处理啊?
------解决方案--------------------
这个问题,我自己已经解决了!!
< len ,才是部分完成,剩下的系统会帮你完成。(换句话说,出现这个问题,你可以不用理睬)
GetLastError() =
WSAEWOULDBLOCK // 这个才是问题的关键 缓冲区满,发送不成功。 这个你需要重新循环发送,知道成功,当然这时候你就变成了非阻模式了。