Man*_*mar 0 c sockets ioctl send recv
我有两个程序使用套接字编程进行通信.最初我会指定不.关于他们必须在彼此之间交换消息的时间.每次收到消息时,它都会将其id附加到它.因此,字符串每次都会增大.我的程序工作正常8000跳,但是在它超过8000之后,虽然程序p1发送长度为16388的字符串,但是p2表示套接字中只有16385准备好被读取.我使用ioctl()来确定套接字中准备好recv()的字符数量,然后在char*变量中恢复它...
是因为p2中的send()和p2中的recv()有延迟,p2只识别套接字中的16385个字符?
例如:如果P1发送长度(16388)
P2只收到以下长度(16385)
说我想给你送8个南瓜.我把6个放在桌子上.你想,"我期待8个南瓜,而不是6个.我会等到他把最后两个放在桌子上." 我想,"我不想在飞行中同时使用太多的南瓜.我会等到这6个中的2个然后把最后的2个放在桌子上." 我们被困住了.我们每个人都在等待对方.我们会永远等待.
在接受已接收的字节之前,不允许等到接收到更多字节.原因很简单:没有网络协议可以允许每一方等待另一方.由于TCP允许发送方在此上下文中等待,因此它也不允许接收方等待.
所以接受收到的字节.在接受任何一方之前,不要等待对方发送所有这些.否则,如果对方在发送之前等待你接受第一个会发生什么呢?