初识UDP协议传输和接收数据

简单的自我介绍

作为一个还在潜修学习Java的学生,这是我第一次学习Java,也是自己第一次写博文。谈不上分享技术,只是将自己目前学到的知识小结,希望和一些也和我一样正在学Java的同学分享交流,也敬请各位斧正!

一,UDP协议发送数据:

基础步骤:
1, 创建发送端Socket对象
2,创建数据,并把数据打包
3,调用Socket对象的发送方法send()发送数据包
4,释放资源

package time_2_25;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;

public class SendDemo {
public static void main(String[] args) throws IOException {
	//创建Socket对象
	DatagramSocket ds = new DatagramSocket();
	//创建数据
	byte[] bys = "Hello udp!".getBytes();
	
	//IP地址对象(此处模拟自己给自己发送消息。如果需要发送给别,更改ip为接收方的ip即可)
	InetAddress address = InetAddress.getByName("192.168.128.12");//ip可更改
	
	//端口(自定义,建议用10000以上)
	int port = 19225;
	
	//构造数据报包,用来将长度为length的包发送到指定主机上的指定端口号
     DatagramPacket dp = new DatagramPacket(bys, bys.length, address, port);
	//调用socket对象的发送方法发送数据包
	ds.send(dp);
	//释放资源
	ds.close();
}
}

二,UDP协议接收数据

基础步骤:
1, 创建接收端Socket对象
2,创建一个数据包(接收对象)
3,调用socket对象的接收方法receive()接收数据
4,解析数据,并在控制台显示
5,释放资源

package time_2_25;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

public class ReceiveDemo {
public static void main(String[] args) throws IOException{
	
	//创建接收端Socket对象
	//DatagramSocket(int port),创建数据报套接字并将其绑定到本地主机上的指定端口
	DatagramSocket ds = new DatagramSocket(19225);
	
	//创建一个数据包用于接收
	//DatagramPacket(byte[] buf,int length)
	byte[] bys = new byte[1024];
	int length = bys.length;
	DatagramPacket dp = new DatagramPacket(bys, length);
	
	//调用DatagramSocket对象的receive()方法接收数据
	ds.receive(dp);//阻塞式
	
	//获取ip地址
	InetAddress address = dp.getAddress();
	String ip = address.getHostAddress();
	
	//解析数据包,并显示在控制台
	//获取数据缓冲区
	byte[] bys2 = dp.getData();
	//获取数据实际长度
	int len = dp.getLength();
	
	//转为字符串
	String s = new String(bys2,0,len);
	
	System.out.println(ip+"发来消息:"+s);
	
	//释放资源
	ds.close();
}
}

三,几个注意事项和说明:

1,由于模拟的是自己给自己发送消息,因此在编译器上运行时,需要先运 行ReceiveDemo再运行SendDemo才能看到效果。因为DatagramSocket 中的receive方法在接收到数据报之前一直处于阻塞,所以此时在运行SendDemo发送数据,就可以看到效果。

2,为什么自己定义的端口号建议10000以上?
端口的使用有一定规则:
TCP与UDP段结构中端口地址都是16比特,可以有在0—65535范围内的端口号。对于这65536个端口号有以下的使用规定:
(1)端口号小于256的定义为常用端口,服务器一般都是通过常用端口号来识别的。任何TCP/IP实现所提供的服务都用1—1023 · 之间的端口号,是由IANA来管理的;
(2)客户端只需保证该端口号在本机上是惟一的就可以了。客户端口号因存在时间很短暂又称临时端口号;
(3)大多数TCP/IP实现给临时端口号分配1024—5000之间的端口号。大于5000的端口号是为其他服务器预留的。
因此自定义使用10000以上65535以下的端口号一般不会碰到端口号被占用的情况。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值