netty学习笔记02——java如何使用socket通信呢

netty学习笔记02——java如何使用socket通信呢

传统的BIO通信模型是这样的:

服务端接受连接,把连接封装成为socket,把这个socket对象交给新的线程处理。

服务端接受连接的代码:

public class BIOTimeServer {
	public static void main(String[] args) {
		int port = 8080;
		if(args!=null && args.length > 0 ){
			try{
				port = Integer.valueOf(args[0]);
			}catch(NumberFormatException e){
				port = 8080;
			}
		}
		try(ServerSocket serverSocket = new ServerSocket(port);){//创建一个阻塞式socket服务器,绑定了端口
			System.out.println("The time server is start in port: " + port);
			Socket socket = null;
			while(true){
				socket = serverSocket.accept();//服务端程序会在这里阻塞,一直等到对应的端口有socket访问为止
				new Thread(new BIOTimeHandler(socket)).start();//把接收到的socket给一个线程处理
			}
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

服务端处理的逻辑:

public class BIOTimeHandler implements Runnable {	
	private Socket socket;	
	public BIOTimeHandler(Socket socket){
		this.socket = socket;
	}	
	@Override
	public void run(){
		try(BufferedReader in = new BufferedReader(
				new InputStreamReader(
						this.socket.getInputStream()));//构造一个数据源读取
			PrintWriter out = new PrintWriter(
					this.socket.getOutputStream(), true);){//构造一个输出打印
			String currentTime = null;
			String body = null;
			while(true){
				body = in.readLine();
				if(body == null){
					break;
				}
				System.out.println("The Time server receive order: " + body);
				currentTime = "QUERY TIME ORDER".equals(body)?
						new Date(System.currentTimeMillis()).toString()
						:"BAD ORDER";//判断输入是否合法
				out.println(currentTime);//打印响应内容
			}
		}catch (Exception e) {
		}
	}
}

客户端建立连接的代码:

public class BIOTimeClient {
	public static void main(String[] args){
		int port = 8080;
		if(args!=null && args.length > 0 ){
			try{
				port = Integer.valueOf(args[0]);
			}catch(NumberFormatException e){
				port = 8080;
			}
		}
		try(Socket socket = new Socket("127.0.0.1", port);//绑定一个socket
			BufferedReader in = new BufferedReader(
					new InputStreamReader(socket.getInputStream()));//构建一个reader
			PrintWriter out = new PrintWriter(socket.getOutputStream(), true);){//构建一个打印
			out.println("QUERY TIME ORDER");//输出内容
			System.out.println("send order to server succeed.");
			String resp = in.readLine();//读取响应
			System.out.println("Now is: " + resp);
		} catch (UnknownHostException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值