HTTP的Scoket实现
public class RequestLine {    private String mVersion;    private String mUri;    private String mMethod;    public RequestLine(String version, String method, String uri) {        mVersion = version;        mMethod = method;        mUri = uri;    }    @Override    public String toString() {        return mMethod + " " + mUri + " " + mVersion + "\n";    }}
public class ResponeLine {    private String version;    private int mStatusCode;    private String mStatusDescription;    public RequestLine(String version, String statusCode, String statusDescription) {        mVersion = version;        mStatusDescription = statusDescription;        mStatusCode = statusCode;    }    public int getStatusCode() {        return mStatusCode;    }    public String getStatusDescription() {        return mStatusDescription;    }    @Override    public String toString() {        return mVersion + " " + mStatusCode + " " + mStatusDescription + "\n";    }}
public class Header {    private Map<String, String> mHeaders = new HashMap<>();    public Header() {}    public Header(String key, String value) {        addHeader(key, value);    }    public void addHeader(String key, String value) {        if (null == mHeaders) {            throw new RuntimeException("mHeaders is null");        }        mHeaders.add(key, value);    }    public void getHeader(String key) {        return mHeaders.get(key);    }    @Override    public String toString() {        String headStr = "";        String headLine = "";        for (Map.Entry<String, String> entry : mHeaders.entry()) {            headLine = entry.getKey() + ":" + entry.getValue() + "\n";            headStr += headLine;        }        return headStr;    }}
public class Content {    private String mContent;    public Content(String content) {        mContent = content;    }    @Override    public String toString() {        return mContent;    }}
public class HttpRequest {    private RequestLine mRequestLine;    private Header mHeader;    private Content mContent;    public HttpRequest(String method, String url) {        int n = url.indexOf("/");        if (-1 == n) {            throw new RuntimeException("url is not legal");        }        String uri = url.substring(n, url.length - 1);        String url = url.substring(0, n - 1);        mRequestLine = new RequestLine("HTTP/1.1", method, uri);        mHeader = new Header("Host", url);    }    public void addHeader(String key, String value) {        mHeader.addHeader(key, value);    }    public void setContent(Content content) {        mContent = content;    }    @Override    public String toString() {        if (null == mContent) {            return mRequestLine.toString() + mHeader.toString() + "\n";        }        return mRequestLine.toString() + mHeader.toString() + "\n" + mContent.toString();    }}
public class HttpRespone{    private ResponeLine mResponeLine;    private Header mHeader;    private Content mContent;    public HttpRespone(String version, String stautsCode, String statusDescriptoin) {        mResponeLine = new ResponeLine(version, statusCode, statusDescription);        mHeader = new Header();    }    public void addHeader(String key, String value) {        mHeader.addHeadrt(key, value);    }    public void setContent(String content) {        mContent = content;    }    @Override    public String toString() {        if (null == mContent) {            return mResponeLine.toString + mHeader.toString + "\n";        }        return mResponeLine.toString + mHeader.toString + "\n" + mContent.toString();    }}
////客户端代码public class SimpleHttpClient {      private static String encoding = "GBK";      public static void main(String[] args) {          try {              Socket s = new Socket(InetAddress.getLocalHost(), 8080);              OutputStreamWriter osw = new OutputStreamWriter(s.getOutputStream());              HttpRequest request = new HttpRequest("GET", "http://127.0.0.1:5050/hello.jsp");            request.addHeader("Accept", "*\*");            osw.write(request.toString());              osw.flush();              BufferedInputStream streamReader = new BufferedInputStream(socket.getInputStream());              bufferedReader = new BufferedReader(new InputStreamReader(streamReader, "utf-8"));              String line = null;              while((line = bufferedReader.readLine())!= null) {                  System.out.println(line);              }              bufferedReader.close();              bufferedWriter.close();              socket.close();          } catch (UnknownHostException e) {              e.printStackTrace();          } catch (IOException e) {              e.printStackTrace();          }      }  }  
import java.net.*;   import java.io.*;   public class MyWebServer {     public static void main(String[] args) {       Socket socket = null;       try {         // 创建一个监听8000端口的服务器Socket         ServerSocket s = new ServerSocket(8000, 3);         while (true) {           socket = s.accept();           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());         StringBuilder msg = new StringBuilder();          socket.setSoTimeout(10);         int len = -1;         try {           while ((len = is.read(bs)) != -1) {             msg.append(bs, 0, len);             msg.append("\n");           }         } catch (Exception ex) {           // ex.printStackTrace();         }         HttpRespone respone = new HttpRespone("HTTP/1.1", "200", "OK");      respone.adHeader("Content-Type", "text/html");      respone.setContent("hello");         out.println(respone.toString());         out.flush();         out.close();         is.close();         System.out.println("close");         // 关闭连接         socket.close();       } catch (IOException e) {         e.printStackTrace();       }     }   }