多个线程写入一个服务器

时间:2015-05-25 05:03:04

标签: java multithreading sockets

我有问题。我想创建一个网络连接,以便我可以制作多人游戏。我知道并了解插座。 我的问题是,如果我同时按下键盘上的两个键,它会同时写入套接字,从而导致错误。然后我做的是为一个客户端创建多个套接字以写入并仅写入不忙的套接字。由于某种原因似乎超载它或其他东西。任何同时向服务器发送消息的想法,反之亦然。

2 个答案:

答案 0 :(得分:0)

您的代码在服务器中是这样做的吗?

    while (true) {
        try {
            socket = serverSocket.accept();
        } catch (IOException e) {
            System.out.println("I/O error: " + e);
        }
        // new threa for a client
        new MyThread(socket).start();
    }

然后,在MyThread#中运行

    inp = socket.getInputStream();
    brinp = new BufferedReader(new InputStreamReader(inp));
    out = new DataOutputStream(socket.getOutputStream());
    line = brinp.readLine(); // read the data.
    out.writeBytes(line + "\n\r"); //write back to client
    out.flush(); // flush socket

Java NIO会更快更有效率。请参考开源netty服务器。

答案 1 :(得分:0)

我使用了排队方法并修复了问题。