2016-08-08 17 views
1

リモートサーバーに接続して応答を受け取るコードを記述しようとしています。 リモートアドレスはwww.euref-ip.net:2101リモートサーバーからの応答を受信できません

です。ウェブページから接続しようとするとうまくいきます。しかし、私は私の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であると私は空の応答を読んでいます。 何が間違っていますか?助言がありますか? ご協力いただければ幸いです。

答えて

0

あなたのHTTPリクエストが不完全な場合は、ヘッダーセクションの最後を示す余分な空白行を追加する必要があります。これはここでもリクエストの最後です。

これを試してみてください:

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

OKは、私がしようとするあなたに感謝します。しかし、あなたが追加した最初の行は、同じWebブラウザからJavaコードから実行しているサーバーに接続しようとしているときに要求に表示されません。そのようにして、要求を印刷できます。 –

+0

それは働いた。重要なのは最後に余分な空白行があるようだ。ありがとうございました。 –

関連する問題