利用线程池实现多个客户端和服务器端交流


import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;

public class AutoReplyTcpClient {
	public static void main(String[] args) throws UnknownHostException, IOException {
		Socket client=new Socket("127.0.0.1",6667);
		System.out.println("连接服务器127.0.0.1成功");
		DataOutputStream dos = new DataOutputStream(client.getOutputStream());
		DataInputStream dis = new DataInputStream(client.getInputStream());
		Scanner sc=new Scanner(System.in);
		String str="";
		while(!"quit".equals(str=sc.nextLine())){
			dos.writeUTF(str);//将控制台内容写入服务器中
			String response=dis.readUTF();//读取服务器内容
			System.out.println("服务器:"+response);
		}
		
	}
}

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class ThreadPoolAutoReplyTcpServer {
	static void charWithClient(Socket client) throws IOException{
		DataOutputStream dos = new DataOutputStream(client.getOutputStream());
		DataInputStream dis = new DataInputStream(client.getInputStream());
		while (true) {
			//加try是为了防止,客户端断开连接出现异常
			try {
				// 用这个流去封装输入流
				String str = dis.readUTF();// 直接读取字符串
				System.out.println("收到来自客户端[" + client.getPort() + "]的消息:" + str);
				// 再把数据写回去
				dos.writeUTF("收到了(" + str + ")");
			} catch (Exception e) {
				System.out.println("与客户端["+client.getPort()+"]断开连接");
				break;
			}
		}
	}
	public static void main(String[] args) throws IOException {
		ServerSocket ss = new ServerSocket(6667);
		System.out.println("服务器端在6666端口启动成功,等待客户端连接...");	
		//创建线程池
		ExecutorService pool=Executors.newFixedThreadPool(3);//同时运行3个客户端
		while (true) {
			// 启动监听
			Socket client = ss.accept();
			System.out.println("客户端[" + client.getPort() + "]连接成功");
			pool.submit(new Runnable() {
				@Override
				public void run() {
					try {
						charWithClient(client);
					} catch (IOException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}					
				}
			});
			
		}
	
	}
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章