Echo

服务端:
public class EchoServer {
//	创建一个线程类,不考虑线程安全
	private static class MyThread implements Runnable {
		private Socket client;
//		该类构造方法
		public MyThread(Socket client) throws IOException {
			this.client = client;
		}
		@Override
		public void run() {	//自定义多线程执行区域
			try {
//				写入服务端的客户端输出流
				Scanner scan = new Scanner(client.getInputStream());
				scan.useDelimiter("\n");
//				创建对客户端的输出流
				PrintStream out = new PrintStream(client.getOutputStream());
				boolean flag = true;	//循环标记
				while(flag) {	//循环
					if (scan.hasNext()) {	//如果有字符串
						String str = scan.next().trim();	//赋值当前字符串并删除两端的空格包括换行
//						字符串忽略大小写比较
						if("byebye".equalsIgnoreCase(str)) {
//							发送到客户端
							out.println("byebye");	//客户端的Scanner以输出换行识别本段"byebye"
							flag = false;
							break;	//找到匹配字符串时结束整个程序
						}
						out.println("ECHO:" + str);	//未匹配时的输出
					}
				}
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}
	public static void main(String[] args) throws IOException {
//		创建一个服务端的服务对象
		ServerSocket server = new ServerSocket(8000);	//该服务在8000端口

		boolean flag = true;
		while(flag) {
//		 	服务端监听端口,循环主线程每次收到客户端的连接信号后返回一个包含服务端向客户端连接的Socket对象
			Socket client = server.accept();	//等待客户端连接时,主线程程序进入阻塞状态
//			程序主线程连通后创建一个线程1,并不断循环,期间若主线程有新的client,主线程将创建线程2适用新client
			new Thread(new MyThread(client)).start();;
		}
	}
}
客户端:
public class EchoClient {
	public static void main(String[] args) throws UnknownHostException, IOException {
		Socket client = new Socket("localhost",8000);
		Scanner keyScan = new Scanner(System.in);	//用户输入信息,信息默认以空格分段
		keyScan.useDelimiter("\n");
//		等待服务端的输出(客户端的写入)
		Scanner netScan = new Scanner(client.getInputStream());
		netScan.useDelimiter("\n");
//		创建一个对服务端的打印输出流
		PrintStream netOut = new PrintStream(client.getOutputStream());
		boolean flag = true;
		while (flag) {
			System.out.println("请输入要发送的信息:");
			if (keyScan.hasNext()) {	//如果有键盘输入信息
				String str1 = keyScan.next().trim();	//读取纯字符串信息
//				把纯字符串发送到服务端
				netOut.println(str1);	//换行语句使服务端的Scanner识别本段语句
				
				if(netScan.hasNext()) {	//如果服务器端有输出到客户端
					String str2 = netScan.next().trim();	//同上
					System.out.println(str2);	//输出服务器端的的信息
					if("byebye".equalsIgnoreCase(str2)) {	//如果读取到指定信息,关闭程序	
						flag = false;
						break;
					}
				}
			}
		}
		keyScan.close();
		netScan.close();
		client.close();
	}
}





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值