正确地与java中的服务器和客户端websockets通信

时间:2017-09-18 15:52:42

标签: java sockets websocket

我开发了一款简单的视频游戏,我希望使用websockets更新多人游戏功能。我想要有两个版本的游戏。第一个用作服务器,另一个用作客户端。我想从服务器初始化游戏并等待客户端的反应。我的第一个问题:是否有可能在同一台机器上运行服务器和客户端(作为输入提供相同的IP)?其次,我使用以下代码从服务器端创建套接字:

    try {
        serverSocket = new ServerSocket(10007);
    }
    catch (IOException e)
    {
        System.err.println("Could not listen on port: 10007.");
        System.exit(1);
    }

    System.out.println ("Waiting for connection.....");

    try {
        clientSocket = serverSocket.accept();
    }
    catch (IOException e)
    {
        System.err.println("Accept failed.");
        System.exit(1);
    }
    System.out.println ("Connection successful");

当我尝试从客户端连接时,似乎整个事情无法正常工作,因为我收到消息waiting for connection...。我连接客户端的代码如下:

 String serverHostname = new String("ip");

    if (args.length > 0)
        serverHostname = args[0];
    System.out.println("Attemping to connect to host " +
            serverHostname + " on port 10007.");

    Socket echoSocket = null;
    PrintWriter out = null;
    BufferedReader in = null;

    try {
        echoSocket = new Socket(serverHostname, 10007);
        out = new PrintWriter(echoSocket.getOutputStream(), true);
        in = new BufferedReader(new InputStreamReader(
                echoSocket.getInputStream()));
    } catch (UnknownHostException e) {
        System.err.println("Don't know about host: " + serverHostname);
        System.exit(1);
    } catch (IOException e) {
        System.err.println("Couldn't get I/O for "
                + "the connection to: " + serverHostname);
        System.exit(1);
    }

这里的问题是什么?

1 个答案:

答案 0 :(得分:1)

您的服务器端代码没问题。这里只需要注意一点,ServerSocket.accept();方法是禁止调用,这意味着程序执行将暂停,直到客户端连接到它。

其次,我可以在下面的客户代码的第一行看到问题

if (args.length > 0)
    serverHostname = args[0];

args[0]可能不是ip地址,我不太清楚java命令行应用程序的行为,但在c ++中,正确上下文中的args [0]始终是程序的绝对路径可执行文件。这也可能是java中的情况。 所以你可能会传递一个IP地址,但实际上会以args[1]传递。