Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java套接字不';I don’我不能归还小溪中的任何东西_Java_Sockets - Fatal编程技术网

Java套接字不';I don’我不能归还小溪中的任何东西

Java套接字不';I don’我不能归还小溪中的任何东西,java,sockets,Java,Sockets,当我试图从一个套接字(位于localhost)获取信息时,它永远不会返回我想要的(来自我的服务器的信息),用php就可以了 Java应用程序:run&debug不会返回任何内容 Glassfish服务器:run不返回任何内容,debug返回所有信息,每次我调试 PHP代码: $Socket = fsockopen($this->Host, $this->Port, $errno, $errstr, 5); if(!$Socket) { return false; }

当我试图从一个套接字(位于localhost)获取信息时,它永远不会返回我想要的(来自我的服务器的信息),用php就可以了

Java应用程序:run&debug不会返回任何内容
Glassfish服务器:run不返回任何内容,debug返回所有信息,每次我调试

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

Java代码:

$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;
}
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())

不要那样使用ready()。这是毫无意义的。readLine()将一直阻塞,直到数据可用。我不敢相信它现在可以工作,只要可以,我将在glassfish中进行测试,至少在java应用程序正常运行时是这样。。谢谢(我无法在os.write之后关闭outputstream,获得SocketException)然后调用
os.flush()
。我的想法是确保你写到
os
上的东西被刷新。哦:),我忘了刷新,在我删除之前我一直在使用,我尝试了一切,几乎哭了。。。谢谢我现在在家,但它不工作,尝试使用NetBeans和Eclipse,这真的很奇怪,返回总是空的,这怎么可能?我修复了问题,这是编码,使用windows-1252编码,一切都很好(服务器接受并返回),但使用UTF8,服务器无法识别请求字符串:)