利用多线程来实现一个简单的服务器,来实现处理多个用户的请求

服务器来实现接受多个客户的请求,并且处理响应。

服务器采用了多线程,代码如下服务器

package cn.kgc.basic.tcpthread;

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * 服务器,项目都是服务器能够接受多个用户的访问,
 * 每一次得到一个客户请求,就要开启一个新的线程
 * @author 92126
 *
 */
public class TCPsever {
	public static void main(String[] args) {
		try {
			//1.指定服务器的端口
			ServerSocket serverSocket = new ServerSocket(8080);
			while(true) {
				//2.因为要实现能够接受多个客户的访问。所以要进行循环处理开启多线程
				//开始接受请求
				Socket clientSocket = serverSocket.accept();
				//3.给每一个用户开启一个线程
				//4.创建线程组件
				RequestThread requestThread = new RequestThread(clientSocket);
				//5.开启线程
				new Thread(requestThread).start();
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		
	}

}

服务器的实现,用多线程来实现服务器里面的操作

package cn.kgc.basic.tcpthread;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.Socket;

/**
 * 多线程来接受请求处理
 * @author 92126
 *
 */
public class RequestThread implements Runnable {
	private Socket  clientSocket;
	/**
	 * 通过构造方法来传递客户的信息
	 */
	public RequestThread(Socket clientSocket) {
		this.clientSocket = clientSocket;
	}
	@Override
	public void run() {
		InputStream is = null;
		BufferedReader br = null;
		OutputStream os = null;
		try {
					// 3.调用输入流读取客户端信息
					is = clientSocket.getInputStream();
					// 为了读取方便,将流转换为高效字符流
					br = new BufferedReader(new InputStreamReader(is));

					System.out.print("客户端的请求信息为:");
					String str = null;
					while ((str = br.readLine()) != null) {
						System.out.println(str);
					}
					// -----------------给客户端响应------------------
					clientSocket.shutdownInput();
					os = clientSocket.getOutputStream();
					os.write("你的信息,服务端已经接收成功!".getBytes());
				} catch (Exception e) {
					e.printStackTrace();
				}finally {
					// 关流
					try {
						os.close();
						br.close();
						is.close();
						clientSocket.close();
					} catch (Exception e) {
						e.printStackTrace();
					}
				}
		
}
	}



客户端,我只写了一个,你们可以同时用多台电脑进行实现,看看效果如何

package cn.kgc.basic.tcp;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;

/**
 * 基于TCP进行Socket编程:客户端
 * @author 92126
 *
 */
public class TCPClient {
	@SuppressWarnings("resource")
	public static void main(String[] args) {
		Socket socket = null;
		OutputStream os =null;
		InputStream is =null;
		BufferedReader br =null;
		//*-*-----------发送请求---------------
		try {
			//1.指定服务器的端口和IP
			 socket = new Socket("localhost", 8080);
			//2.获取输出流输出信息
			 os = socket.getOutputStream();
			os.write("土豆土豆,我是地瓜,收到回答".getBytes());
			
			//---------------接受响应---------------------
			socket.shutdownOutput();
			
			 is = socket.getInputStream();
			 br = new BufferedReader(new InputStreamReader(is));
			System.out.println("服务器的相应如下:");
			String str =null;
			while((str = br.readLine())!=null) {
				System.out.println(str);
			}
		
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				br.close();
				is.close();
				os.close();
				socket.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}

}

猜你喜欢

转载自blog.csdn.net/weixin_44614066/article/details/88543703