我正在制作一个客户端 - 服务器应用程序,并使用以下代码来交换服务器和客户端的数据。
服务器的发送和接收代码:
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();
}
}
我没有与服务器和客户进行任何数据交换。有人可以帮我吗?
答案 0 :(得分:3)
您正在遭受缓冲:消息写入缓冲区,可能永远不会发送。刷新编写器以确保它发送数据:
writer.write(...);
writer.flush();
此外,BufferedReader.readLine读取行。必须使用换行符终止行,例如\n
。您是否发送换行符并不清楚。
此外,这是一个无限循环:
String message=input.readLine();
while(message.length()!=0) {
/* code that does not modify message */
}
答案 1 :(得分:1)
不要继续创造新的读者和作家。在插座的使用寿命中使用相同的插座。您丢失了旧的BufferedReader
中丢失的数据。这些缓冲的东西,错误,缓冲。
还有:
String message=input.readLine();
while(message.length()!=0)
是,错误,胡说八道。首先,您没有检查message
null
,因此您将在流的末尾获得NullPointerException
。其次,你没有在循环中做任何进一步的输入,所以如果它不抛出NPE并且消息不是零长度它将永远循环。