多线程服务器不接受客户端输出流

时间:2012-10-20 02:35:26

标签: java sockets client client-server

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

}

2 个答案:

答案 0 :(得分:1)

正如评论中所指出的那样,例外情况,它们将提供可能导致此问题的线索。

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

答案 1 :(得分:0)

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

发送序列化对象可能有点过分。可能会有更多数据被发送然后您关心。这可能会给您的游戏客户造成无用的网络延迟!您可能希望查看使用DataInputStream / DataOutputStream。这将允许您仅使用真正需要的内容来编写/读取对象。