当使用UDP套接字时,是否保证当A调用send()一次,只要缓冲区足够大并且数据包能够成功传输(没有任何位翻转或数据丢失),那么在B的另一端读取数据包时,只有一个recv()调用?使用UDP保证等于send()和recv()调用
0
A
回答
2
是的。无论是完整的数据报到达还是没有。
请注意,只读取其中的一部分仍会丢掉其余部分。
编辑:
更精心,当你在一个UDP套接字调用send
,你送出去只有一个数据包(可能被分割到多个数据包,并重新组装上底层协议,如IP,以太网或ATM) 。该数据报要么到达并通过校验和,要么不通过。
如果一切顺利,您的接收缓冲区中有一个完整的数据报排队,您可以在上执行recv
,。
调用recv
会从最老的报文接收缓冲区到了极限,你指定(len
参数)到您的应用程序缓冲区,复制数据,然后丢弃数据包,即使不是所有的已读。下一次拨打recv
将读取不同的数据报(下一个最早的)。
因此,你确实有严格的1:1关系。
+0
谢谢,将在5分钟内或任何时间限制接受。 – cooky451
相关问题
- 1. Multipe Send()和Recv()使用Winsock2
- 2. send和recv C++
- 3. Recv-Q和Send-Q的使用
- 4. 关于send/recv的问题
- 5. PHP等价于send和getattr?
- 6. 的recv()阅读()和send(),而无需等待
- 7. MPI Seg。使用动态分配使用send/recv时的错误
- 8. 同时执行recv()和send()winsock
- 9. 套接字的send()和recv()不工作
- 10. select socket call send and recv synchronization
- 11. log zmq socket实例send/recv?
- 12. 调用.recv(1024)和.send()两次,没有任何事情发生(Python)
- 13. recv()没有得到客户端使用send()
- 14. 如何使send和recv方法同时工作?
- 15. 使用sendto/recvfrom代替connect socket/send/recv与UDP套接字的目的是什么?
- 16. 如何在perl中使用TCP协议检查recv()和send()的返回值?
- 17. Isend/Irecv不起作用,但Send/Recv却起作用
- 18. 保证与调用pthread_cond_wait和调用pthread_cond_signal
- 19. UDP上的recv()失败
- 20. 在Windows中获取Recv-Q/Send-Q?
- 21. 套接字send/recv的单独线程?
- 22. 优先send()通过recv()套接字c
- 23. 第一次传递后recv()/ send()失灵
- 24. 在Ruby中使用`send`调用`?:`
- 25. 如何使用dbus-send调用org.bluez.Adapter1.StartDiscovery?
- 26. 基本Send()和Recv()TCP服务器和客户端C++
- 27. 如何正确使用recv()sys调用
- 28. 在同一个套接字上并行调用send/recv是否有效?
- 29. 等价的.send()
- 30. 从函数调用xmlhttprequest open()和send()
可能的重复[是UDP包确保是完整的,实际意义上,如果交付?](http://stackoverflow.com/questions/15954813/is-a-udp-packet-guaranteed-to-be-完全实用的意义,如果交付) –
我很确定UDP数据包传输的结果是“根本不保证” - 换句话说,您的应用程序将需要检查从大小到顺序和正确性的所有内容。 –
@MatsPetersson谢谢,但这不是同一个问题。我很清楚这个数据包不需要是“正确”的事实,我只是想知道它是否能保证进入一个“批次”。 – cooky451