2013-04-02 187 views
3

我创建了TCP Java客户端/服务器应用程序,我们有两个插槽:java.net.SocketException异常:套接字关闭TCP客户端服务器通信

  • 一个是交换消息。
  • 二是文件传输。

我已经在服务器中创建,以通过接受ServerSockets创造插座一,二
2个ServerSockets。

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

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

那里我得到了封闭套接字的例外。
但是,我从来没有关闭套接字到现在。
我只关闭分离文件的缓冲区。
即使我在发送文件后尝试再次打开socketInputStream,错误仍然是一样的。
此外,如果我不关闭缓存文件的缓冲区,客户端不会得到文件。

服务器异常

错误的返回信息 - java.net.SocketException异常:插座关闭

客户端异常

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

我在做什么错?

+0

你应该真的添加一些代码和堆栈跟踪... –

+0

确保你关闭连接的一端,如果不是这种情况比我确定你关闭了输入或输出流,请不要关闭它们,直到你确信你的数据通信已经结束,并且你想要向套接字发送数据时使用flush()方法 – Vijay

+1

[官方原因为“软件导致连接中止:套接字写入错误”](http:// stackoverflow.com/questions/2126607/official-reasons-for-software-caused-connection-abort-socket-write-error) – EJP

回答

16

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

+0

我只关闭缓存文件的缓冲区,它是读取Socket的outPutStream的缓冲区。这是我正在考虑关闭Socket的唯一一个。如果我不关闭缓冲区,客户端不会收到该文件。 – lemanou

+0

@lemanou所以你关闭了插座。然后,后来发生了'套接字关闭'异常,因为您一直使用关闭的套接字。你将不得不打开一个新的。 – EJP

+3

其实是的。这是问题所在。我用DataOutputStream替换了缓冲区读取器,然后用FileInputStream读取文件,然后通过DataOutputStream发送它。我只需要关闭FileInputStream来完成“传输”。谢谢! :) – lemanou

相关问题