与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);
}
这是什么问题在这里?
答
你的服务器端代码没问题。这里只需要注意一点,ServerSocket.accept();
方法是ablocking调用,这意味着程序执行将暂停,直到客户端连接到它。
其次,我可以从你的客户端代码如下
if (args.length > 0)
serverHostname = args[0];
args[0]
可能不是一个IP地址,我不是太肯定java命令行应用程序的行为,但在C++中的第一行看到的问题例如,在正确的上下文中的args [0]总是程序可执行文件的绝对路径。这可能也是在Java中的情况。 所以你可能会传递一个IP地址,但实际上会传入args[1]
。
你的意思是[WebSocket](https://tools.ietf.org/html/rfc6455)? –