好吧基本上我正在使用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}这样的东西}?
答案 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地址。