1

我对线程世界有点陌生,我正在制作一个游戏服务器,分配每个连接到另一个线程的客户端,这样我就可以在同一个端口上接受多个客户端。但是,我在客户端连接到服务器时遇到问题,但无法发送数据(以 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) { }

}
4

2 回答 2

1

正如评论记录异常中所指出的那样,它们将提供有关可能导致此问题的线索。

一个疯狂的猜测是你的 Player 类没有实现 Serializable 接口。

于 2012-10-20T02:40:01.410 回答
0

我想知道为什么您要从 Socket 读取序列化对象,但使用 PrintWriter 写出数据。我建议使用 ObjectOutputStream 并保持一致。

发送序列化对象可能是矫枉过正。发送的数据可能比您关心的更多。这可能会对您的游戏客户端造成无用的网络延迟!您可能想看看使用 DataInputStream / DataOutputStream。这将允许您仅使用真正需要的内容来编写/读取对象。

于 2012-10-20T05:25:29.150 回答