[英]Java Socket doesn't return anything in the stream
当我尝试从Socket(位于localhost)获取信息时,它永远不会用php返回我想要的信息(来自服务器的信息),它工作正常。
Java应用程序: 运行和调试不返回任何内容
Glassfish服务器:每次我调试时, 运行均不返回任何内容, 调试返回所有信息
PHP代码:
$Socket = fsockopen($this->Host, $this->Port, $errno, $errstr, 5);
if(!$Socket) {
return false;
} else {
stream_set_timeout($Socket, 1);
stream_set_blocking($Socket, false);
fwrite($Socket, chr(6).chr(0).chr(255).chr(255).'info');
while(!feof($Socket)) {
$this->SocketData .= fgets($Socket, 8192);
}
fclose($Socket);
return true;
}
Java代码:
public static String serverInfo(String ip, Integer port) {
try (Socket socket = new Socket(ip, port)) {
//System.out.println("Connected to " + socket.getInetAddress() + " on port " + socket.getPort() + " from port " + socket.getLocalPort() + " of " + socket.getLocalAddress());
OutputStream os = socket.getOutputStream();
String info = ((char) 6 + "" + (char) 0 + "" + (char) 255 + "" + (char) 255 + "info");
System.out.println(info);
os.write(info.getBytes());
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
StringBuilder stb = new StringBuilder();
while (br.ready()) {
stb.append(br.readLine());
}
if (!stb.toString().isEmpty()) {
//System.out.println("Info: " + stb.toString());
return stb.toString();
} else {
//System.out.println("No answer from server.");
return null;
}
} catch (UnknownHostException e) {
System.err.println("I can't find " + ip);
} catch (SocketException e) {
System.err.println("Could not connect to " + ip);
} catch (IOException e) {
System.err.println(e);
}
return null;
}
我一直在寻找与php相同的方法,连接到套接字,获取信息,并使用该信息返回/保存/无论如何,但我不知道会发生什么,只是尝试的1/100倍,它返回一些东西。
当我在Web应用程序中运行并调试时,它每次都会返回信息,这确实是错误的,我无法弄清楚。
PS:这是为了获取OTServer信息。
我认为这不是从br
阅读的正确方法。
while (br.ready()) {
stb.append(br.readLine());
}
尝试将其更改为:
String line = null;
while ((line = br.readLine()) != null) {
stb.append(line);
}
另外,在此行之后调用os.close()
。
os.write(info.getBytes());
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.