我想从服务器向所有客户端发送消息。
我的方法是为当前连接服务器的所有客户端创建一个ArrayList。 如果任何客户端发送消息,我遍历ArrayList并向每个客户端发送消息。
问题是我的客户没有收到任何消息。
这是我在服务器端的发送方法:
private void message() {
while (true) {
DataInputStream fromClient;
try {
fromClient = new DataInputStream(socketNew.getInputStream());
message = fromClient.readUTF();
for (Socket s:socs) {
System.out.println(message);
DataOutputStream toClient = newDataOutputStream( s.getOutputStream() );
toClient.writeUTF(message);
}
message="";
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
这是我在客户端的接收方法:
private void receive_data() {
{
DataInputStream fromServer;
try {
fromServer = new DataInputStream(socket.getInputStream());
message = fromServer.readUTF();
console(message);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
关于我可能在哪里做错的任何建议都是错的? 谢谢你的时间。
答案 0 :(得分:0)
println()
和readUTF().
readUTF()
唯一能理解的是由writeUTF().
答案 1 :(得分:-1)
您正在写入OutputStream但没有刷新它们。
for(Socket s:socs)
{
System.out.println(message);
DataOutputStream toClient=newDataOutputStream(s.getOutputStream());
toClient.writeUTF(message);
toClient.flush();
}
您还必须确保服务器正在接收来自socketNew套接字的任何消息。因为它可能会在等待输入行时被阻止:
message=fromClient.readUTF();
顺便说一下,为每条消息创建新的DataOutputStream并不是一个好方法。