![]() |
1
12
没有看到你的代码我只能猜测。 TCP中出现零窗口的原因是因为接收器的接收缓冲区中没有空间。 有很多种方法可以做到这一点。此问题的一个常见原因是,当您通过LAN或其他相对快速的网络连接发送数据时,一台计算机的速度明显快于另一台计算机。作为一个极端的例子,假设你有一台3Ghz的计算机,通过千兆以太网以尽可能快的速度发送到另一台运行1Ghz cpu的机器。由于发送方的发送速度远远快于接收方的读取速度,因此接收方的recv缓冲区将被填满,从而导致TCP堆栈向发送方公布一个零窗口。 如果发送端和接收端都没有准备好处理这个问题,那么这可能会导致问题。在发送端,如果您使用的是非阻塞I/O,则这可能会导致发送缓冲区填满,并导致发送的调用阻塞或失败。在接收端,您可能在I/O上花费了太多时间,以至于应用程序没有机会处理它的任何数据,并且看起来像是被锁定了。 编辑
一般来说,我认为这不是一个好主意。理想情况下,如果您担心应用程序挂在
看到了吗 socket(7)
主线程可以将每个文件描述符推入
send函数应该如下所示(假设设置了超时):
|
![]() |
2
1
使用TCP套接字开发时的一个常见错误是关于read()/write()行为的错误假设。 执行读/写操作时,必须检查返回值,它们可能没有读/写请求的字节数,通常需要一个循环来跟踪并确保传输了整个数据。 |
![]() |
3
0
最可能的问题是,您的代码中有一个错误,无法正确处理部分读取或部分写入。众所周知,Linux和Windows之间的TCP是有效的。 |
![]() |
4
0
我试图禁用Nagle的算法(使用TCP\u NODELAY),但不知怎么的,它起了作用。 传输速率更高,TCP窗口大小未满或未重置。 奇怪的是,当我改变窗口大小时,它没有任何影响。 非常感谢。 |
![]() |
Levent Dag · 发送和接收不一致 7 年前 |
![]() |
Deepesh Meena · 使用tcp将文件从服务器发送到客户端 7 年前 |
![]() |
Mrmeguyme · Java TCP连接套接字未写入输出流 7 年前 |
![]() |
mac01021 · AWS Lambda功能停止连接? 7 年前 |
![]() |
Tadas · ESP32 TCP客户端 7 年前 |
![]() |
slim71 · C-通过套接字向客户端发送UDP消息 7 年前 |
|
Pareidolia · 序列号和确认号不匹配 7 年前 |
|
schubi · 将jpeg字符数据转换为opencv mat 7 年前 |