与java中的服务器和客户端websockets进行通信

问题描述:

我开发了一个简单的视频游戏,我想用多人功能使用websockets进行更新。我想要有两个版本的游戏。第一个用作服务器,另一个用作客户端。我想从服务器初始化游戏并等待客户端的反应。我的第一个问题:是否有可能在同一台机器上运行服务器和客户端(给出相同的IP作为输入)?其次我使用,以便将下面的代码创建一个从服务器端的插口:与java中的服务器和客户端websockets进行通信

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

这是什么问题在这里?

+0

你的意思是[WebSocket](https://tools.ietf.org/html/rfc6455)? –

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

其次,我可以从你的客户端代码如下

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

args[0]可能不是一个IP地址,我不是太肯定java命令行应用程序的行为,但在C++中的第一行看到的问题例如,在正确的上下文中的args [0]总是程序可执行文件的绝对路径。这可能也是在Java中的情况。 所以你可能会传递一个IP地址,但实际上会传入args[1]