6

我正在通过 TCP 创建一个 java 客户端/服务器应用程序,我们有两个套接字:

  • 一种是用于交换消息。
  • 二是用于文件传输。

我在服务器中创建了两个 ServerSocket,以便
通过接受 ServerSocket 来创建 Socket 1 和 2。

首先,客户端通过第一个 Socket 发送一些字节,
以便它可以告诉服务器它需要哪个文件。

然后服务器通过第二个套接字将文件发送给客户端。
客户端收到文件后,会尝试向服务器发送一条传输完成消息。

在那里我得到了关闭套接字的异常。
但是,直到现在我才关闭套接字。
我只关闭发送文件的缓冲区。
即使我在发送文件后尝试再次打开socketInputStream,错误仍然相同。
此外,如果我不关闭发送文件的缓冲区,客户端将不会获取文件。

服务器异常

返回消息中的错误 - java.net.SocketException:套接字已关闭

客户端异常

服务器响应 - java.net.SocketException:软件导致连接中止:套接字写入错误

我究竟做错了什么?

4

1 回答 1

19

“套接字关闭”异常意味着捕获异常的应用程序关闭了套接字,然后继续尝试使用它。您可能不知道关闭套接字的输入或输出流也会关闭另一个流和套接字。对于“软件导致的连接中止”,请参见重复链接。

于 2013-04-03T02:57:10.717 回答