Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用java正确地与服务器和客户端WebSocket通信_Java_Sockets_Websocket - Fatal编程技术网

用java正确地与服务器和客户端WebSocket通信

用java正确地与服务器和客户端WebSocket通信,java,sockets,websocket,Java,Sockets,Websocket,我已经开发了一个简单的视频游戏,我想用websockets的多人游戏功能来更新它。我想要两个版本的游戏。第一个版本用作服务器,另一个版本用作客户端。我想从服务器初始化游戏并等待客户端的反应。我的第一个问题:是否可以在同一台机器上运行服务器和客户端(提供相同的ip作为输入)?其次,我使用以下代码从服务器端创建套接字: try { serverSocket = new ServerSocket(10007); } catch (IOException e)

我已经开发了一个简单的视频游戏,我想用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");
当我试图从客户端连接时,整个事情似乎都不起作用,因为我正在接收消息
等待连接…
。我连接客户端的代码如下所示:

 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);
    }

这里有什么问题?

您的服务器端代码很好。这里需要注意的是,
ServerSocket.accept()方法是一个锁定调用,这意味着程序执行将在客户端连接到它之前停止

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

if (args.length > 0)
    serverHostname = args[0];
<> >代码> ARG[0 ] < /C>可能不是IP地址,我不太清楚java命令行应用程序是如何运行的,但是C++中,例如,在正确的上下文中的ARGs(0)总是程序可执行的绝对路径。java中可能也是如此。 因此,您可能正在传递一个ip地址,但实际上将作为
args[1]

传递,您的意思是?