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 无法从远程服务器接收响应_Java_Sockets_Connection_Datainputstream - Fatal编程技术网

Java 无法从远程服务器接收响应

Java 无法从远程服务器接收响应,java,sockets,connection,datainputstream,Java,Sockets,Connection,Datainputstream,我正在尝试编写一个代码,允许我连接到远程服务器并从中接收响应。 远程地址是: 当尝试从网页连接到它时,它工作正常。然而,当我试图通过java代码连接时,我无法得到任何回复。 以下是我目前的代码: public class Client implements Runnable{ private String nServer = ""; private int nPort = 0; public Client(String server, int port){ this.nServer =

我正在尝试编写一个代码,允许我连接到远程服务器并从中接收响应。 远程地址是:

当尝试从网页连接到它时,它工作正常。然而,当我试图通过java代码连接时,我无法得到任何回复。 以下是我目前的代码:

public class Client implements Runnable{
private String nServer = "";
private int nPort = 0;

public Client(String server, int port){
    this.nServer = server;
    this.nPort = port;
}

@Override
public void run() {
    try {
        SocketAddress sockaddr = new InetSocketAddress(nServer, nPort);
        Socket s = new Socket();
        s.connect(sockaddr, 10 * 1000);
        if (s.isConnected()) {
            s.setSoTimeout(20 * 1000);
            DataOutputStream out = new DataOutputStream (s.getOutputStream());
            DataInputStream in = new DataInputStream (s.getInputStream());
            while (true) {
                // send a message to the server
                String requestmsg = "GET / HTTP/1.0\r\n";
                requestmsg += "User-Agent: Client v1\r\n";
                requestmsg += "Accept: */* \r\n";
                requestmsg += "Connection: keep alive\r\n";
                out.write(requestmsg.getBytes());
                out.flush();

                // receive a response 
                int ln = in.available();
                byte [] bytes  = new byte [ln];
                in.read(bytes);
                System.out.println(new String(bytes) + "\n");
                Thread.sleep(2000);
            }
        }
    } 
    catch (UnknownHostException ex) {System.out.println(ex);} 
    catch (IOException ex) {System.out.println(ex);} 
    catch (InterruptedException ex) {System.out.println(ex);}
}}
现在,
ln
变量始终为0,我读取的是空响应。 我做错了什么?有什么建议吗?
任何帮助都将不胜感激

您的HTTP请求不完整,您需要在末尾添加一个额外的空行,指示标头部分的结尾,这也是请求的结尾

试试这个:

String requestmsg = "GET / HTTP/1.0\r\n";
...
requestmsg += "Connection: keep alive\r\n";
requestmsg += "\r\n";

您的HTTP请求不完整,您需要在末尾添加一个额外的空行,指示头部分的结尾,这也是请求的结尾

试试这个:

String requestmsg = "GET / HTTP/1.0\r\n";
...
requestmsg += "Connection: keep alive\r\n";
requestmsg += "\r\n";

好的,谢谢,我会试试的。但是,当我试图从同一个web浏览器连接到一个运行java代码的服务器时,您添加的第一行没有出现在请求中,这样我就可以打印出请求。它成功了。看来最关键的是结尾的那条空行。谢谢。好的,谢谢。我会试试的。但是,当我试图从同一个web浏览器连接到一个运行java代码的服务器时,您添加的第一行没有出现在请求中,这样我就可以打印出请求。它成功了。看来最关键的是结尾的那条空行。非常感谢。