WebServer version03 服务器与客户端的连接(学习笔记)

package com.websever.cor;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket ;
import java.net.Socket;
/**
 * 服务器端
 * version03 clinthandler 里读取客户端的请求
 * 服务器端通过初始化ServerSocket(8080),并accep来等待客户端的连接
 * 客户端通过 浏览器 localhost:8080 来连接服务器 
 * @author zhaxi
 */
public class WebSever {

	private ServerSocket socket ;
	
	public WebSever(){
		try {
			System.out.println("初始化服务器端.....");
			//初始化服务器端 端口号
			socket = new ServerSocket(8080) ;
			System.out.println("已初始化服务器端");
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	public void start(){
		try {
			while(true){
				//连接客户端 通过浏览器 localhost:8080连接
				System.out.println("等待客户端连接.....");
				Socket sock = socket.accept() ;
				ClindHandler chandler = new ClindHandler(sock) ;
				Thread th = new Thread(chandler) ;
				th.start() ;
				System.out.println("已连接客户端");
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	public static void main(String[] args){
		WebSever ws = new WebSever() ;
		ws.start() ;
	}
	
	/**
	 * 处理客户端的请求处理
	 * 由多个客户端请求处理,因此必须要以线程处理  实现线程接口runnable
	 */
	private class ClindHandler implements Runnable{
		//处理客户端的请求 必须要有socket的连接 
		private Socket socket ;
		
		public ClindHandler(Socket socket){
			this.socket = socket ;
		}
		//必须重写
		public void run(){
			System.out.println("处理客户端请求!") ;
			try {
				//读取东西需要输入流读取每一个 请求的字节
				InputStream in = socket.getInputStream() ;
				//获取 请求的信息 存在StringBuilder里
				StringBuilder sb = new StringBuilder() ;
				int d = -1 ;
				//怎么获取每一行 读取一个字节存到 c1 c2里 进行比对
				//请求分为 请求行 消息头 都是以 CRLF结尾的 CR的ACS=13 LF的ACS=10	
				char c1 = 0 ;
				char c2 = 0 ;
				//循环读取
				while((d = in.read()) != -1){
					//读到的存到 c2里
					c2 = (char)d ;
					//如果 c1 c2的指与 CR的ACS=13 LF的ACS=10 相等就
					if(c1 == 13 && c2 == 10){
						break ;
					}
					//每一个读到的存到StringBuilder里
					sb.append((char)d) ;
					//c2的字节 存在 c1里 方便比较是否读到CRLF
					c1 = c2 ;
				}
				System.out.println(sb.toString().trim());
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值