我应该有两个线程用于输入/输出还是使用NIO?

时间:2011-10-05 05:28:57

标签: java multithreading tcp io nio

我一直在为我的网络类开发一个(相对)简单的tcp客户端/服务器聊天程序。我遇到的问题是我正在使用阻止调用,例如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 个答案:

答案 0 :(得分:1)

除非您想了解NIO,否则只需使用两个线程。 Java教程提供了生成线程的示例,以处理与ServerSocket的客户端连接。看看"Writing the Server Side of a Socket"的底部。