我正在用Java创建一个标准的多客户端/服务器程序。服务器接受连接并生成一个新线程来处理每个连接。客户端还生成一个线程来等待来自服务器的消息。客户端和服务器通过MessageInputStream和ObjectOutputStreams传递Message对象进行通信。
初始握手工作正常。当客户端启动时,它会打开与服务器的套接字连接。服务器接受套接字,向客户端发送连接成功的消息。然后客户端返回其用户名,客户端和服务器都开始等待消息。
然后我从客户端发送一些文本来创建聊天消息,并将其成功发送到服务器。服务器收到此消息,并尝试将其发送给所有连接的客户端(它只有一个)。问题是这条消息永远不会回到客户端。
// This is Message.send
public void send(ObjectOutputStream stream) throws IOException{
stream.writeObject(this);
}
// ClientThread.run
public void run(){
try {
out = client.getOutputStream();
out.flush();
ObjectInputStream in = client.getInputStream();
Message msg = null;
int len;
byte[] bytes = null;
int i = 0;
// Continuously read new Messages from the server
while(true){
msg = (Message)in.readObject();
processInput(msg);
}
} catch (Exception e) {
Util.showError(e.getMessage(), "Connection Error");
}
System.out.println("Client exited");
}
// ServerThread.run
public void run() {
try {
out = new ObjectOutputStream(client.getOutputStream());
ObjectInputStream in = new ObjectInputStream(client.getInputStream());
Message msg = null;
while(client.isConnected()){
msg = (Message)in.readObject();
processInput(msg);
}
in.close();
client.close();
} catch (Exception e) {
server.addMessage(e.getMessage());
}
}
答案 0 :(得分:0)
我没有看到对flush()
的任何调用,没有这些调用,数据可能永远不会从点a到点b。
我建议在ByteArrayOutputStream上使用ObjectOutputStream,并在线上推送生成的字节数组,然后在另一端反转该进程。