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





你可能感兴趣的:(Echo)