java UDP 编程

java UDP 编程,第1张

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


}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5082109.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-16
下一篇 2022-11-16

发表评论

登录后才能评论

评论列表(0条)

保存