zoukankan      html  css  js  c++  java
  • Udp实现简单的聊天程序

    在《UDP通讯协议》这篇文章中,简单的说明了Udp协议特征及如何Udp协议传输数据

    这里将用Udp协议技术,编写一个简单的聊天程序:

    //发送端:

    package com.shindo.java.udp;
    import java.io.*;
    import java.net.*;
    /**
     * 使用多线程技术封装发送端
     */
    public class UdpSendByThread implements Runnable {
    
        private DatagramSocket ds;
        public UdpSendByThread(DatagramSocket ds){
            this.ds = ds;
        }
        public void run(){
                //读取键盘录入
                BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
                //按行读取数据,并发送出去
                String line = null;
                try {
                    while((line = bufr.readLine()) != null){
                        if("byebye".equals(line)) break;
                        
                        byte[] buf = line.getBytes();
                        
                        DatagramPacket dp = new DatagramPacket(buf,buf.length,InetAddress.getByName("127.0.0.1"),11011);
                        
                        ds.send(dp);
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            
        }
    }

    //接收端:

    package com.shindo.java.udp;
    import java.io.*;
    import java.net.*;
    /**
     * 使用多线程技术封装接收端
     */
    public class UdpReceiveByThread implements Runnable{
        
        private DatagramSocket ds;
        public UdpReceiveByThread(DatagramSocket ds){
            this.ds = ds;
        }
        public void run(){
            try {
                while(true){
                    byte[] buf = new byte[1024];
                    DatagramPacket dp = new DatagramPacket(buf,buf.length);
                    
                    ds.receive(dp);
                    
                    String ip = dp.getAddress().getHostAddress();
                    System.out.println(ip + "..........isconnected");
                    
                    String data = new String(dp.getData(),0,dp.getLength());
                    System.out.println(data);
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    启动类:

    package com.shindo.java.udp;
    import java.net.*;
    /**
     * 实现使用Udp协议通讯的简单聊天程序
     */
    public class ChatDemo {
        public static void main(String[] args) throws Exception{
            DatagramSocket ds = new DatagramSocket();
            DatagramSocket dsPort = new DatagramSocket(11011);
            
            new Thread(new UdpSendByThread(ds)).start();
            new Thread(new UdpReceiveByThread(dsPort)).start();
            
        }
    }
  • 相关阅读:
    [每日一题]一道面试题是如何引发深层次的灵魂拷问?
    值得关注的内推:字节内推「社招,校招及提前批,实习生」,每日面试题
    《人在囧途》系列
    Jmeter(三十三)
    hive with as 语法
    红蓝紫实战攻防演习手册2020
    hfish 集群蜜罐搭建
    CTF之MISC练习
    Struts2 S2-061(CVE-2020-17530)漏洞复现
    解决Windows资源管理器呼出上下文菜单(右键菜单)导致卡死的问题
  • 原文地址:https://www.cnblogs.com/shindo/p/5297123.html
Copyright © 2011-2022 走看看