2016-03-03 71 views
2

我正在制作一个客户端服务器应用程序,并使用以下代码来交换服务器和客户端的数据。无法使用套接字上的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(); 
    } 

} 

我没有任何数据交换的B/W的服务器和clients.Can有人可以帮我吗?

回答

3

您正在遭受缓冲:消息写入缓冲区,可能永远不会发送。冲洗笔者以确保它发送数据:

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

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

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

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

我做到了,但无济于事。 –

+0

没有足够的信息来帮助你进一步。尝试调试您的代码。 – Joni

+0

我在最后添加了断路器,瞧,问题得到了解决。感谢man.I也必须稍微改变一下代码,因为每次用户想要发送和接收数据时都会创建新的缓冲区。一个问题。再次感谢人。 –

1

不要将创造新的读者和作家。对于插座的使用寿命使用相同的。您丢失的旧版BufferedReader中的数据正在丢失。这些缓冲的东西,错误,缓冲区。

而且这样的:

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

是,呃,废话。首先,你不检查messagenull,所以你会得到一个NullPointerException结束流。其次,你没有在循环内进行任何进一步的输入,所以如果它不抛出NPE并且消息不是零长度,它将永远循环。

+0

我在最后添加了断路器,瞧,问题得到解决。谢谢man.I也必须稍微改变一下代码,因为我每次用户想要发送和接收数据时都会创建新的缓冲区。一个问题。再次感谢人。 –

+0

现在我遇到了另一个问题。我以某种方式编写了应用程序,当我按下回车键时,邮件就会发送到服务器。我必须打两次邮件才能发送邮件。任何建议? –