我正在尝试在Java中编码游戏服务器浏览器。我首先将服务器从URL(JSON(检索到JsonArray
中。然后,我循环并使用HttpURLConnection
检索服务器信息(杀死,地图等也处于JSON形式(,最后我这样做来计算ping:
request = (HttpURLConnection) new URL(serverAddress).openConnection();
request.setConnectTimeout(300);
request.setReadTimeout(300);
start = System.nanoTime();
request.connect();
ping = (System.nanoTime() - start) / 1000000;
这是计算ping的正确方法吗?是否有一种更快/有效的方法来检索JSON?真的很慢,是否可以一次提出超过1个请求?如果是,您可以指出我可以帮助我的方式/链接/教程。
我应该使用插座吗?如果是,这是我到目前为止的工作,并且没有工作(试图将JSON放入字符串中,以便我可以将其解析为对象(
InetAddress address = InetAddress.getByName(ip);
Socket socket = new Socket(address, port);
PrintWriter writer = new PrintWriter(socket.getOutputStream());
writer.print("GET / HTTP/1.1rn");
writer.print("Host: " + ip + ":" + port + "rn");
writer.print("rn");
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
//DataInputStream dis = new DataInputStream(socket.getInputStream());
StringBuffer inputLine = new StringBuffer();
String line;
while ((line= br.readLine()) != null) {
inputLine.append(line);
System.out.println(line);
}
服务器具有以下格式:http://xx.xx.xx.xx:11800,
谢谢
我建议第二种(基于tcpsocket的(方法,因为您将通过网络对象创建HTTP包装器的开销。
关于从读取输入字符串创建JSON您可以使用任何JSON序列化器,然后将读取字符串传递给它以创建JSONOBJECT。使用GSON(轻巧的JSON序列化器(
Gson gson = new Gson();
JsonElement element = gson.fromJson (tmp, JsonElement.class);
JsonObject object = element.getAsJsonObject();
在您的代码中,请尝试:
InetAddress address = InetAddress.getByName(ip);
Socket socket = new Socket(address, port);
BufferedReader br1 = new BufferedReader(new InputStreamReader(socket.getInputStream()));
//DataInputStream dis = new DataInputStream(socket.getInputStream());
StringBuffer inputLine = new StringBuffer();
String tmp;
while ((tmp = br1.readLine()) != null) {
inputLine.append(tmp);
System.out.println(tmp);
}
谈到ping测量值,我想您想动态地了解数字,而不仅仅是在连接矩上。
InetAddress.getByName(host).isReachable(timeOut)
将产生ICMP请求。
您可以在此处检查Brian Agnew响应如何使用Java测量网络的响应时间?