0

ブラウザーが http サーバーに送信するものを確認するプログラムを Java で作成しました。プログラムは次のテキストに注目しました(名前を付けましょうTEXT_BROWSER

GET / HTTP/1.1
Host: localhost
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:17.0) Gecko/20100101 Firefox/17.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive

今、私は"TEXT_BROWSER"任意のウェブサイト(グーグル、ルーター(192.168.1.1))に送信する別のプログラムを作成しましたが、応答がありませんでした(サーバーからのテキストはありません)。プログラムのエラーを知りたいです。

私のJavaプログラム

//1streqbybrowser.txt contains TEXT_BROWSER<br/>
import java.net.*;
import java.io.*;
class TCPClient 
{
 public static void main(String argv[]) throws Exception
 {
  String sentence;
  File f=new File("1streqbybrowser.txt");
  FileReader fr=new FileReader(f);
  BufferedReader br=new BufferedReader(fr);  
  Socket clientSocket = new Socket("192.168.1.1", 80);
  DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream());
  BufferedReader inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
  while((sentence = br.readLine())!=null)
   outToServer.writeBytes(sentence+"\n");
  System.out.println("Sending finished");
  while((sentence = inFromServer.readLine())!=null)
    System.out.println(sentence);
  clientSocket.close();
 }
}

編集

TEXT_BROWSER の 2 行目をルーター (192.168.1.1) に送信するように変更しHost: localhostましHost: 192.168.1.10たが、まだ応答がありません
@andremoniy
が述べたように変更を行いましたが、TEXT_BROWSER の ast 行のみがサーバーに送信され、何かが受信されました。 2回目のループが終わらない

>GET / HTTP/1.1
< HTTP/1.1 400 Bad Request
< Content-Length: 0
< Server: RomPager/4.07 UPnP/1.0
< EXT:
<

内部ループがここで終わらないことに気付きました。
何が原因でしょうか?

4

1 に答える 1

0

whileループの一部でプログラムを次のように変更します。

    while ((sentence = br.readLine()) != null) {
        outToServer.writeBytes(sentence + "\r\n\r\n");
        outToServer.flush();
        System.out.println(">" + sentence);
        while ((sentence = inFromServer.readLine()) != null)
            System.out.println("< " + sentence);
    }

そして、あなたは結果を見るでしょう。

失敗の主な原因は次の 3 つです。

\r\n1)各行の後に使用する必要があります

2)flush各行の後に書く必要があります

3) 各行の送信後にサーバーの応答を読み取る

于 2013-01-11T18:07:55.930 に答える