• java学习 网络编程 ip,udp


    ip:

    //获取本地主机ip地址对象。
    InetAddress ip = InetAddress.getLocalHost();

    //获取其他主机的ip地址对象。
    ip = InetAddress.getByName("192.168.1.110");//InetAddress.getByName("my_think");

    System.out.println(ip.getHostAddress());
    System.out.println(ip.getHostName());

    ===============================

    udp:

    /*
    * 创建UDP传输的发送端。
    * 思路:
    * 1,建立udp的socket服务。
    * 2,将要发送的数据封装到数据包中。
    * 3,通过udp的socket服务将数据包发送出去。
    * 4,关闭socket服务。
    */
    //1,udpsocket服务。使用DatagramSocket对象。
    DatagramSocket ds = new DatagramSocket(8888);
    BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
    String line = null;
    while((line=bufr.readLine())!=null){
    byte[] buf = line.getBytes();
    DatagramPacket dp = new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.1.100"),10000);
    ds.send(dp);
    if("886".equals(line))
    break;
    }
    //4,关闭资源。
    ds.close();

    /*
    * 建立UDP接收端的思路。
    * 1,建立udp socket服务,因为是要接收数据,必须要明确一个端口号。
    * 2,创建数据包,用于存储接收到的数据。方便用数据包对象的方法解析这些数据.
    * 3,使用socket服务的receive方法将接收的数据存储到数据包中。
    * 4,通过数据包的方法解析数据包中的数据。
    * 5,关闭资源
    */
    //1,建立udp socket服务。
    DatagramSocket ds = new DatagramSocket(10000);
    while(true){
    //2,创建数据包。
    byte[] buf = new byte[1024];
    DatagramPacket dp = new DatagramPacket(buf,buf.length);
    //3,使用接收方法将数据存储到数据包中。
    ds.receive(dp);//阻塞式的。
    //4,通过数据包对象的方法,解析其中的数据,比如,地址,端口,数据内容。
    String ip = dp.getAddress().getHostAddress();
    int port = dp.getPort();
    String text = new String(dp.getData(),0,dp.getLength());
    System.out.println(ip+":"+port+":"+text);
    }
    //5,关闭资源。
    // ds.close();

    ===============================

    聊天室:

    ChatDemo{}类:

    DatagramSocket send = new DatagramSocket();

    DatagramSocket rece = new DatagramSocket(10001);
    new Thread(new Send(send)).start();
    new Thread(new Rece(rece)).start();

    =======

    Send implements Runnable{}类:

    private DatagramSocket ds;
    public Send(DatagramSocket ds){this.ds = ds;}
    public void run() {
    try {
    BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
    String line = null;
    while((line=bufr.readLine())!=null){
    byte[] buf = line.getBytes();
    DatagramPacket dp = new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.1.255"),10001);
    ds.send(dp);
    if("886".equals(line))break;}
    ds.close();
    } catch (Exception e) {}
    }

    ======

    Rece implements Runnable{}类:

    private DatagramSocket ds;

    public Rece(DatagramSocket ds) {this.ds = ds;}

    public void run() {
    try {
    while (true) {

    // 2,创建数据包。
    byte[] buf = new byte[1024];
    DatagramPacket dp = new DatagramPacket(buf, buf.length);

    // 3,使用接收方法将数据存储到数据包中。
    ds.receive(dp);// 阻塞式的。

    // 4,通过数据包对象的方法,解析其中的数据,比如,地址,端口,数据内容。
    String ip = dp.getAddress().getHostAddress();
    int port = dp.getPort();
    String text = new String(dp.getData(), 0, dp.getLength());
    System.out.println(ip + "::" + text);
    if(text.equals("886")){System.out.println(ip+"....退出聊天室");}

    }
    } catch (Exception e) {}

    }

  • 相关阅读:
    Cypress系列(89)- Cypress.log 命令详解
    Cypress系列(88)- Cypress.spec 命令详解
    Cypress系列(87)- Cypress.browser 命令详解
    Cypress系列(86)- Cypress.version 命令详解
    【原】elastalert 配置使用
    【原】kubeadm 安装高可用集群初始化文件模板
    PageRank 算法-Google 如何给网页排名
    K 均值算法-如何让数据自动分组
    KNN 算法-实战篇-如何识别手写数字
    KNN 算法-理论篇-如何给电影进行分类
  • 原文地址:https://www.cnblogs.com/doyi111/p/10643438.html
Copyright © 2020-2023  润新知