线程“main”中的异常java.net.SocketException:连接重置

时间:2013-04-22 00:20:08

标签: java sockets tcp ioexception

Server.java

public class Server {
    public static BufferedReader inFromClient = null;
    public static DataOutputStream outToClient = null;
    public static Socket connectionSocket = null;
    static ServerSocket welcomeSocket = null;
    static String path = null;

    public static void main(String[] args) throws IOException {
        welcomeSocket = new ServerSocket(1001);

        FileInputStream fin = null;
        FileOutputStream fout = null;

        while (true) {

            connectionSocket = welcomeSocket.accept();

            inFromClient = new BufferedReader(new InputStreamReader(
                    connectionSocket.getInputStream()));

            outToClient = new DataOutputStream(
                    connectionSocket.getOutputStream());
            path = inFromClient.readLine();

            if (path != null) {
                String fileName = new File(path).getName();

                File file = new File(path);
                File file2 = new File(fileName);

                fin = new FileInputStream(file);

                fout = new FileOutputStream(file2);

                byte[] buffer = new byte[1024];
                int bytesRead;
                while ((bytesRead = fin.read(buffer)) > 0) {
                    fout.write(buffer, 0, bytesRead);
                }

                fin.close();
                fout.close();
            }

        }
    }
}

我收到此错误

Exception in thread "main" java.net.SocketException: Connection reset
    at java.net.SocketInputStream.read(Unknown Source)
    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 Server.main(Server.java:37)

这就是我想要做的事情。

运行Server.java然后运行Client.java之后。我尝试按下“选择”按钮,但没有选择任何文件,然后关闭“文件选择器”。

在我的理解是这一行

  path = inFromClient.readLine();

当它尝试readLine时,但没有找到任何原因导致它显示未知来源,但我该如何解决这个问题呢?

在我的Client.java我正试图close()插座,但它根本不接近....

更新我通过在发生错误的server.java上放置try& catch来修复错误,并修复了问题!

1 个答案:

答案 0 :(得分:3)

  

当它尝试readLine时,却没有找到任何原因,这就是为什么它说明了未知来源

不,不是。这指的是有关的源代码没有使用调试信息进行编译,因此在打印堆栈跟踪时,源行号和文件不可用。

此条件的最常见解释是您已写入已由对等方关闭的连接:换句话说,应用程序协议错误。

为什么要编写一个服务器,其功能是根据客户端的输入将文件从一个位置复制到另一个位置?