分布式计算:将Socket实验修改为服务端多线程程序,并测试完成

本文介绍了一个简单的服务端多线程程序实现,通过监听端口接收客户端连接,并为每个客户端创建新的线程来处理请求。客户端和服务端之间的通信采用标准输入输出流。

服务端:

package ServerMultithreadedProgram;

import java.net.ServerSocket;
import java.net.Socket;

public class Server {

	private static ServerSocket ServerSocket = null;
	static {
		try {
			ServerSocket = new ServerSocket(9090);
		} catch(Exception e) {
			e.printStackTrace();
		}
	}
	
	public static void main(String[] args) {
		try {
			
			System.out.println("服务器已启动,等待客户端连接");
		    Socket socket = null;
		    while (true) {
		    	socket = ServerSocket.accept();
		    	new ServerThread(socket).start();
		    }
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

服务线程类:

package ServerMultithreadedProgram;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;

public class ServerThread extends Thread{

	private Socket client;
	
	public ServerThread(Socket socket) {
		this.client = socket;
	}
	public void run() {
		BufferedReader br = null;
		PrintWriter pw = null;
		String str;
		
		try {
			br = new BufferedReader(new InputStreamReader(client.getInputStream()));
			pw = new PrintWriter(client.getOutputStream());
			while ((str = br.readLine()) != null) {
				System.out.println("收到请求" + str);
				pw.println("服务端收到请求:" + str);
				pw.flush();
				if (str.equals("end")) {
					System.out.println("end");
					break;
				}
			}
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		try {
			br.close();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		pw.close();
		try {
			client.close();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

用户类:

package ServerMultithreadedProgram;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;

public class Client2 {

	public static void main(String[] args) {
		
		Socket server = null;
		BufferedReader br = null;
		BufferedReader wt = null;
		PrintWriter pw = null;
		
		try {
			server = new Socket("127.0.0.1", 9090);
			br = new BufferedReader(new InputStreamReader(server.getInputStream()));
			wt = new BufferedReader(new InputStreamReader(System.in));
			pw = new PrintWriter(server.getOutputStream());
			
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		String str = "";
		while (true) {
			try {
				str = wt.readLine();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			pw.println(str);
			pw.flush();
			if (str.equals("end")) {
				System.out.println("通讯结束end");
				break;
			}
			try {
				System.out.println(br.readLine());
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		try {
			
			br.close();
			pw.close();
			wt.close();
			server.close();
			
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

说明,只是将Server/Client改成服务端多线程版本。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值