关于IOCP UDP 的WSARecvFrom,唯有一次完成状态
关于IOCP UDP 的WSARecvFrom,只有一次完成状态
发送端每次发送100字节
服务器逻辑:
绑定端口后,投递一次 WSARecvFrom,接收10字节
每次 GetQueuedCompletionStatus 成功后继续WSARecvFrom接收10字节.
期待:发送端每发送一次,GetQueuedCompletionStatus 成功10次.
现象是:发送端每发送一次,GetQueuedCompletionStatus 成功1次
------解决方案--------------------
确实是这样的,你需要一次性接收所有数据,你的接收缓冲区不能小于发送数据包的大小.
每发送一个UDP数据包都是完整独立的,不像TCP是流式的.
------解决方案--------------------
UDP机制决定,两点之间,只能一发一收或不收,不能一发多收
要么一下发10次100字节数据,收到后切分10段处理
要么发10次10字节数据,收到后直接处理
------解决方案--------------------
udp为了保证速度就是这样处理的 来了包你不收那就丢了...
发送端每次发送100字节
服务器逻辑:
绑定端口后,投递一次 WSARecvFrom,接收10字节
每次 GetQueuedCompletionStatus 成功后继续WSARecvFrom接收10字节.
期待:发送端每发送一次,GetQueuedCompletionStatus 成功10次.
现象是:发送端每发送一次,GetQueuedCompletionStatus 成功1次
iocp
UDP
WSARecvFrom
------解决方案--------------------
确实是这样的,你需要一次性接收所有数据,你的接收缓冲区不能小于发送数据包的大小.
每发送一个UDP数据包都是完整独立的,不像TCP是流式的.
------解决方案--------------------
UDP机制决定,两点之间,只能一发一收或不收,不能一发多收
要么一下发10次100字节数据,收到后切分10段处理
要么发10次10字节数据,收到后直接处理
------解决方案--------------------
udp为了保证速度就是这样处理的 来了包你不收那就丢了...