libGDX客户端(服务器)客户端连接

时间:2016-03-19 11:02:14

标签: java sockets libgdx client-server hole-punching

我正在尝试创建一个多人游戏。 我认为有三种可能的方法可以做到这一点:

1. Port Forwarding

只有少数人会在路由器上打开一个端口。

2. UDP / TCP hole punching

这是非常复杂的,并不适用于每个路由器/ NAT。

3. Relay Server

我认为这是完成多人游戏的最简单方法。 所以我的计划是建立一个与PHP服务器的套接字连接,该服务器也将与另一个播放器建立套接字连接并传递数据。

当时我在Java中有一个客户端部分和一个测试服务器部分:

SocketHints hints = new SocketHints();
Socket client = Gdx.net.newClientSocket(Net.Protocol.TCP, textfield.getText(), 9021, hints);
       try {
               client.getOutputStream().write((textfield2.getText() + "\n").getBytes());
           } catch (IOException e) {
                e.printStackTrace();
           }

new Thread(new Runnable() {
        @Override
        public void run() {
            ServerSocketHints serverSocketHint = new ServerSocketHints();
            serverSocketHint.acceptTimeout = 0;
            ServerSocket serverSocket = Gdx.net.newServerSocket(Net.Protocol.TCP, 9021, serverSocketHint);
            while (true) {
                Socket socket = serverSocket.accept(null);
                BufferedReader buffer = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                try {
                    status += "Receiving message: \"" + buffer.readLine() + "\"\n\n";
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }).start();

如何从客户端接收来自套接字连接的数据?

是否有更好的方法可以做到这一点?

1 个答案:

答案 0 :(得分:1)

那么,您想从PHP创建套接字服务器吗?我不推荐它。尝试使用kryonet。它是一个java Socket Client&服务器在Java中易于使用。

如果要使服务器联机,请使用可用的公共IP在服务器上运行Kryonet套接字服务器。