zoukankan      html  css  js  c++  java
  • Java 基于UDP的类似于QQ的循环通信

    package Day10;
    
    
    import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    import java.net.InetSocketAddress;
    import java.util.Scanner;
    
    /**
     * 聊天消息接受者
     * @author Administrator
     *
     */
    class Receiver implements Runnable {
        public void run() {
            DatagramSocket ds = null;
            try {
                /**
                 * 创建接收端
                 * 1、DatagramSocket(int port)
                 *             构造一个数据报套接字绑定到本地主机上的指定端口。 
                 */
                ds = new DatagramSocket(12345);
                
                while(true) {
                    // 接收数据包
                    byte[] data = new byte[1024];
                    DatagramPacket dp = new DatagramPacket(data, data.length);
                    ds.receive(dp);
                    // 获取接收到的数据包的信息
                    /**
                     * 1、InetAddress类型     getAddress()
                     *                    返回机器的IP地址的数据报发送或者接收的数据报。 (数据报二进制)
                     * 2、getHostAddress()
                     *               返回的IP地址字符串的文本表示。 
                     * 
                     */
                    String msg = new String(data, 0, dp.getLength());
                    String ip = dp.getAddress().getHostAddress();
                    //int port = dp.getPort();
                    
                    System.err.println(ip + msg);
                    
                }
                
            }catch(Exception e) {
                e.getStackTrace();
            }finally {
                // 关闭套接字
                if(ds != null)
                    ds.close();
            }
        }
    }
    /**
     * 聊天消息发送者
     * @author Administrator
     *
     */
    class Sender implements Runnable{
        
        Scanner s = null;
        DatagramSocket ds = null;
        @Override
        public void run() {
            try {
                // 创建发送端
                ds = new DatagramSocket();
                // 设置端口和ip
                int port = 12345;
                String ip = "172.180.8.50";
                // 创建控制台扫描器
                s = new Scanner(System.in);
                while(true) {
                    // 读取控制台信息
                    // System.out.println("--------没有格式,直接输入--------");
                    String str = "cjj: "+ s.nextLine();
                    byte[] msg = str.getBytes();
                    /**
                     * 发送数据
                     * 1、InetSocketAddress(InetAddress addr, int port)
                     *                    创建一个套接字地址的IP地址和端口号。 
                     * 2、 getSocketAddress()
                     *                 得到了SocketAddress(通常是IP地址+端口号)都的远程主机,这包被发送到或来自。 
                     * 3、send(DatagramPacket p)
                     *               从这个套接字发送一个数据报包。 
                     */
                    DatagramPacket dp = new DatagramPacket(msg, msg.length);
                    dp.setSocketAddress(new InetSocketAddress(ip , port));
                    ds.send(dp);
                }
                
                
            }catch(Exception e) {
                e.getStackTrace();
                
            }finally {
                if(ds != null)
                    ds.close();
                if(s != null)
                    s.close();
            }
        }
    }
    
    public class QQ {
        public static void main(String[] args) throws Exception {
            new Thread(new Sender()).start();
            new Thread(new Receiver()).start();
        }
    }
    package QQ;
    
    
    import java.io.IOException;
    import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    import java.net.InetSocketAddress;
    import java.net.SocketException;
    import java.util.Scanner;
    
    public class QQ1 {
    
        public static void main(String[] args) {
            new Thread(new Sender()).start();
            new Thread(new Receiver()).start();
        }
    
    }
    
    class Sender implements Runnable {
        @Override
        public void run() {
            Scanner sc = new Scanner(System.in);
            DatagramSocket ds = null;
            try {
                ds = new DatagramSocket();
                while (true) {
                    System.out.print("请输入发送的内容 :");
                    String str = sc.nextLine();
                    DatagramPacket dp = new DatagramPacket(str.getBytes(), str.getBytes().length);
                    dp.setSocketAddress(new InetSocketAddress("172.180.8.50", 12345));
                    ds.send(dp);
                    System.out.println();
                }
            } catch (SocketException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                if (ds != null)
                    ds.close();
                if (sc != null)
                    sc.close();
            }
        }
    }
    
    class Receiver implements Runnable {
    
        @Override
        public void run() {
            DatagramSocket ds = null;
            try {
                ds = new DatagramSocket(12345);
                while (true) {
                    byte[] data = new byte[1024];
                    DatagramPacket dp = new DatagramPacket(data, data.length);
                    ds.receive(dp);
                    String str = new String(data, 0, dp.getLength());
                    String ip = dp.getAddress().getHostAddress();
                    int port = dp.getPort();
                    System.err.println("老刘:" + str);
                }
            } catch (SocketException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                if (ds != null) {
                    ds.close();
                }
            }
        }
    }
  • 相关阅读:
    PYQT5学习笔记之各模块介绍
    socket网络编程
    python异常处理
    面向对象三大特性:继承,多态,封装
    面向对象编程
    解密for循环工作机制之迭代器,以及生成器、三元表达式与列表解析、解压序列
    文件处理之处理模式及其黑魔法
    php对xml文件的增删改查
    jquery.zclip实现点击拷贝文字功能
    php 验证访问浏览器是电脑还是手机
  • 原文地址:https://www.cnblogs.com/chuijingjing/p/9544361.html
Copyright © 2011-2022 走看看