如何编写一个简单群聊

运用学过的Tcp网络编程可以实现一个简单的群聊,其代码如下:

服务器端的代码如下:

public class TcpServer {

    //因为ArrayList本身不是线程安全的,所以通过集合Collections.synchronizedList将其转换为一个线程安全的类

    public static List<Socket> listSocket = Collections.synchronizedList(new ArrayList<Socket>());

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

        ServerSocket ss = new ServerSocket(30000);

        while(true) {
                /*  监听客户端的连接,返回一个对应的Socket对象,这
            是一个阻塞方法,如果accept得不到一个客户端,他就一直会
            在这里等待客户端的连接,直到有一个客户端连上来才执行结束。*/
            Socket socket = ss.accept();
            listSocket.add(socket);

            new Thread(new TepServerThread(socket)).start();
        }

    }

}

TepServerThread里头的代码如下:


public class TcpServerThread implements Runnable {

    Socket socket;
    BufferedReader br;

    public TcpServerThread(Socket socket) throws IOException {
        this.socket = socket;
        br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
    }

    @Override
    public void run() {

        try {
            String content;
            while ((content = read()) != null) {
                System.out.println("--------------server---------------");
                System.out.println(content);
                for (Socket s : TcpServer.listSocket) {
                    PrintWriter pw = new PrintWriter(s.getOutputStream());
                    pw.println(content);
                    pw.flush();//发送出去
                }
            }
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

    private String read() {
        try {
            return br.readLine();
        } catch (IOException e) {
            TcpServer.listSocket.remove(socket);
        }
        return null;
    }

}

客户端代码如下:


public class TcpClient {

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

        Socket socket = new Socket("127.0.0.1", 30000);

        new Thread(new TcpClientThread(socket)).start();


        //客户端输入聊天信息,
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String line;

        PrintWriter pw = new PrintWriter(socket.getOutputStream());

        while((line = br.readLine()) != null) {
            System.out.println("--------------client---------------");
            pw.println(line);
            pw.flush();//发送消息出去
        }

    }

}

TcpClientThread里头代码如下:


public class TcpClientThread implements Runnable {
    private Socket socket;
    BufferedReader br;

    public TcpClientThread(Socket socket) throws IOException {
        this.socket = socket;
        br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
    }

    @Override
    public void run() {

        try {
            String content;
            while((content = br.readLine()) != null) {
                System.out.println(content + "-------------");
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}

感兴趣的朋友可以试试!有不当之处请指出,谢谢。可以参考这里

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值