java-----UDP---DatagramPacket类与DatagramSocket类

本文介绍了Java中实现UDP协议的数据报通信,主要涉及DatagramPacket和DatagramSocket类的使用。DatagramPacket用于打包数据,而DatagramSocket则用于发送和接收数据包。通过构造方法和关键方法的讲解,阐述了如何创建数据包并进行发送和接收操作。最后,给出了将字符串‘你好’发送到www.baidu.com的2016端口的代码示例。
摘要由CSDN通过智能技术生成

一、数据报通信

      java中通过两个类来实现UDP协议顶层的数据报:DatagramPacket对象是数据容器,DatagramSocket是用来发送和接受DatagramPacket的套接字。采用UDP通信机制下,在发送信息时,首先要将数据打包,然后将打包好的数据包发送目的地。在接收

信息时,首先接收别人发来的数据报,然后查看数据报中的内容。

二、DatagramPacket类

       要发送或接收数据报,需要用DatagramPacket类将数据打包,即用DatagramPacket类创建一个对象,称为数据包。

         重要的构造方法:

         DatagramPacket(byte[] buf,int length)   构造数据包对象,用来接收长度为length的数据包

         DatagramPacket(byte[] buf,int length,InetAddress address,int port)  构造数据包,用来将length长度的数据包发送到指定主机上的指定端口号

         DatagramPacket(byte[] buf,int offset,int length)

         DatagramPacket(byte[] buf,int offset,int length,InetAddress address,int port)

         DatagramPacket(byte[] buf,int offset,int length,SocketAddress address)

         DatagramPacket(byte[] buf,int length,SocketAddress address)

        常用方法:

        InetAddress getAddress()   返回某台机器的IP地址,此数据报是将要发往该主机或是从该主机接收到的

        byte[] getData()    返回数据缓冲区

        int getLength()    返回将要发送或是接收的数据包的数据长度

        SocketAddress getSocketAddress() 获取要将此包发送到的或是发出此数据报的远程主机的SocketAddress(通常为IP地址+端口号)

        void setAddress(InetAddress iaddr) 设置要将此数据报发往的那台机器的IP地址

        void setData(byte[] buf)  为此包设置数据缓冲区

三、DatagramSocket类

      DatagramSocket类是用来发送和接收数据包的套接字,负责将打包的数据包发送到目的地,或是从目的地接收数据包

         重要的构造方法

         DatagramSocket(int port)   创建数据报套接字并将其绑定到本地主机上的指定的端口

         常用方法

         void receive(DatagramPacket p)  从此套接字接收数据报包

         void send(DatagramPacket p)  从此套接字发送数据包

四、代码实现

 将“你好”封装成数据包,发送到目的主机“www.baidu.com”,端口号为2016上

byte buff[] = "你好".getByte();
InetAddress destAddress = InetAddress.getByName("www.baidu.com");
DatagramPacket dataPacket = new DatagramPacket(buff,buff.length,destAddress,2016);
DatagramSocket sendSocket = new DatagramSocket();
sendSocket.send(dataPacket);

接收外界发送到本机2016号端口的数据包

byte buff[] = new byte[8192];
DatagramPacket receivePacket = new DatagramPacket(buff,buff.length);
DatagramSocket receiveSocket = new DatagramSocket(2016);
receiveSocket.receive(receivePacket);
int length = receivePacket.getLength();
String message = new String(receivePacket.getData(),0,length);
System.out.println(message);




评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值