我定义了接收端和发送端两个类,代码如下:
接收端:
- package net.udp;
- import java.io.IOException;
- import java.net.DatagramPacket;
- import java.net.DatagramSocket;
- import java.net.SocketException;
- public class UDPReceiver {
- public static void main(String[] args) throws IOException {
- // TODO Auto-generated method stub
- /*
- * 建立UDP的接收端
- * 思路:
- * 1、必须有UDP的端点,socket
- * 2、接收数据,并解析数据
- * 3、将数据打印出来,并结束接收动作
- */
- System.out.println("UDP接收端开启。。。。");
- //1、创建一个UDP的端点。注意:接收端一定要明确具体的端口,否则收不到数据
- DatagramSocket ds=new DatagramSocket();
- //2、接收数据,一般使用socket服务的动作完成,将数据存储到数据包对象中
- byte[] buf=new byte[1024];
- DatagramPacket dp=new DatagramPacket(buf,buf.length);
- ds.receive(dp);
- //3、通过数据包对象的方法对数据进行解析
- String ip=dp.getAddress().getHostAddress();
- int port=dp.getPort();
- String text=new String(dp.getData(),0,dp.getLength());
- System.out.println("ip:"+ip+";port:"+port+";"+text);
- ds.close();
- System.out.println("UDP接收端关闭");
- }
- }
复制代码
发送端:
- package net.udp;
- import java.io.IOException;
- import java.net.DatagramPacket;
- import java.net.DatagramSocket;
- import java.net.InetAddress;
- import java.net.SocketException;
- import java.net.UnknownHostException;
- public class UDPSender {
- public static void main(String[] args) throws SocketException, IOException {
- // TODO Auto-generated method stub
- /*
- * 需求:创建一个UDP发送端 思路: 1、先创建UDP端点,也就是UDP的socket 2、将数据封装成数据包
- * 3、通过UDP的端点将数据包发送出去
- */
- System.out.println("UDP发送开始》》》》");
- // 1、创建socket
- DatagramSocket ds = new DatagramSocket(9527);
- // 2、将数据封装成数据包
- String str = "UDP发送数据演示";
- byte[] buf = str.getBytes();
- // 2.1 创建数据包对象
- DatagramPacket dp = new DatagramPacket(buf, buf.length,
- InetAddress.getByName("localhost"), 10000);
- //3、使用UDP的socket服务将数据包发送出去
- ds.send(dp);
- //4、关闭资源:
- ds.close();
- System.out.println("《《《UDP发送结束");
- }
- }
复制代码
接收端的DatagramSocket的9527端口是什么意思啊?不是已经定义了10000端口吗?为什么写9527也可以
接收到?这两个端口有什么区别呢? |