0

サーバーを実行した後にクライアントを実行すると、接続のリセットエラーでサーバーがクラッシュします...これが私のコードです:

クライアントソケットを開始し、サーバーに接続します。入力を待ちます。クライアント:

    private Socket socket;
private BufferedReader in;
private PrintWriter out;
private String fromServer,fromUser;

public ClientTest() {
    try {
        socket = new Socket("127.0.0.1", 25565);
        out = new PrintWriter(socket.getOutputStream(), true);
        in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
    } catch (UnknownHostException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

public void start() {
    try {
        while ((fromServer = in.readLine()) != null) {
            System.out.println(fromServer);
            out.println("1");
        }
        System.out.println("CLOSING");
        out.close();
        in.close();
        socket.close();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

public static void main(String[] args) {
    new ClientTest();
}

サーバーソケットを開始し、クライアントに「2」を送信して会話を開始します

サーバ:

    public ServerTest() {
    try {
        serverSocket = new ServerSocket(25565);
        clientSocket = serverSocket.accept();

    } 
    catch (IOException e) {
        System.out.println("Could not listen on port: 4444");
        System.exit(-1);
    }
    start();
}

public void start() {

    try {
        PrintWriter out;
        out = new PrintWriter(clientSocket.getOutputStream(), true);
        BufferedReader in;
        in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
        String inputLine, outputLine;
        // initiate conversation with client
        out.println("2");
            while ((inputLine = in.readLine()) != null) {   
                System.out.println(inputLine);
                out.println("2");
            }
        System.out.println("Stopping");
        out.close();
        in.close();
        clientSocket.close();
        serverSocket.close();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

}

public static void main(String[] args) {
    new ServerTest();
}

サーバーを実行するとすべて問題ありませんが、その後クライアントを実行すると、サーバーが接続リセットエラーでクラッシュします。

4

2 に答える 2

1

アレックスの答えは正しいです。

このプログラムも無限ループに陥ります。クライアントとサーバーの while ループに終了条件を追加する必要があります。

于 2012-05-16T11:09:14.180 に答える
1

ClientTest() は start() メソッドを呼び出しません。クライアントは、接続を確立した直後に終了します。

于 2012-05-16T10:11:20.433 に答える