UDP传输:
1. 创建UDP的socket服务对象 DatagramSocket,建立发送端,接收端。
2. 创建UDP的数据包对象 DatagramPacket,将要传输的数据封装到数据包中。
3. 调用Socket的发送接收方法。
4. 关闭Socket。
发送端与接收端是两个独立的运行程序。
Ⅰ,DatagramSocket
DatagramSocket有如下构造方法:
1,DatagramSocket():构造数据报套接字并将其绑定到本地主机上任何可用的端口。
2,DatagramSocket(intport):创建数据报套接字并将其绑定到本地主机上的指定端口。
3,DatagramSocket(intport, InetAddress laddr):创建数据报套接字,将其绑定到指定的本地地址。即指定网卡发送和接收数据.
如果在创建DatagramSocket对象时,没有指定网卡的IP 地址,在发送数据时,底层驱动程序会自动选择一块网卡去发送,在接收数据时,会接收所有的网卡收到的与端口一致的数据.
发送信息时,可以不指定端口号,接收信息时,要指定端口号,因为要接收指定的数据.
发送数据使用DatagramSocket.send(DatagramPacketp)方法,接收数据使用DatagramSocket.receive(DatagramPacket p)方法.
Ⅱ,DatagramPacket
DatagramPacket类有如下构造方法:
1,DatagramPacket(byte[]buf, int length):构造 DatagramPacket,用来接收长度为length的数据包。
2,DatagramPacket(byte[]buf, int length, InetAddress address, int port):构造数据报包,用来将长度为length的包发送到指定主机上的指定端口号。
接收数据时使用第一种构造方法,发送数据时使用第二种构造方法.
1.3,InetAddress
Java中对IP地址进行包装的类,
DatagramPacket.getAddress()可以获取发送或接收方的IP地址.DatagramPacket.getPort()可以获取发送或接收方的端口.
发送端 示例:
在发送端,要在数据包对象中明确目的地IP及端口。
DatagramSocket ds = new DatagramSocket();
byte[] by = “hello,UDP”.getBytes();
DatagramPacket dp = new DatagramPacket(by,0,by.length,
InetAddress.getByName(“127.0.0.1”),10000);
ds.send(dp);
ds.close();
接收端:
在接收端,要指定监听的端口。
DatagramSocket ds = new DatagramSocket(10000);
byte[] by = new byte[1024];
DatagramPacket dp = new DatagramPacket(by,by.length);
ds.receive(dp);
String str = new String(dp.getData(),0,dp.getLength());
System.out.println(str+"--"+dp.getAddress());
ds.close(); |