利用多线程进行多客户端通信

1 篇文章 0 订阅
1 篇文章 0 订阅

此代码是本人为了做笔记使用,有意者参考,无意者请查阅其它,不好意思。

客户端:

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;
import java.net.UnknownHostException;



/*public class Client {
	public static void main(String[] args) throws UnknownHostException, IOException{
		Socket socket=new Socket("localhost",8888);
		OutputStream os=socket.getOutputStream();
		PrintWriter pw=new PrintWriter(os);
		InputStream in=socket.getInputStream();
		InputStreamReader isr=new InputStreamReader(in);
		pw.write("用户名:menglei 密码:1234123");
		pw.flush();
		socket.shutdownOutput();
		os.close();
		pw.close();
		InputStreamReader isr1=new InputStreamReader(socket.getInputStream());
		BufferedReader is=new BufferedReader(isr1);
		String str=is.readLine();
		System.out.println(str.toString());
		socket.shutdownInput();
		is.close();
		isr1.close();
	}
}*/
public class Client {
	public static void main(String[] args) {
		try {
			//1.创建客户端Socket,指定服务器地址和端口
			Socket socket=new Socket("localhost", 8888);
			//2.获取输出流,向服务器端发送信息
			OutputStream os=socket.getOutputStream();//字节输出流
			PrintWriter pw=new PrintWriter(os);//将输出流包装为打印流
			pw.write("用户名:meng;密码:789");
			pw.flush();
			socket.shutdownOutput();//关闭输出流
			//3.获取输入流,并读取服务器端的响应信息
			InputStream is=socket.getInputStream();
			BufferedReader br=new BufferedReader(new InputStreamReader(is));
			String info=null;
			while((info=br.readLine())!=null){
				System.out.println("我是客户端,服务器说:"+info);
			}
			//4.关闭资源
			br.close();
			is.close();
			pw.close();
			os.close();
			socket.close();
		} catch (UnknownHostException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

服务器端:
import java.io.IOException;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;


/*public class Server {
	public static void main(String[] args) throws IOException{
		int count=0;
		ServerSocket serverSocket=new ServerSocket(8888);
		Socket socket=null;
		System.out.println("***服务器即将启动,等待客户端的连接***");
		while(true){
			socket=serverSocket.accept();
			ServerThread serverThread=new ServerThread(socket);
			serverThread.start();
			count++;
			System.out.println("客户端的数量:"+count);
			InetAddress address=socket.getInetAddress();
			System.out.println("当前客户的IP:"+address.getHostAddress());
		}
		
	}	
}*/

public class Server {
	public static void main(String[] args) {
		try {
			//1.创建一个服务器端Socket,即ServerSocket,指定绑定的端口,并监听此端口
			ServerSocket serverSocket=new ServerSocket(8888);
			Socket socket=null;
			//记录客户端的数量
			int count=0;
			System.out.println("***服务器即将启动,等待客户端的连接***");
			//循环监听等待客户端的连接
			while(true){
				//调用accept()方法开始监听,等待客户端的连接
				socket=serverSocket.accept();
				//创建一个新的线程
				ServerThread serverThread=new ServerThread(socket);
				//启动线程
				serverThread.start();
				
				count++;//统计客户端的数量
				System.out.println("客户端的数量:"+count);
				InetAddress address=socket.getInetAddress();
				System.out.println("当前客户端的IP:"+address.getHostAddress());
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
		
	}
}

多线程:

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;



 /*class ServerThread extends Thread{
	//与本线程相关的socket
	 Socket socket=null;
	 public  ServerThread(Socket socket){
		 this.socket=socket;
	 }
	 public void run(){
		InputStream is=null;
		InputStreamReader isr=null;
		BufferedReader br=null;
		OutputStream os=null;
		PrintWriter pw=null;
		BufferedReader rd=new BufferedReader(isr);
		 try {
			 	is=socket.getInputStream();
			 	isr=new InputStreamReader(is);
			 	br=new BufferedReader(isr);
				String info=null;
				while((info=br.readLine())!=null){
					System.out.println("我是服务器,客户端报告:"+info);	
				}
				socket.shutdownInput();
				 os=socket.getOutputStream();
				 pw=new PrintWriter(os);
				pw.write("欢迎您");
				pw.flush();
				
				
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
			try {		
					if(pw!=null)
						pw.close();
					if(is!=null)
						is.close();
					if(br!=null)
						br.close();
					if(os!=null)
						os.close();
					if(isr!=null)
						isr.close();
					if(socket!=null)
						socket.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	 }	
}*/
 
 public class ServerThread extends Thread {
		// 和本线程相关的Socket
		Socket socket = null;

		public ServerThread(Socket socket) {
			this.socket = socket;
		}
		
		//线程执行的操作,响应客户端的请求
		public void run(){
			InputStream is=null;
			InputStreamReader isr=null;
			BufferedReader br=null;
			OutputStream os=null;
			PrintWriter pw=null;
			try {
				//获取输入流,并读取客户端信息
				is = socket.getInputStream();
				isr = new InputStreamReader(is);
				br = new BufferedReader(isr);
				String info=null;
				while((info=br.readLine())!=null){//循环读取客户端的信息
					System.out.println("我是服务器,客户端说:"+info);
				}
				socket.shutdownInput();//关闭输入流
				//获取输出流,响应客户端的请求
				os = socket.getOutputStream();
				pw = new PrintWriter(os);
				pw.write("欢迎您!");
				pw.flush();//调用flush()方法将缓冲输出
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}finally{
				//关闭资源
				try {
					if(pw!=null)
						pw.close();
					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) {
					e.printStackTrace();
				}
			}
		}
	}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值