socketは簡単なウェブサーバーを実現し、http要求情報を確認することができます。


httpプロトコルを紹介する資料を見たことがありますが、どの属性がコントロールされているかなどの内容はありますが、httpプロトコルに対して直観的な感想はありません。今はAndroidでサーバーに書類を提出します。http要請の依頼体を自分で書く必要がありますので、httpを深く理解する時です。
    ここには簡単なsocketが実現するhttpサーバーがあります。このサーバーはhttpの要求情報を確認できます。
    コードは以下の通りです
import java.net.*;
import java.io.*;

/**
 *      Socket   HTTP     。
 *      HTTP     ,               。
 */

public class MService {
	public static void main(String[] args) {
		Socket socket = null;
		try {
			//       8000      Socket
			ServerSocket s = new ServerSocket(8000, 3);
			System.out.println("MyWebServer          
"); while (true) { socket = s.accept(); System.out.println(" 。 :" + socket.getPort()); new MyWebServerThread(socket).start(); } } catch (IOException e) { e.printStackTrace(); } } } class MyWebServerThread extends Thread { private Socket socket; MyWebServerThread(Socket socket) { this.socket = socket; } @Override public void run() { try { InputStreamReader is = new InputStreamReader( socket.getInputStream()); char[] bs = new char[2048]; PrintStream out; out = new PrintStream(socket.getOutputStream(), false, "GB2312"); StringBuilder msg = new StringBuilder(); // 10 , 。 // Keep-Alive , 。 // , GET POST 。 socket.setSoTimeout(2000); // int len = -1; try { while ((len = is.read(bs)) != -1) { System.out.println("len= "+len); msg.append(bs, 0, len); msg.append("
"); } } catch (Exception ex) { ex.printStackTrace(); } // // 1、 out.println("HTTP/1.1 200 OK"); out.println("Content-Type:text/html;charset:gb2312"); out.println(); // 2、 out.println("<HTML><BODY>" + "<center>" + "<H1>HTTP , :" + new java.util.Date() + "</h1>" + "<form method='get' action='127.0.0.1:8000'>username:<input type='text' name='username'/>password:<input type='text' name='password'/><input type='submit' value='GET '/></form><br/>" + "<form method='post' >username:<input type='text' name='username'/>password:<input type='text' name='password'/><input type='submit' value='POST '/></form><br/>" + "<form method='post' enctype='multipart/form-data' action='127.0.0.1:8000'>phototitle:<input type='text' name='phototitle'/>photo:<input type='file' name='photo'/><input type='submit' value='Upload '/></form>" + "</center> :<pre>" + msg.toString() + "</pre></BODY></HTML>"); out.flush(); out.close(); is.close(); System.out.println("msg.toString() "+msg.toString()); System.out.println("close"); // socket.close(); } catch (IOException e) { e.printStackTrace(); } } }
はい、
ブラウザに入力:http://127.0.0.1:8000  いいです。個人の感じ:コードは多くなくて、内容は多くて、理解しなければならなくて、深くhttpを学ぶことに対してとても役に立ちます。