java 网络编程-TCP-多人聊天(面向对象封装)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 网络编程-TCP-多人聊天(面向对象封装)相关的知识,希望对你有一定的参考价值。

客户端:
多个客户可以正常收发信息,因为可以同时发送和接受信息,不是发送完信息后等待
返回信息,所以要加入多线程

 public class Client 

public static void main(String[]args) throws UnknownHostException, IOException

    System.out.println("客户端启动中...");

    Socket client =new Socket("localhost",9999);

    new Thread(new Send(client)).start();

    new Thread(new Receive(client)).start();


客户端的发送端封装了:
发送消息
从键盘读取消息
run()
释放资源

 public class Send implements Runnable

private BufferedReader br;
private DataOutputStream dos;
private Socket client;
private boolean flag=true;

public Send(Socket client)

    this.client=client;
    br=new BufferedReader(new InputStreamReader(System.in));
    try 
        dos=new DataOutputStream(client.getOutputStream());
     catch (IOException e) 

        this.release();
    

public void run()

    while(flag)
    
        System.out.println("请输入消息:");
        String msg=getstr();
        send(msg);

    

private void release()

    this.flag=false;
    utils.close(dos,client);

//从控制台获取消息
private String getstr()

    try 
        String msg=br.readLine();
        return msg;
     catch (IOException e) 

        e.printStackTrace();
    
    return null;

private void send(String msg)

    try 
        dos.writeUTF(msg);
        dos.flush();

     catch (IOException e) 
    release();
    

客户端的接收端封装了:
接收消息
run()
释放资源

public class Receive implements Runnable 
private DataInputStream dis;
private Socket client;
private boolean flag=true;

public Receive(Socket client)

    this.client=client;
    try 
        dis=new DataInputStream(client.getInputStream());
     catch (IOException e) 
        release();
    


private String receive()

    String msg;
    try 
        msg = dis.readUTF();
        return msg;
     catch (IOException e) 
        release();
    
    return null;

public void run()

    while(flag)
    
        String msg=receive();
        System.out.println(msg);
    


private void release()

    this.flag=false;
    utils.close(dis,client);

作为释放资源工具类

public class utils 

public static void close(Closeable... target )

    for(Closeable it:target)
    
            try 
                if(null!=it)
                
                it.close();
                
             catch (IOException e) 

                e.printStackTrace();
            

           

在线聊天室
服务器:

 public class Chat 

public static void main(String[]args) throws IOException

    System.out.println("服务器启动中...");

    ServerSocket server=new ServerSocket(9999);

    while(true)
    
        Socket client =server.accept();
        System.out.println("一个客户端建立了连接");
        new Thread(new channel(client)).start();

    



static class channel implements Runnable
    private DataInputStream dis;
    private DataOutputStream dos;
    private BufferedReader br;
    private Socket client;
    private boolean flag;

    public channel(Socket client)
    
        this.client=client;
        try 
            dis=new DataInputStream(client.getInputStream());
            dos=new DataOutputStream(client.getOutputStream());
            flag=true;
         catch (IOException e) 
            release();          
    
    //接收消息
    private String receive() 
    
        try 
            String msg=dis.readUTF();
            return msg;
         catch (IOException e) 
            release();
        
        return null;

    
    //发送给消息
    private void send(String msg)
    
        try 
            dos.writeUTF(msg);
            dos.flush();
         catch (IOException e) 
            release();
        

    
    private void release()
    
        this.flag=false;
        utils.close(dis,dos,client); //写一个工具类,使用Closeable...可变参数    
    
    public void run()
    
        while(flag)
        
            String msg=receive();
            send(msg);
        
        release();

    


以上是关于java 网络编程-TCP-多人聊天(面向对象封装)的主要内容,如果未能解决你的问题,请参考以下文章

Java编程实例-tcp聊天室代码实现

游戏开发实战Unity使用Socket通信实现简单的多人聊天室(万字详解 | 网络 | TCP | 通信 | Mirror | Networking)

游戏开发实战Unity使用Socket通信实现简单的多人聊天室(万字详解 | 网络 | TCP | 通信 | Mirror | Networking)

java入门12--面向对象(上)

java入门12--面向对象(上)

JAVA面向对象编程课程设计——多人扫雷对战