
基于UDP的网络编程,DatagramSocket和DatagramPacket
发布日期:2022-02-01 14:28:21
浏览次数:32
分类:技术文章
本文共 1435 字,大约阅读时间需要 4 分钟。
1.概念
User Datagram Protocol的简称,用户数据包协议,提供面向事务的简单不可靠信息传送服务
特点:
a.不安全 b.无连接 c.效率高 d.UDP传输数据时是有大小限制的,每个被传输的数据报必须限定在64KB之内
2. DatagramSocket和DatagramPacket
DatagramSocket: 数据报套接字,表示用来发送和接收数据报包的套接字。
DatagramPacket:此类表示数据报包。每个包最大64kb 其中DatagramSocket中的receive()方法和TCP中的ServerSocket中的accept()方法都属于阻塞方法。
代码案例,双方收发文字消息:
//接收者:public class Receiver { public static void main(String[] args) throws Exception { DatagramSocket ds=new DatagramSocket(8888);//接收方必须指定具体端口号 System.out.println("准备接受..."); byte[] buf=new byte[1024*8]; DatagramPacket dp=new DatagramPacket(buf,buf.length);//传输的数据报包,最大64kb, ds.receive(dp);//这里接收字节数组中数据 String string=new String(dp.getData(),0,dp.getLength());//将接受的数据包转换成字符串,从0开始,长度是数据包长度 System.out.println(string);//打印字符串数据 System.out.println("发件地址是"+dp.getAddress());//这里还可以通过数据报包来得到发送方地址 ds.close();//关闭 System.out.println("接收完毕"); }}//发送方public class Sender { public static void main(String[] args) throws Exception { DatagramSocket ds=new DatagramSocket();//发送方可以不指定端口号 Scanner sc=new Scanner(System.in);//控制台输入发送的消息 String date = sc.next(); DatagramPacket dp=new DatagramPacket(date.getBytes(),date.getBytes().length, InetAddress.getLoopbackAddress(),8888);//数据包中只能传输字节,要将输入的字符串传换成字节发送,在加上接收方的端口号 ds.send(dp);//发送数据报包 ds.close(); System.out.println("发送成功"); }}注意:启动的时候,先启动接收方,在启动发送方。
转载地址:https://blog.csdn.net/shunshizhen120412/article/details/99488446 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
表示我来过!
[***.240.166.169]2023年05月10日 01时38分23秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
最新文章
CC2640编译stack成功编译app失败的问题解决方法
2019-05-16 12:30:10
Linux移植E20模块驱动步骤解析
2019-05-16 12:30:09
ubuntu如何安装openjdk8
2019-05-16 12:30:09
MT7688开发之EC20模块移植编译错误问题解决
2019-05-16 12:30:08
nrf52832进入DFU升级之前卡死问题
2019-05-16 12:30:08
如何解决CC2640用IAR下载固件出现Fatal error: Failed to load the CPU core driver Session aborted的问题
2019-05-16 12:30:07
CC2640蓝牙丢包问题(notify发送返回0x16:blePending)
2019-05-16 12:30:07
esp-idf版本更新及切换方法
2019-05-16 12:30:06
ESP32之软件SPI驱动及SPI、HSPI和VSPI的理解
2019-05-16 12:30:06
Java Class对象与反射机制
2019-05-16 12:30:06
Git中tag标签的使用
2019-05-16 12:30:05
Java内存模型及volatile
2019-05-16 12:30:04
Java线程等待唤醒机制(加深理解)
2019-05-16 12:30:03
源码分析 — Activity的启动流程
2019-05-16 12:30:03
Android 查看并解决重复依赖
2019-05-16 12:30:02
从源码解析-Activity的setContentView是怎么加载XML视图的
2019-05-16 12:30:01
从源码的角度解析Handler、Looper、Message和MessageQueue
2019-05-16 12:30:00
Android系统启动流程—— init进程zygote进程SystemServer进程启动流程
2019-05-16 12:30:00
从Zygote说到View——Zygote的启动流程及运行机制
2019-05-16 12:29:59
深入理解 Android 中的各种 Context
2019-05-16 12:29:58