所以我的程序的最终结果是一个更新的游戏客户端,但到目前为止,我有一个能够接受多个连接的服务器,以及一个连接到服务器的客户端。 这是客户端部分的代码:
public void client() {
Socket socket = null;
ObjectInputStream in = null;
ObjectOutputStream out = null;
try {
socket = new Socket(IP, Integer.parseInt(port));
in = new ObjectInputStream(socket.getInputStream());
out = new ObjectOutputStream(socket.getOutputStream());
} catch (Exception e) {
e.printStackTrace();
}
do {
// have a conversation
try {
message = (String) in.readObject();
System.out.println("n" + message);
} catch (Exception e) {
System.out.println("n idk wtf that user sent!");
}
} while (!message.equals("CLIENT - END")); // When the user types "END"
System.err.println("CLOSED!!!");
System.exit(0);
}
这是服务器部分的代码:
public void run() {
// where everything happens
System.out.println("server- connected");
try {
in = new ObjectInputStream(socket.getInputStream());
out = new ObjectOutputStream(socket.getOutputStream());
out.writeObject("hi");
out.flush();
Thread.sleep(5000);
out.writeObject("close");
out.flush();
System.out.println("closed");
} catch (Exception e) {
e.printStackTrace();
}
}
现在,我遇到了这个问题,当我的服务器将对象发送到"hi"
客户端似乎没有收到它时。 我不完全确定它是否确实如此,但如果它得到了它,它并没有像我想要的那样打印出来。 我以前制作过一个聊天程序来做同样的事情, 我几乎把它复制到这个,但它没有交流。我得到的最多是确认它们已连接。我不确定发生了什么,但任何帮助将不胜感激!提前感谢!
在 ObjectInputStreams 之前创建 ObjectOutputStreams,并在创建后立即刷新它们。
ObjectInputStream 的构造函数读取流标头。 这个流头是由 ObjectOutputStream 的构造函数编写的(有点丑陋的实现,但它就是这样)。 如果您首先构造 OIS,它们将挂起等待标头字节。