Java简易多人聊天室(cmd下运行)

思路:

1.首先建立服务器监听
ServerSocket server = new ServerSocket(5000);
监听某个指定端口号是否有连接请求

2.客户端发起请求,也就是new了一个Socket socket = new Socket(host,port);
想某个指定端口号发起请求

3.连接确认
当服务器通过accept()方法接受来自客户端的请求
Socket socket = server.accpet();//返回一个Socket对象来处理与客户端的通信
然后建立一个线程来处理
new Thread(new SeverStream(socekt,number)).start();
每收到一个客户端请求,服务器建立一个线程来处理客户端的请求

package exercise01;
import java.net.*;
import java.io.*;

public class ChatServer {

	public static void main(String[] args) throws IOException{
		ServerSocket serverSocket = new ServerSocket(5000);//监听某个特定端口号
		int number = 1;
		while(true)
		{
			Socket socket = serverSocket.accept();//客户端发送请求
			System.out.println("客户端"+number+"链接成功");
                        //开启一个新线程来处理客户端的请求
			new Thread(new ServerStream(socket,number)).start();
			number++;
		}
		
	}
}
package exercise01;
import java.net.*;
import java.io.*;

public class ChatClient {

	public static void main(String[] args) throws IOException{
                //向服务器发送请求
		Socket socket = new Socket(InetAddress.getLocalHost(),5000);
                //获取键盘输入流
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
                //用来向服务器发送消息
 BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
       // BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        while(true)
        {
        	String line = br.readLine();
        	bw.write(line);
        	bw.newLine();//这里是表示一条消息的完成以回车为结束符
        	bw.flush();//把缓冲流刷新
        	if(line.equals("over"))
        		break;
        }
        bw.close();
        br.close();
        socket.close();
	}

}

package exercise01;
import java.net.*;
import java.io.*;

public class ServerStream implements Runnable {
    private Socket socket = null;
    private int number;
    
    public ServerStream(Socket socket,int number)
    {
    	this.socket = socket;
    	this.number = number;
    }
    
	public void run() 
	{
		try 
		{
                        //接受客户端发送的消息
			BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            PrintWriter pw = new PrintWriter(socket.getOutputStream());
			while(true)
            {
            	String line = br.readLine();//读取字符串
            	if(line.equals("over"))
            		break;
            	System.out.println("客户端"+number+"说:"+line);
            }
		}
		catch(IOException e)
		{
			
		}
		
		finally {
			
			try {
				socket.close();
			}
			catch(IOException e)
			{
				
			}
		}
		
	}	
}

猜你喜欢

转载自blog.csdn.net/qq_40511966/article/details/83865263