在Java sockets方面遇到了一些烦人的问题,我的应用程序似乎在非常基本的层面上出现了故障。我的应用程序的一部分需要通过TCP连接写入文件名。接收者代码如下:
ServerSocket serverSocket = new ServerSocket(4445);
Socket socket = serverSocket.accept();
BufferedReader reader = new BufferedReader(
new InputStreamReader(socket.getInputStream()));
String filename = reader.readLine();
我的发送方代码如下:
Socket socket = new Socket(InetAddress.getLocalHost(), 4445);
PrintWriter writer = new PrintWriter(socket.getOutputStream());
writer.write("Test.jpg");
这里的内容非常基础,但是出现了一个套接字异常:Connection Reset,我运行了这个程序?以下是完整的堆栈跟踪:
Exception in thread "main" java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(Unknown Source)
at sun.nio.cs.StreamDecoder.readBytes(Unknown Source)
at sun.nio.cs.StreamDecoder.implRead(Unknown Source)
at sun.nio.cs.StreamDecoder.read(Unknown Source)
at java.io.InputStreamReader.read(Unknown Source)
at java.io.BufferedReader.fill(Unknown Source)
at java.io.BufferedReader.readLine(Unknown Source)
at java.io.BufferedReader.readLine(Unknown Source)
at FileReceiver.main(FileReceiver.java:11)
问题出在FileReceiver.java文件的第11行,即reader.readLine()
调用处。我无法弄清楚出了什么问题,之前我一直使用基本的TCP套接字都没有问题,为什么现在会发生这种情况?
writer.close();
不会刷新流吗? - Nikolai Fetissov