Должен ли я иметь два потока для ввода / вывода или использовать NIO? - PullRequest
0 голосов
/ 05 октября 2011

Я работал над (относительно) простой программой tcp client / server chat для моего сетевого класса. Проблема, с которой я сталкиваюсь, заключается в том, что я использую блокирующие вызовы, такие как read() и writeBytes(). Таким образом, всякий раз, когда я пытаюсь отправить сообщение на мой сервер, сервер не распечатывает его, пока не записывает его обратно. В этой ситуации наиболее разумным решением будет использование одного потока для ввода и одного потока для вывода, или использование NIO лучше мне подойдет? Просто чтобы дать вам представление о том, как теперь выглядит мой код, мой сервер:

    ServerSocket welcomeSocket = new ServerSocket(port);

    DataOutputStream output;
    BufferedReader inFromUser = new BufferedReader( new InputStreamReader(
                System.in));
    String sentence;

    while ((sentence = inFromUser.readLine()) != null) {
            Socket connectionSocket = welcomeSocket.accept();
            output = new DataOutputStream( connectionSocket.getOutputStream());
            output.writeBytes(sentence + "\n");

            BufferedReader inFromServer = new BufferedReader( new InputStreamReader( 
                connectionSocket.getInputStream()));
            System.out.println("Client said: " + inFromServer.readLine());
            connectionSocket.close();
    }

Код клиента по сути тот же. Спасибо за ваше время!

1 Ответ

1 голос
/ 05 октября 2011

Просто используйте две темы, если вы не хотите узнать о NIO. Учебное руководство по Java содержит примеры порождающих потоков для обработки клиентских подключений к ServerSocket. Посмотрите на нижнюю часть «Запись сокета на стороне сервера» .

...