我对线程世界有点新意,我正在制作一个游戏服务器,为每个连接到另一个线程的客户端分配,这样我就可以在同一个端口上接受多个客户端。但是,我遇到了客户端连接到服务器的问题,但无法发送数据(以ObjectOutputStream的格式发送到服务器)。关于可能出现什么问题的任何指示?
这是我的MatchmakingServer.java的代码
try {
listenForPlayers = new ServerSocket(portNumber);
System.out.println("Port opened. Searching for players");
while (true){
Socket clientSocket = listenForPlayers.accept();
Runnable r = new PlayerHandlerForServer(clientSocket);
new Thread(r).start();
}
} catch (Exception e) { }
我的PlayerHandler对象实现了Runnable,这是它的run方法。
private Player player;
private ObjectInputStream getPlayerData;
private static PrintWriter sendPlayerData;
private Socket socket;
public void run() {
try {
getPlayerData = new ObjectInputStream(socket.getInputStream());
player = (Player) getPlayerData.readObject();
//do stuff with the player object, this code get executed.
sendPlayerData = new PrintWriter(socket.getOutputStream(),true);
updatePlayersFound(sendPlayerData);
} catch (Exception e) { }
}
答案 0 :(得分:1)
正如评论中所指出的那样,例外情况,它们将提供可能导致此问题的线索。
一个疯狂的猜测是你的Player类没有实现Serializable接口。
答案 1 :(得分:0)
我想知道你为什么要从Socket读取序列化对象,但是使用PrintWriter写出数据。我建议使用ObjectOutputStream并保持一致。
发送序列化对象可能有点过分。可能会有更多数据被发送然后您关心。这可能会给您的游戏客户造成无用的网络延迟!您可能希望查看使用DataInputStream / DataOutputStream。这将允许您仅使用真正需要的内容来编写/读取对象。