我如何托管服务器以便人们可以找到它?

时间:2015-01-13 20:02:16

标签: java hosting server kryonet

好吧基本上我正在使用KryoNet进行服务器 - 客户端通信,并且它们连接得很好并且做我想让他们在测试场景中做的事情。但是,当我尝试从同一网络中的不同网络或甚至不同的PC连接时,客户端似乎无法找到服务器......

服务器

static Server server;
//i dont even send on udp...
static int udpPort = 80, tcpPort = 5190;

public static void main() throws Exception {

    System.out.println("Creating the server...");
    server = new Server();
    server.getKryo().register(SOME.class);

    server.bind(new InetSocketAddress(InetAddress.getLocalHost(), tcpPort), new InetSocketAddress(InetAddress.getLocalHost(), udpPort));

    server.start();
    server.addListener(new ServerProgram());

和客户

static Client client;
static int udpPort = 80, tcpPort = 5190;

public void connect(String ip) throws InterruptedException {

    client = new Client();
    client.getKryo().register(SOME.class);
    client.addListener(this);

    new Thread(client).start();

    try {
        client.connect(12000, ip, tcpPort, udpPort);

    }
    catch (IOException e) {
        e.printStackTrace();
    }

我注意到服务器总是在我的“本地”地址(192.168.0。***)上创建,所以有没有办法让服务器更公开,或者我的客户必须使用像{{3}这样的东西}?

1 个答案:

答案 0 :(得分:0)

您不必在Kryonet上的服务器代码中提供主机地址。您的计算机网络有自己的IP地址,当您启动服务器时,Kryonet会使用该地址。

所以我的意思是而不是这样做

server.bind(new InetSocketAddress(InetAddress.getLocalHost(), tcpPort), new InetSocketAddress(InetAddress.getLocalHost(), udpPort));

你可以简单地做

server.bind(timeOut, tcpPort, udpPort);

因此,在客户端代码上,当您启动客户端时,如果客户端和服务器位于同一网络中,则会输入IP地址(127.0.0.1)。

如果服务器和客户端位于不同的网络上,则需要获取托管游戏服务器的计算机(网络)的外部IP。让我们假设您的服务器托管在具有IP' xxx.x.x.x'的计算机(网络)上。在您的客户端代码中,您将拥有client.connect(xxx.x.x.x, TCP_PORT_SERVER_LISTENING_ON, UDP_PORT_SERVER_LISTENING_ON)

在服务器上

您在服务器上所要做的就是server.bind(TIMEOUT, TCP_PORT, UDP_PORT_IF_YOU_USING)

此外,如果您想在计算机上托管服务器,则需要进行端口转发。

要查找托管KryoServer的服务器的IP地址,您可以转到服务器计算机上的Find IP Address,然后在客户端使用此IP地址。