0

私のプロジェクト用に単純なソケットサーバーを作成しようとしていますが、1つの要求のみを受け入れ、それ以外の場所からは何も受け入れません。

public void run() {
    println("Socket server running...");
    try {
        sock = new ServerSocket(20424);

        while(true) {

            clientSocket = sock.accept();

            PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
            BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));

            String data;

            while((data = in.readLine()) != null) {
                println("[SocketServer] " + data);
                if(data.equalsIgnoreCase("COUNT(TRIGGERS)")) {
                    out.println(getTriggerCount());
                }               
            }
            out.println("endOfStream");

            out.close();
            in.close();
            clientSocket.close();
        }
    }  catch (IOException e) {
        e.printStackTrace();
    }
}

1つのリクエストを受け入れ、正しい量のデータで応答しますが、その後は何も機能しません。接続に使用しているクライアントは次のとおりです。

public static void main(String[] args) {
    try {
        socket = new Socket("localhost", 20424);
        out = new PrintWriter(socket.getOutputStream(), 
                true);
        in = new BufferedReader(new InputStreamReader(
                socket.getInputStream()));

        out.println("COUNT(TRIGGERS)");

        String data;

        while((data = in.readLine()) != null) {
            System.out.println(data);
        }

        socket.close();
    } catch (UnknownHostException e) {
        System.out.println("Unknown host");
        System.exit(1);
    } catch  (IOException e) {
        System.out.println("No I/O");
        System.exit(1);
    }
}
4

1 に答える 1

2

内部の while が終了するとすぐに次の接続を受け入れます...

独自のスレッドで受信接続用のソケット ハンドラを作成して、複数の接続を同時に処理できるようにしたい場合があります。

于 2012-10-07T18:16:08.307 に答える