我开发了一款简单的视频游戏,我希望使用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);
}
这里的问题是什么?
答案 0 :(得分:1)
您的服务器端代码没问题。这里只需要注意一点,ServerSocket.accept();
方法是禁止调用,这意味着程序执行将暂停,直到客户端连接到它。
其次,我可以在下面的客户代码的第一行看到问题
if (args.length > 0)
serverHostname = args[0];
args[0]
可能不是ip地址,我不太清楚java命令行应用程序的行为,但在c ++中,正确上下文中的args [0]始终是程序的绝对路径可执行文件。这也可能是java中的情况。
所以你可能会传递一个IP地址,但实际上会以args[1]
传递。