【问题标题】:Sockets: BufferedReader/InputStream & BufferedWriter/OutputStream won't work套接字:BufferedReader/InputStream & BufferedWriter/OutputStream 不起作用
【发布时间】:2015-07-07 14:15:47
【问题描述】:

所以我正在尝试使用 BufferedReader 和 BufferedWriter 制作服务器/客户端解决方案,但它不起作用!仅使用 DataInputStream 和 DataOutputStream 工作得非常好,但缓冲对象没有打印出来。我的错误在哪里?

public class TServer {

   static final int PORT = 8001;
   static final int QUEUE = 50;

   public static void main(String[] args) {
       try (ServerSocket serverSocket = new ServerSocket(PORT, QUEUE)) {
           Socket socket = serverSocket.accept();
           BufferedReader input = new BufferedReader(new InputStreamReader(socket.getInputStream()));
           BufferedWriter output = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));

           System.out.println(input.readLine());
           output.write("this is the server!");
           output.flush();
       } catch (IOException e) {
           System.out.println(e.getMessage());
           e.printStackTrace();
       }
   }
}


public class TClient {

   static final String HOST = "localhost";
   static final int PORT = 8001;

   public static void main(String[] args) {
       try (Socket socket = new Socket(HOST, PORT)) {
           BufferedReader input = new BufferedReader(new InputStreamReader(socket.getInputStream()));
           BufferedWriter output = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));

           output.write("this is the client");
           output.flush();
           System.out.println(input.readLine());
       } catch (IOException e) {
           System.out.println(e.getMessage());
           e.printStackTrace();
       }
   }
}

【问题讨论】:

标签: java sockets stream bufferedreader bufferedwriter


【解决方案1】:

您使用的是BufferedReader 的readLine 方法,因此您应该在相应的BufferedWriter 中写入以换行符结尾的字符串。喜欢:

    output.write("this is the client");
    output.newLine();

【讨论】:

    【解决方案2】:

    仅使用 DataInputStream 和 DataOutputStream 工作得非常好,但使用 Buffered 对象没有打印出来。

    客户端正在发送以下内容:

    output.write("this is the client");
    

    服务器正在尝试使用 BufferedReader 读取一行:

    System.out.println(input.readLine());
    

    但是由于没有发送行尾终止符,因此不会收到任何行(因此,该方法将阻塞(服务器也是如此,它不发送行尾终止符))。请参阅BufferedReader 的 API,其中指出:

    读取一行文本。行被视为由换行符 ('\n')、回车符 ('\r') 或回车符后紧跟换行符中的任何一种来终止。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-07
      • 1970-01-01
      • 2011-10-28
      • 2014-09-19
      • 2021-09-30
      • 2011-08-24
      • 1970-01-01
      • 2013-04-30
      相关资源
      最近更新 更多