• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

UDP通信原来不通过QQ、微信,还能这样聊天

武飞扬头像
遇安.YuAn
帮助1

UDP协议的特点:

UDP是一种无连接、不可靠传输的协议。

将数据源IP、目的地IP和端口以及数据封装成数据包,大小限制在64KB内,直接发送出去即可。

实现一发一收

注意:先要启动服务端,再启动客户端。不然会造成数据丢失!

客户端: 

  1.  
    import java.net.DatagramPacket;
  2.  
    import java.net.DatagramSocket;
  3.  
    import java.net.InetAddress;
  4.  
     
  5.  
    public class UDP_发送端 {
  6.  
    public static void main(String[] args) throws Exception {
  7.  
    //先要启动服务端,再启动客户端,不然会造成数据丢失
  8.  
    System.out.println("-----客户端启动-----");
  9.  
    //创建发送端对象,发送端自带默认的端口号
  10.  
    //DatagramSocket socket=new DatagramSocket();//采用默认端口号
  11.  
    DatagramSocket socket=new DatagramSocket(8786);//采用自己设定的端口号,但如果端口号已经被使用,则需要自己换一个端口号
  12.  
    //创建一个数据包对象封装数据
  13.  
     
  14.  
    /*
  15.  
    public DatagramPacket(byte buf[], int offset, int length,
  16.  
    InetAddress address, int port)
  17.  
    参数一:封装要发送的数据
  18.  
    参数二:发送数据的大小
  19.  
    参数三:服务端的主机IP地址
  20.  
    参数四:服务端的端口
  21.  
    */
  22.  
    byte [] buffer="这是发送端".getBytes();
  23.  
    DatagramPacket packet=new DatagramPacket(buffer,buffer.length, InetAddress.getLocalHost(),6666);
  24.  
    //发送数据出去
  25.  
    socket.send(packet);
  26.  
    //如果发送完毕,记得关闭
  27.  
    socket.close();
  28.  
    }
  29.  
    }
学新通

服务端: 

  1.  
    import java.net.DatagramPacket;
  2.  
    import java.net.DatagramSocket;
  3.  
    class UDP_接收端{
  4.  
    public static void main(String[] args) throws Exception {
  5.  
    //先要启动服务端,再启动客户端,不然会造成数据丢失
  6.  
    System.out.println("-----服务端启动-----");
  7.  
    //创建接收端对象,注册端口
  8.  
    DatagramSocket socket=new DatagramSocket(6666);
  9.  
    //创建一个数据包对象接收数据
  10.  
    byte []buffer=new byte[1024*64];
  11.  
    DatagramPacket packet=new DatagramPacket(buffer,buffer.length);
  12.  
    //等待接收数据
  13.  
    socket.receive(packet);
  14.  
    //取出数据
  15.  
    //读取多少倒出多少
  16.  
    int len=packet.getLength();
  17.  
    String str=new String(buffer,0,len);
  18.  
    System.out.println("接收到:" str);
  19.  
     
  20.  
    System.out.println(packet.getPort());//对方端口号
  21.  
    //关闭,释放资源
  22.  
    socket.close();
  23.  
    }
  24.  
    }
学新通

实现多发多收:

只要你和对方在同一个局域网,并且知道对方的端口号,你们便可以通过UDP相互通信

注意:这里的通信是指不通过QQ这些软件,从编译器上通过代码运行后来实现通信。 

客户端: 

  1.  
    import java.net.DatagramPacket;
  2.  
    import java.net.DatagramSocket;
  3.  
    import java.net.InetAddress;
  4.  
    import java.util.Scanner;
  5.  
    public class UDP_多发多收 {
  6.  
    public static void main(String[] args) throws Exception {
  7.  
    //先要启动服务端,再启动客户端,不然会造成数据丢失
  8.  
    System.out.println("-----客户端启动-----");
  9.  
    DatagramSocket socket=new DatagramSocket(8786);//采用自己设定的端口号,但如果端口号已经被使用,则需要自己换一个端口号
  10.  
    Scanner sc=new Scanner(System.in);
  11.  
    while (true) {
  12.  
    System.out.println("请输入你要发送的消息:");
  13.  
    String str=sc.nextLine();
  14.  
    if("exit".equals(str)){
  15.  
    System.out.println("离线成功!");
  16.  
    socket.close();//释放资源
  17.  
    break;
  18.  
    }
  19.  
    byte [] buffer=str.getBytes();
  20.  
    DatagramPacket packet=new DatagramPacket(buffer,buffer.length, InetAddress.getLocalHost(),6666);
  21.  
    //发送数据出去
  22.  
    socket.send(packet);
  23.  
    }
  24.  
    }
  25.  
    }
学新通

 服务端:

  1.  
    import java.net.DatagramPacket;
  2.  
    import java.net.DatagramSocket;
  3.  
    class UDP_接收端2{
  4.  
    public static void main(String[] args) throws Exception {
  5.  
    //先要启动服务端,再启动客户端,不然会造成数据丢失
  6.  
    System.out.println("-----服务端启动-----");
  7.  
    //创建接收端对象,注册端口
  8.  
    DatagramSocket socket=new DatagramSocket(6666);
  9.  
    //创建一个数据包对象接收数据
  10.  
    byte []buffer=new byte[1024*64];
  11.  
    DatagramPacket packet=new DatagramPacket(buffer,buffer.length);
  12.  
     
  13.  
    while (true) {
  14.  
    //等待接收数据
  15.  
    socket.receive(packet);
  16.  
    //取出数据
  17.  
    //读取多少倒出多少
  18.  
    int len=packet.getLength();
  19.  
    String str=new String(buffer,0,len);
  20.  
    System.out.println("接收到了来自:" packet.getAddress() "对方的端口号是:" packet.getPort() "的消息:" str);
  21.  
    }
  22.  
    }
  23.  
    }
学新通

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgfcgci
系列文章
更多 icon
同类精品
更多 icon
继续加载