zoukankan      html  css  js  c++  java
  • UDP实现在线聊天功能

    发送端

    //发送
    public class UDPChat01 {
        public static void main(String[] args) throws Exception {
            //开启端口
            DatagramSocket socket = new DatagramSocket(8888);
    
            while (true){
                //准备数据:创建控制台
                BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
                String data = reader.readLine();
                byte[] datas = data.getBytes();
                DatagramPacket packet = new DatagramPacket(datas,0,datas.length,new InetSocketAddress("localhost",6666));
                socket.send(packet);
                //退出
                if (data.equals("bye")){
                    break;
                }
            }
            socket.close();
        }
    }
    

    接收端

    //接受
    public class UDPChat02 {
        public static void main(String[] args) throws Exception {
            DatagramSocket socket = new DatagramSocket(6666);
    
            while (true){
                //准备接受包裹
                byte[] buf = new byte[1024];
                DatagramPacket packet = new DatagramPacket(buf, 0, buf.length);
                socket.receive(packet);
    
                //判断结束
                byte[] data = packet.getData();
                String receiveData = new String(data, 0, data.length);
                System.out.println(receiveData);
                if (receiveData.equals("bye")){
                    break;
                }
            }
            socket.close();
        }
    }
    

    将方法封装

    //发送端
    public class TalkSender implements Runnable {
        DatagramSocket socket = null;
        BufferedReader reader = null;
        int fromPort;
        String toIp;
        int toPort;
    
        public TalkSender(String toIp, int fromPort, int toPort) {
            this.fromPort = fromPort;
            this.toIp = toIp;
            this.toPort = toPort;
            try {
                socket = new DatagramSocket(fromPort);
                reader = new BufferedReader(new InputStreamReader(System.in));
            } catch (SocketException e) {
                e.printStackTrace();
            }
        }
    
        @Override
        public void run() {
            while (true) {
                String data = null;
                try {
                    data = reader.readLine();
                    byte[] datas = data.getBytes();
                    DatagramPacket packet = new DatagramPacket(datas, 0, datas.length, new InetSocketAddress(toIp, toPort));
                    socket.send(packet);
                    //退出
                    if (data.equals("bye")) {
                        break;
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            socket.close();
        }
    }
    
    public class TalkReceiver implements Runnable {
        DatagramSocket socket = null;
        int port;
        String msgFrom;
    
        public TalkReceiver(int port, String msgFrom) {
            this.port = port;
            this.msgFrom = msgFrom;
            try {
                socket = new DatagramSocket(port);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
        @Override
        public void run() {
            while (true) {
                //准备接受包裹
                byte[] buf = new byte[1024];
                DatagramPacket packet = new DatagramPacket(buf, 0, buf.length);
                try {
                    socket.receive(packet);
                    //判断结束
                    byte[] data = packet.getData();
                    String receiveData = new String(data, 0, data.length);
                    System.out.println(msgFrom + receiveData);
                    if (receiveData.equals("bye")) {
                        break;
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            socket.close();
        }
    }
    
    public class Teacher {
        public static void main(String[] args) {
            new Thread(new TalkSender("127.0.0.1",6666,8888)).start();
            new Thread(new TalkReceiver(7777,"学生:")).start();
        }
    }
    
    public class Student {
        public static void main(String[] args) {
            System.out.println("------------咨询课程------------");
            new Thread(new TalkSender("localhost",5555,7777)).start();
            new Thread(new TalkReceiver(8888,"老师:")).start();
        }
    }
    
  • 相关阅读:
    解决方案下显示的网站名称被追加编号的问题解决方法
    sql server 2008 报表服务器(sql server 2008 report service)中如何固定行或者列
    如何通过参数来切换图表和数据
    饼图中如何将一定比例的小切片收集在一起
    饼图图例中显示百分比值
    如何根据条件隐藏列
    饼图上如何显示百分比值
    负载均衡
    在UTF8页中接收和使用以GB2312方式进行URL编码的中文数据
    ASP 格式化显示时间为几个月,几天前,几小时前,几分钟前,或几秒前
  • 原文地址:https://www.cnblogs.com/shimmernight/p/13441762.html
Copyright © 2011-2022 走看看