/ / Java Socket nie zwraca niczego w strumieniu - Java, Sockets

Java Socket nie zwraca niczego w strumieniu - java, sockets

Kiedy próbuję uzyskać informacje z Socket (jest to localhost), nigdy nie zwraca tego, czego chcę (informacje z mojego serwera) z php, działa dobrze ..

Aplikacja Java: biegać & odpluskwić nie zwraca niczego
Serwer Glassfish: biegać nic nie zwraca, odpluskwić zwróć wszystkie informacje za każdym razem, gdy debuguję

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


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


To, czego szukałem, to zrobić to samo co phprobi, podłącza się do gniazda, uzyskuje informacje i zwraca / zapisuje / cokolwiek z tymi informacjami i nie wiem, co się dzieje, że tylko 1/100 razy, gdy próbuję, zwraca coś.
Kiedy uruchamiam w swojej aplikacji internetowej ORAZ debuguje, zwraca KAŻDĄ informację, coś jest naprawdę nie tak i nie mogę tego rozgryźć.

PS: Ma to na celu uzyskanie informacji OTServer.

Odpowiedzi:

2 dla odpowiedzi № 1

Myślę, że to nie jest właściwy sposób na czytanie z br.

while (br.ready()) {
stb.append(br.readLine());
}

Spróbuj zmienić to na:

String line = null;
while ((line = br.readLine()) != null) {
stb.append(line);
}

Również zadzwoń os.close() po tej linii.

os.write(info.getBytes());