Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 套接字:BufferedReader/InputStream&;BufferedWriter/OutputStream赢得';行不通_Java_Sockets_Stream_Bufferedreader_Bufferedwriter - Fatal编程技术网

Java 套接字:BufferedReader/InputStream&;BufferedWriter/OutputStream赢得';行不通

Java 套接字:BufferedReader/InputStream&;BufferedWriter/OutputStream赢得';行不通,java,sockets,stream,bufferedreader,bufferedwriter,Java,Sockets,Stream,Bufferedreader,Bufferedwriter,因此,我尝试使用BufferedReader和BufferedWriter创建一个服务器/客户端解决方案,但它不起作用!仅使用DataInputStream和DataOutputStream工作得非常好,但并没有使用缓冲对象打印出来。我的错误在哪里 public class TServer { static final int PORT = 8001; static final int QUEUE = 50; public static void main(String[]

因此,我尝试使用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();
       }
   }
}
仅使用DataInputStream和DataOutputStream工作得非常好,但并没有使用缓冲对象打印出来

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

output.write("this is the client");
服务器正在尝试使用BufferedReader读取一行:

System.out.println(input.readLine());
但由于未发送行结束符,因此不会收到任何行(因此,该方法将阻塞(对于不发送行结束符的服务器也是如此)。有关详细信息,请参阅API,其中说明:

读一行文字。一行被认为是由换行符('\n')、回车符('\r')或紧接着换行符的回车符中的任意一个终止的


您正在使用BufferedReader的
readLine
方法,所以您应该在相应的BufferedWriter中写入以换行符结尾的字符串。比如:

    output.write("this is the client");
    output.newLine();
可能对你有帮助