实现ECHO的客户端服务器编程(多线程处理)

服务器的主要流程:

设置一个端口(ServerSocket)->客户端连接(.accept())->获得从客户端来的数据流->将该数据流到输出流中

客户端的主要流程:

设置bufferreader输入流->连接上端口->获得从服务器端来的数据流->将该数据流到输出流中

->将客户端从键盘输入的数据写入到输出流中给服务器

package com.mldn.servet;

import java.io.IOException;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;

/**
 * 实现服务器端
 * 可以多线程
 * @author lenovo
 *
 */
public class EchoServr {
	private  static class ClientThread implements Runnable{
		private Socket client=null;//描述每一个不同的客户端
		private Scanner scan=null;
		private PrintStream out=null;
		private boolean flag=true;
		public ClientThread(Socket client) throws Exception{
			this.client=client;
			this.scan=new Scanner(client.getInputStream());//获得从客户端哪里获得的数据到输入流中
			//scan.useDelimiter("\n");
			this.out=new PrintStream(client.getOutputStream());//将数据到输出流中
		}
     
		@Override
		public void run() {
			// TODO Auto-generated method stub
			while(this.flag) {
				if(scan.hasNext()) {//如果还有数据
					String val=scan.next().trim();//一定要加个trim()来去掉换行符
					if("byebye".equals(val)) {
						out.println("byebyebye...");
						this.flag=false;
					}else {
						out.println("[echo]"+val);
					}
				}
			}
			
			try {
				client.close();
				scan.close();
				out.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
		  
		}
		
	}
	public static void main(String[] args) throws Exception {
		ServerSocket server=new ServerSocket(1234);
		System.out.println("等待客户端连接");
		
		
		boolean flag=true;
		while(flag) {
			Socket client=server.accept();//有客户端连接
			new Thread(new ClientThread(client)).start();
		}
		
		
	}

}
package com.mldn.servet;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.Socket;
import java.util.Scanner;

/**
 *客户端的编写
 * @author lenovo
 *
 */
public class EchoClient {
	private static final BufferedReader KEYBOARD_INPUT=new BufferedReader(new InputStreamReader(System.in));
    public static void main(String[] args) throws Exception {
    	Socket client=new Socket("localhost",1234);
    	Scanner scan=new Scanner(client.getInputStream());
    	PrintStream out=new PrintStream(client.getOutputStream());
    	boolean flag=true;
    	while(flag) {
    		String input=getString("请输入要发送的内容:").trim();
    		out.println(input);//由于这里用到了换行符,因此后面的服务端要用到trim()
    		if(scan.hasNext()) {
    			System.out.println(scan.next());
    		}
    		if("byebye".equals(input)) {
    			flag=false;
    		}
    	}
    	scan.close();
    	client.close();
    	out.close();
	
}
    public static String  getString(String prompt) throws Exception {
    	System.out.println(prompt);
    	String str=KEYBOARD_INPUT.readLine();
    	return str;
    	
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_41060905/article/details/82494494