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);
}
}
}