java解决多线程服务器网络编程问题

一、案例:实现多客户端连接服务器

1.1 客户端代码

public class Client {

	public static void main(String[] args) throws Exception { Socket client = new Socket("localhost",8888); // 用户输入 Scanner keyScan = new Scanner(System.in); // 接收服务器的信息 Scanner netScan = new Scanner(client.getInputStream()); netScan.useDelimiter("\n"); PrintStream netOut = new PrintStream(client.getOutputStream()); boolean flag = true; while(flag) { System.out.println("请输入要发送的信息:"); String str= null; if(keyScan.hasNext()) { str = keyScan.next().trim(); // 发送到服务器 netOut.println(str); // 服务器端有回应 if(netScan.hasNext()) { System.out.println(netScan.next()); } } if("byebye".equals(str)) { flag = false; break; } } keyScan.close(); netScan.close(); client.close(); } } 

1.2 单线程服务器端代码【仅支持一个客户端】

public class SingleThreadServer {

	public static void main(String[] args) throws IOException { ServerSocket server = new ServerSocket(8888); // 等待连接 Socket client = server.accept(); // 接受客户端的输入 Scanner scan = new Scanner(client.getInputStream()); scan.useDelimiter("\n"); // 对客户端的回应 PrintStream out = new PrintStream(client.getOutputStream()); boolean flag = true; while(flag) { // pandaUN客户达UN是否是有数据 if(scan.hasNext()) { // 防止有空格出现 String str = scan.next().trim(); if("byebye".equals(str)) { out.println("byebye!!!"); // 退出循环 flag = false; break; } // 做出回应 out.println("Server:"+str); } } out.close(); scan.close(); server.close(); } } 

1.3 多线程服务器端代码【支持多客户端】

public class MultiThreadServer {
	
	public static class MyThread implements Runnable{ private Socket client; public MyThread(Socket client) { 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) { // pandaUN客户达UN是否是有数据 if(scan.hasNext()) { // 防止有空格出现 String str = scan.next().trim(); if("byebye".equals(str)) { out.println("byebye!!!"); // 退出循环 flag = false; break; } // 做出回应 out.println("Server:"+str); } } out.close(); scan.close(); }catch(Exception e) { e.printStackTrace(); } } } public static void main(String[] args) throws IOException { ServerSocket server = new ServerSocket(8888); // 无限的接受客户端的请求 boolean flag = true; while(flag) { // 等待连接 Socket client = server.accept(); // 开启线程 多线程服务器 new Thread(new MyThread(client)).start(); } server.close(); } } 
 来源: 迅闻网

猜你喜欢

转载自www.cnblogs.com/vwvwvwgwgvervae/p/12823572.html
今日推荐