java UDP 编程

java UDP 编程

DatagramSocket的构造器。

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();
	}


}
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值