以下は、HTTPのクライアント側プログラムの例です。各問に対する答えを、テキストフィールドに入力して「チェック」ボタンをクリックしなさい。
package tcp;
import java.io.*; //InputStreamReaderやOutputStreamを使えるようにする宣言
import java.net.*; //InetAddressやSoket利用のため
public class TcpClient {
public Socket socket;//ネットワークのTCP接続をカプセル化しているインスタンス
public InputStream is;//上記接続相手からの受信用バイトストリーム
public OutputStream os;//上記接続相手への送信用バイトストリーム
public byte []headers = new byte[4096];//ヘッダ部記憶用
public int headLength = 0;//上記配列に記憶したbyte数
public TcpClient(Socket socket)throws Exception{
this. socket = socket; //接続相手との通信用(IPとportがカプセル化)
this. is = socket.getInputStream();
this. os = socket.getOutputStream();
}
public void sendString(String data, String charsetName )throws Exception{
byte []buf = data.getBytes(charsetName );
this. os. write( buf ); //送信
}
public void receiveHeaders()throws Exception{
int c = this. is. read();//1byte受信(終わりなら-1)
headLength = 0;
while( c != -1 && headLength < this. headers . length ){
this. headers[headLength ++] = (byte)c;
int i = headLength - 4;
if( i >= 0 && headers[i] == '\r' && headers[i+1] == '\n' && headers[i+2] == '\r' && headers[i+3] == '\n') break;
c = this. is. read();//1byte受信(終わりなら-1)
}
}
public static void main(String []args) throws Exception{
TcpClient client = new TcpClient( new Socket("127.0.0.1",80));
String request="GET /index.html HTTP/1.1\r\nHost: 127.0.0.1\r\n\r\n";
client .sendString(request, "utf-8");
client . receiveHeaders();
String header = new String( client.headers, 0, client. headLength) );
System.out.println( header );//受信したレスポンスのheaderを表示
}
}