JAVA--UDP传输

步骤概述

       DatagramSocketDatagramPacket

       建立发送端,接收端。

       建立数据包。

       调用Socket的发送接收方法。

       关闭Socket。

发送端与接收端是两个独立的运行程序。

常用方法

DatagramSocket类表示用来发送和接收数据报包的套接字。

DatagramSocket():构造数据报套接字并将其绑定到本地主机上任何可用的端口。

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

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

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

void close():关闭此数据报套接字。

 

DatagramPacket类表示数据报包。

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

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

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

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

int getLength():返回将要发送或接收到的数据的长度。

int getPort():返回某台远程主机的端口号,此数据报将要发往该主机或者是从该主机接收到的。

示例

客户端

/*
需求:通过udp传输方式,将一段文字数据发送出去。
定义一个udp发送端。
思路:
1.建立updsocket服务。
2.提供数据,并将数据封装到数据包中。
3.通过socket服务的发送功能,将数据包发出去。
4.关闭资源。
 
*/
import java.net.*;
class UdpSend{
	public static void main(String[] args)throws Exception{
		// 1.创建udp服务,通过DatagramSocket对象。
		DatagramSocket ds=new DatagramSocket (10001);	// 可以指定端口;
		
		// 2.确定数据,并封装成数据包。
		byte[] buf="udp demo...".getBytes();
		DatagramPacket dp=
		new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.0.106"),10000);
		
		// 3.通过socket服务,将已有的数据包发送出去,通过send()方法。
		ds.send(dp);
		
		// 4.关闭资源。
		ds.close();
	}
}

服务端

/*
需求:定义一个应用程序,用于接收udp协议传输的数据并处理。
定义一个udp接收端。
思路:
1.定义udpsocket服务。通常会监听一个端口。其实就是给这个接收网络应用程序定义数字标识。
	方便于明确那些数据过来该应用程序可以处理。
2.定义一个数据包,因为要存储接收到的字节数据。
因为数据包对象中有更多功能可以提取字节数据中的不同数据信息。
3.通过socket服务的receive()方法将收到的数据存入已定义好的数据包中。
4.通过数据包对象的特有功能。将这些不同的数据取出,打印在控制台上。
5.关闭资源。

*/
class UdpRece{
	public static void main(String[] args)throws Exception{
		//	1.创建udp socket服务,建立端点。只需要建立一次。
		DatagramSocket ds=new DatagramSocket(10000);	// 在while循环外,因为容易发生绑定异常(BindException),多次访问同一端口
		while(true){	// 一直开启服务端服务,但不会是死循环,因为recevie()是阻塞式方法
			// 2.定义数据包,用于存储数据。
			byte[] buf=new byte[1024];
			DatagramPacket dp=new DatagramPacket(buf,buf.length);
			
			//	3.通过服务的receive()方法收到数据存入数据包中。
			ds.receive(dp);	// 阻塞式方法
			
			//	4.通过数据包的方法获取其中的数据。
			String ip=dp.getAddress().getHostAddress();
			String data=new String(dp.getData(),0,dp.getLength());
			int port = dp.getPort();
			System.out.println(ip+"..."+data+"..."+port);
		}
		
		// 5.关闭资源。
		// ds.close();
	}
}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值