Socket编程——使用多线程实现多客户端的通信

 
  
 
  

多线程服务器

应用多线程来实现服务器与多客户端之间的通信
基本步骤
1、服务器端创建ServerSocket,循环调用accpet()等待客户端连接
2、客户端创建一个socket并请求和服务器端连接
3、服务器端接受客户端请求,创建socket与该客户建立专线连接
4、建立连接的俩个socket在一个单独的线程上对话
5、服务器端继续等待新的连接

测试代码
服务器端:
package com.txr.Socket;

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

public class ManyClientServer {
	public static void main(String[] args) {
		int count =0 ;
		try {
			ServerSocket serverSocket=new ServerSocket(8888);
			System.out.println("服务器即将启动,等待客户端的连接");
			while(true){
				
				Socket socket = serverSocket.accept();
				count++;
				System.out.println("这是第"+count+"客户端");
				ServerTheard serverTheard=new ServerTheard(socket);
				serverTheard.start();
			}
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}

}
服务器线程处理类
package com.txr.Socket;

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

/**
 * 服务器线程处理类
 * @author Administrator
 *
 */
public class ServerTheard extends Thread {
	//和本线程相关的Socket
	Socket socket =null;
	
	public ServerTheard(Socket socket)
	{
		this.socket=socket;
	}
	int count=0;
	//线程执行的操作,响应客户端的请求
	@Override
	public void run() {
		try {
			InputStream is=socket.getInputStream();
			InputStreamReader isr= new InputStreamReader(is);
			BufferedReader br=new BufferedReader(isr);
			String info;
			while((info=br.readLine())!=null)
			{
				System.out.println("客户端说"+info);
			}
			socket.shutdownInput();
			count++;
			OutputStream os=socket.getOutputStream();
			PrintWriter pw=new PrintWriter(os);
			pw.write("这里是服务器,客户端的请求,允许通过");
			pw.flush();
			if(os!=null)
				os.close();
			if(br!=null)
				br.close();
			if(isr!=null)
				isr.close();
			if(is!=null)
				is.close();
			if(socket!=null)
				socket.close();
			
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}

}



你可能感兴趣的:(Sockets)