簡體   English   中英

Java Socket在流中不返回任何內容

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM