Java Sockets,java.net.SocketException:由于BufferedWriter / Reader导致连接重置?

问题描述 投票:0回答:1

这只是我使用Java编写的非常简单的服务器/客户端应用程序,仅打算使用BufferedReader和BufferedWriter。启动服务器时,我没有收到任何错误消息。

但是,当客户端尝试向服务器发送消息时:

java.net.SocketException:连接重置

出现。我不知道为什么会发生这种情况,但我认为它可能必须与BufferedWriter做一些事情。我在Internet上进行了搜索,但没有找到任何针对此的有用信息。

Server.java

import java.io.*;
import java.net.*;

public class Server {
    public Server(int port) {
        try {
            ServerSocket seso = new ServerSocket(port);
            System.out.println("Server started");
            System.out.println("Server listening on port " + port);

            Socket client1 = seso.accept();

            BufferedReader reader = new BufferedReader(new InputStreamReader(client1.getInputStream(), "UTF-8"));
            BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(client1.getOutputStream(), "UTF-8"));

            String s = null;

            while((s = reader.readLine()) != null) {
                System.out.println("Client: " + s);
            }

            writer.close();
            reader.close();
        } catch (Exception e) {e.printStackTrace();}
    }
    public static void main(String args[]) {
        new Server(4444);
    }
}

Client.java

import java.io.*;
import java.net.*;

public class Client {
    public Client(String serverip) {
        try {
            Socket client = new Socket(serverip, 4444);
            System.out.println("Client connected with: " + serverip);

            BufferedReader reader = new BufferedReader(new InputStreamReader(client.getInputStream(), "UTF-8"));
            BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(client.getOutputStream(), "UTF-8"));

            writer.write("Hello Server");
            writer.flush();

        }catch(Exception e){e.printStackTrace();}
    }
    public static void main(String args[]) {
        new Client("localhost");
    }
}

并且当我运行服务器后跟客户端时,我是从控制台获得的:

Server started
Server listening on port 4444

java.net.SocketException: Connection reset

at java.net.SocketInputStream.read(SocketInputStream.java:209)
at java.net.SocketInputStream.read(SocketInputStream.java:141)
at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:284)
at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:326)
at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:178)
at java.io.InputStreamReader.read(InputStreamReader.java:184)
at java.io.BufferedReader.fill(BufferedReader.java:161)
at java.io.BufferedReader.readLine(BufferedReader.java:324)
at java.io.BufferedReader.readLine(BufferedReader.java:389)
at Server.<init>(Server.java:24)
at Server.main(Server.java:33)
BUILD SUCCESSFUL (total time: 9 seconds)

如果我添加:

writer.newLine();

之后

writer.write("Hello Server");

Client.java中我仍然得到:

Server started
Server listening on port 4444
Client: Hello Server

java.net.SocketException: Connection reset

at java.net.SocketInputStream.read(SocketInputStream.java:209)
at java.net.SocketInputStream.read(SocketInputStream.java:141)
at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:284)
at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:326)
at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:178)
at java.io.InputStreamReader.read(InputStreamReader.java:184)
at java.io.BufferedReader.fill(BufferedReader.java:161)
at java.io.BufferedReader.readLine(BufferedReader.java:324)
at java.io.BufferedReader.readLine(BufferedReader.java:389)
at Server.<init>(Server.java:24)
at Server.main(Server.java:33)
BUILD SUCCESSFUL (total time: 2 seconds)
java sockets bufferedwriter
1个回答
0
投票

刷新后必须关闭编写器

© www.soinside.com 2019 - 2024. All rights reserved.