java - 如果写入/关闭被对等方关闭的 java.net.Socket 会发生什么?

标签 java windows sockets network-programming

假设我有一个 java.net.Socket 实例,它是两个对等点(Windows 进程)之间连接的端点:我的进程和远程进程。远程进程退出并关闭其连接。现在我正在尝试写入关闭我的套接字。

我希望 writeclose 调用(或其中之一)失败并引发异常(就像 Unix 套接字 API 中的 SIGPIPE 信号),但它们成功了。

在这种情况下,java.net.Socket 的预期行为是什么?它与 Unix 套接字 API 行为有何不同?它在 Windows 和 Linux 中的工作方式相同吗?

最佳答案

这种情况与管道有点不同,因为操作系统不一定知道另一端已关闭连接。所以......理论上......对套接字的多次写入似乎可以工作。但是,如果远程计算机仍在网络上,那么编写者最终应该会得到异常。它很有可能会被抛出到套接字 flushclose 中。

FWIW,java.net.Socket 的行为很大程度上取决于操作系统协议(protocol)栈的工作方式。

关于java - 如果写入/关闭被对等方关闭的 java.net.Socket 会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11139457/

相关文章:

java - 为什么我在这个 Java 动态 Web 项目中看不到任何 main 方法?

java - 如何将操作监听器添加到议程中的约会(JFXtras 议程)

windows - 无法在 Windows 7 中停止 IIS

sql-server - 我可以在一组 Azure 服务器上运行 .bat 文件吗?

java - 适用于 Android 的扫描仪(条形码)Api 无法检测到条形码

java - 对应用程序上下文的引用是否会泄漏我保留的 fragment ?

python - 无法将 Pandas 导入 IPython

java - 无法使用 NSInputStream 在 iOS 客户端中读取来自 Java 服务器的响应

java - 如果端口对多播组无关紧要,为什么 DatagramSocket.joinGroup() 方法采用 SocketAddress?

互联网上的 Android P2P(直接连接)(在 NAT 之后)