先写接受,写完接受后,先执行接受程序,再执行发送程序!!!!

package wangluobiancheng;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;

public class Receiver {

    public static void main(String[] args) throws Exception {
//        创建一个长度为1024的字节数组,用于接受数据
        byte[] buf = new byte[1024];
//        定义一个DatagramSocket对象,监听的端口号为8954。(DatagramSocket类似于码头),
//        在创建接收端的DatagramSocket对象时,必须指明一个端口号,这样就可以监听指定的端口
        DatagramSocket ds = new DatagramSocket(8954);
//        定义一个DatagramPacket对象,用于接受数据。(DatagramPacket类似于集装箱),
//        (buf,buf.length)封装数据的字节数组和数据的大小,没有指定IP地址和端口号,很明显,只能用于接收端。
        DatagramPacket dp = new DatagramPacket(buf,buf.length);
        System.out.println("等待接受数据");
//        该方法用于将接收到的数据填充到DatagramPacket数据包中,在接受到数据之前会一直处于阻塞状态(等待接受数据,如果没有数据则会阻塞),只有当接受到数据包时,该方法才会返回
        ds.receive(dp);
//        getData()方法用于返回将要接受或者将要发送的数据,如果是发送端的DatagramPacket对象,就返回将要发送的数据,如果是接受端的就返回接收到的数据。
//        getAddress()方法用于返回发送端或者接收端的IP地址,如果是发送端的DatagramPacket对象,就返回就接收端的IP地址,反之,就返回发送端的IP地址
//        getHostAddress()得到字符串格式的原始IP地址
//        getPort()方法用于返回发送端或者接收端的端口号,如果是发送端的DatagramPacket对象,就返回接受端的端口号,反之,就返回发送端的端口号
//        获取接收到的数据,包括数据内容、长度、发送端的IP地址和端口号
        String str = new String(dp.getData(),0,dp.getLength())+"from"+dp.getAddress().getHostAddress()+":"+dp.getPort();
        System.out.println(str);
        ds.close();//释放资源
    }

}

 

后写发送

package wangluobiancheng;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.UnknownHostException;

public class Sender {
//    UDP面向无连接的协议,UDP通信就好比于两个码头间发运货物,使用集装箱装货,DatagramPacket相当于集装箱,DatagramSocket相当于码头
    public static void main(String[] args) throws Exception {
//        创建一个DatagramSocket(码头)对象,端口3000,
//        这里是发送端,可以不指定端口号,之所以指定了,是为了每次运行时,接收端的getPort()方法的返回返回值都是一致的
        DatagramSocket ds = new DatagramSocket(3000);
        String str = "HelloWorld";
        byte[] arr = str.getBytes();//将定义的字符串转为字节数组
//        InetAddress.getByName("localhost"),localhost表示本地计算机,也就是我们的主机,因为我们的发送端和接收端都在自己的主机上创建的。
//        创建一个要发送的数据包dp,DatagramPacket类似于集装箱,数据包包括发送的数据,数据的长度,接收端的IP地址和端口号
//        8954是接受端的端口
        DatagramPacket dp = new DatagramPacket(arr,arr.length,InetAddress.getByName("localhost"),8954);
        System.out.println("发送信息");
        ds.send(dp);//发送数据
        ds.close();//释放资源
    }

}

这个是执行后接受文件执行的运行结果

UDP发送和接受消息

点这个按钮UDP发送和接受消息

按下标UDP发送和接受消息

就可以更换执行结果的窗口

这个是发送信息的文件执行后的结果

UDP发送和接受消息

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-08-21
  • 2022-12-23
  • 2022-12-23
  • 2021-07-09
  • 2022-12-23
  • 2021-12-29
猜你喜欢
  • 2022-03-09
  • 2021-08-22
  • 2022-12-23
  • 2021-05-18
  • 2021-07-01
  • 2021-09-24
  • 2021-07-31
相关资源
相似解决方案