java多线程<二>TCP/IP实现简单的多客户端聊天

server端

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


public class Server {
	
	public static void main(String args[]){
		
		try{
			
			//服务器监听8888端口等待客户端的请求
			ServerSocket serverSicket= new ServerSocket(8888);
			Socket socket=null;
		   //接受客户端的socket 
			System.out.println("正在等待客户端的请求");
			int count=0;
			while(true){
				//调用accept()方法开始监听客户端的请求
				 socket=serverSicket.accept();
				 //创建一个新的线程
				 ServerThread serverThread=new ServerThread(socket);
				 
				 //启动线程
				 serverThread.start();
				 count++;
				 System.out.println("客户端的数量"+count);
				 InetAddress address=socket.getInetAddress();
				 System.out.println("当前客户端的IP地址是"+address);
				 
			}
			
			}catch(Exception 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;


public class ServerThread extends Thread {
	
	Socket socket=null;
	
	public ServerThread(Socket s){
		this.socket=s;
	}
	
	//线程执行的操作,响应客户端的请求
	public void run(){
		//字节流 ,字符流,缓存流 初始化
		InputStream is=null;
		InputStreamReader isr=null;
		BufferedReader br=null;
		OutputStream os=null;
		PrintWriter pw=null;
		try {
			is = null;
			isr = null;
			br = null;

			//讲接受的socket 放在字节流中
			 is=socket.getInputStream();
			//讲字节流转为字符流
			 isr=new InputStreamReader(is);
			//讲字节流转为 缓存流
			 br=new BufferedReader(isr);
			String info=null;
			while((info=br.readLine())!=null){
				System.out.print("客户端说"+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(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();
			}
			
		}
	}
}
	

client 端实现

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 Cilent {

	public static void main(String args[]) {

		try {

			for (int i = 0; i < 5; i++) {
				Socket c = new Socket("localhost", 8888);
				// 输出流
				OutputStream os = c.getOutputStream();
				// 打印流
				PrintWriter pw = new PrintWriter(os);

				pw.write("用户名 admin,密码:password");

				pw.flush();

				c.shutdownOutput();

				// 讲接受的socket 放在字节流中
				InputStream is = c.getInputStream();
				// 讲字节流转为字符流
				InputStreamReader isr = new InputStreamReader(is);
				// 讲字节流转为 缓存流
				BufferedReader br = new BufferedReader(isr);

				String info;

				while ((info = br.readLine()) != null) {

					System.out.println("服务器端:" + info);

				}
				br.close();
				isr.close();
				is.close();
				pw.close();
				os.close();
				c.close();
			}

		} catch (UnknownHostException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}

	}

}



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值