java实现一个helloworld版的http服务器

复制代码
package hellohb;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;

//java里创建线程的方法是new一个Thread的子类,子类里重写run方法,里面写要做的事
//每一个http连接 动用一个线程处理
class ProcessThread extends Thread{
    Socket mConn;
    public ProcessThread(Socket conn) {
        mConn = conn;
    }
    public void run() {
        try {
            char [] rbuf = new char[512];
            BufferedReader br = new BufferedReader(new InputStreamReader(mConn.getInputStream()));
            int rlen;
            while((rlen=br.read(rbuf)) != -1){
                System.out.println(String.valueOf(rbuf, 0, rlen));
            }
            br.close();
            mConn.close();
            System.out.println("thread quit..");
        }
        catch(Exception e){
            throw new Error(e);
        }
    }
}

public class MyHttpServer extends Thread{ int mCount = 0; public MyHttpServer(int port) { try { ServerSocket serverSock = new ServerSocket(port); System.out.println("listen on " + port); //最多处理1000个请求退出 for(int i = 0; i < 1000; i++) { //accept是阻塞的,等待tcp连接 Socket sock = serverSock.accept(); //收到tcp连接后,立刻开一个线程处理,随即回到accept var th = new ProcessThread(sock); th.start(); System.out.println("kick: " + (mCount++)); } System.out.println("server quit.."); serverSock.close(); } catch(Exception e){ throw new Error(e); } } }
复制代码

 

posted @   shanxin1954  阅读(6)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示