DatagramSocket(int port, InetAddress laddr):创建一个DatagramSocket实例,并将该对象绑定到指定IP地址、指定端口。
//都早localhost内测试 //发送端,不用着急加入数据,将数据放在packet里 DatagramSocket socket = new DatagramSocket(); //接收端 DatagramSocket socket = new DatagramSocket(9090);收发函数
一旦得到了DatagramSocket实例之后,就可以通过如下两个方法来接收和发送数据。
receive(DatagramPacket p):从该DatagramSocket中接收数据报。
send(DatagramPacket p):以该DatagramSocket对象向外发送数据报。
DatagramPacket由上面两个函数的参数可以看出,并不能通过首发函数直接进行数据的传输,需要借助DatagramPacket存储数据,进而传输
DatagramPacket(byte[] buf, int offset, int length, InetAddress address, int port):创建一个用于发送的DatagramPacket对象,指定发送buf字节数组中从offset开始,总共length个字节,目的ip地址address, 目的端口号port。
//发送端 // 创建一个发送数据的DatagramPacket对象 DatagramPacket packet = new DatagramPacket(buf, length, address, port); // 发送数据报 socket.send(packet); //接收端 // 创建一个接收数据的DatagramPacket对象 DatagramPacket packet=new DatagramPacket(buf, 256); // 接收数据报 socket.receive(packet);获取发送者信息
UDP面向非连接的,但是在接收端,程序可以调用DatagramPacket的如下3个方法来获取发送者的IP地址和端口。
1.InetAddress getAddress():当程序准备发送此数据报时,该方法返回此数据报的目标机器的IP地址;当程序刚接收到一个数据报时,该方法返回该数据报的发送主机的IP地址。
2.int getPort():当程序准备发送此数据报时,该方法返回此数据报的目标机器的端口;当程序刚接收到一个数据报时,该方法返回该数据报的发送主机的端口。
3.SocketAddress getSocketAddress():当程序准备发送此数据报时,该方法返回此数据报的目标SocketAddress;当程序刚接收到一个数据报时,该方法返回该数据报的发送主机的SocketAddress。
public class UDPTest { //发送端 @Test public void send() throws IOException { //不用加参数,将数据放在packet里 DatagramSocket socket = new DatagramSocket(); //记录对方的ip地址和端口号 String str = "我是UDP"; byte[] data = str.getBytes(); InetAddress inet = InetAddress.getLocalHost(); //封装一个数据报 DatagramPacket packet = new DatagramPacket(data, 0, data.length, inet, 9090); //发送 socket.send(packet); socket.close(); } @Test public void receiver() throws IOException { DatagramSocket socket = new DatagramSocket(9090); byte[] buffer = new byte[100]; DatagramPacket packet = new DatagramPacket(buffer, 0, buffer.length); socket.receive(packet); //利用getData()得到接受的信息 System.out.println(new String(packet.getData(), 0, packet.getLength())); socket.close(); } }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)