socketは簡単なウェブサーバーを実現し、http要求情報を確認することができます。
httpプロトコルを紹介する資料を見たことがありますが、どの属性がコントロールされているかなどの内容はありますが、httpプロトコルに対して直観的な感想はありません。今はAndroidでサーバーに書類を提出します。http要請の依頼体を自分で書く必要がありますので、httpを深く理解する時です。
ここには簡単なsocketが実現するhttpサーバーがあります。このサーバーはhttpの要求情報を確認できます。
コードは以下の通りです
ブラウザに入力:http://127.0.0.1:8000 いいです。個人の感じ:コードは多くなくて、内容は多くて、理解しなければならなくて、深く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を学ぶことに対してとても役に立ちます。