无法在套接字上使用BufferedReader / Writer发送和接收数据

我正在制作一个客户端 – 服务器应用程序,并使用以下代码来交换服务器和客户端的数据。

服务器的发送和接收代码:

public void run() { try { BufferedReader input = new BufferedReader(new InputStreamReader(socketNew.getInputStream())); String message=input.readLine(); while(message.length()!=0) { for(Socket s:socs) //socs is a list containing all the connected sockets { BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(s.getOutputStream())); writer.write(message); } } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } 

客户的发送方式:

 private void send_data() { BufferedWriter writer; try { writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); writer.write(this.name+textField.getText()); textField.setText(""); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } 

客户的接收方式:

 public void receive_data(){ BufferedReader input; try { input = new BufferedReader(new InputStreamReader(socket.getInputStream())); String message=input.readLine(); while(message.length()!=0) {console(message);} } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } 

我没有与服务器和客户进行任何数据交换。有人可以帮我吗?

您正在遭受缓冲:消息写入缓冲区并且可能永远不会发送。 刷新编写器以确保它发送数据:

  writer.write(...); writer.flush(); 

此外,BufferedReader.readLine读取行。 行必须以换行符结束,例如\n 。 目前尚不清楚您是否正在发送换行符。

此外,这是一个无限循环:

  String message=input.readLine(); while(message.length()!=0) { /* code that does not modify message */ } 

不要不断创造新的读者和作家。 在sockets的使用寿命中使用相同的sockets。 您正在丢弃正在丢弃的旧BufferedReader中的数据。 这些缓冲的东西,错误,缓冲。

这个:

 String message=input.readLine(); while(message.length()!=0) 

是的,错误,胡说八道。 首先,您没有检查message是否为null ,因此您将在流结束时获得NullPointerException 。 其次,你没有在循环中做任何进一步的输入,所以如果它不抛出NPE并且消息不是零长度它将永远循环。