java - 通过发送套接字发送但从未被接收套接字读取的消息会发生什么?

标签 java sockets networking io

假设我有一个发送方套接字和一个接收方套接字。 sender socket发送一共1GB的消息,receiver socket既没有读取也没有关闭socket。

在任一套接字关闭之前,1GB 的消息会发生什么变化?它们位于操作系统缓冲区的某个位置吗?

更具体地说...

  • 每个发件人都有自己的线程。
  • 所有的发送者都刷新了他们的输出流。
  • 所有消息都通过loopback接口(interface)传递

最佳答案

是的,数据将位于 TCP/IP 堆栈的缓冲区中。尽管它远小于 1Gb。

假设您使用 TCP - 它采用流量控制来处理这种情况,接收缓冲区将填满。当接收缓冲区已满时,发送方将停止传输。发送方缓冲区将填满,当它已满时,应用程序写入/发送调用将阻塞,直到接收方开始使用数据或发生错误

关于java - 通过发送套接字发送但从未被接收套接字读取的消息会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15724054/

相关文章:

java - 在内部私有(private)类中包含非私有(private)数据成员是否有效?

java - 如何在Spring MVC中管理对同一文件夹但HTTP参数不同的两个HTTP请求?

c# - 将 SocketError 值转换为字符串消息

networking - 找到flask应用的瓶颈

python - 有没有办法使用系统默认网关以外的其他网关在 python 中发出 http 请求?

java - 是什么导致了 java.lang.ArrayIndexOutOfBoundsException 以及如何防止它?

java - 这段 Java 代码如何转换 ip 地址?

android - 如何在 Honeycomb 上检查网络可用性?

java - 如何在java中进行多个套接字通信?

python - 套接字编程 readStream!.takeUnretainedValue() 需要无限时间