无法使用套接字上的BufferedReader/Writer发送和接收数据
我正在制作一个客户端服务器应用程序,并使用以下代码来交换服务器和客户端的数据。无法使用套接字上的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有人可以帮我吗?
您正在遭受缓冲:消息写入缓冲区,可能永远不会发送。冲洗笔者以确保它发送数据:
writer.write(...);
writer.flush();
此外,BufferedReader.readLine读取行。行必须以换行符结尾,例如\n
。目前还不清楚您是否正在发送换行符。
此外,这是一个无限循环:
String message=input.readLine();
while(message.length()!=0) {
/* code that does not modify message */
}
不要将创造新的读者和作家。对于插座的使用寿命使用相同的。您丢失的旧版BufferedReader
中的数据正在丢失。这些缓冲的东西,错误,缓冲区。
而且这样的:
String message=input.readLine();
while(message.length()!=0)
是,呃,废话。首先,你不检查message
的null
,所以你会得到一个NullPointerException
结束流。其次,你没有在循环内进行任何进一步的输入,所以如果它不抛出NPE并且消息不是零长度,它将永远循环。
我在最后添加了断路器,瞧,问题得到解决。谢谢man.I也必须稍微改变一下代码,因为我每次用户想要发送和接收数据时都会创建新的缓冲区。一个问题。再次感谢人。 –
现在我遇到了另一个问题。我以某种方式编写了应用程序,当我按下回车键时,邮件就会发送到服务器。我必须打两次邮件才能发送邮件。任何建议? –
我做到了,但无济于事。 –
没有足够的信息来帮助你进一步。尝试调试您的代码。 – Joni
我在最后添加了断路器,瞧,问题得到了解决。感谢man.I也必须稍微改变一下代码,因为每次用户想要发送和接收数据时都会创建新的缓冲区。一个问题。再次感谢人。 –