UDP传输

两个类:DatagramSocket与DatagramPacket(具体看API)

  A:建立发送端,接收端。

  B:建立数据包。

  C:调用Socket的发送接收方法。

  D:关闭Socket。

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

UDP传输-发送端思路

  UDP发送数据:
    A:创建Socket发送端对象
    B:创建数据报包(把数据打包)
    C:调用Socket对象发送数据报包
    D:释放资源(底层是IO流)

UDP传输-发送端代码

 public static void main(String[] args) throws IOException {
// A:创建发送端Socket对象
// DatagramSocket():此类表示用来发送和接收数据报包的套接字。
DatagramSocket ds = new DatagramSocket(); // B:创建数据,并把数据打包
// DatagramPacket(byte[] buf, int length, InetAddress address, int port)
// 创建数据
byte[] bys = "UDP发送端".getBytes();
// 数据长度
int length = bys.length; // 创建IP地址对象
InetAddress address = InetAddress.getByName("172.19.xx.xx"); // 创建端口
int port = 10010; //把数据进行打包
DatagramPacket dp = new DatagramPacket(bys,length,address,port); // C:调用Socket对象的发送方法发送数据包
// public void send(DatagramPacket p) 数据报包用来实现无连接包投递服务
ds.send(dp); //D:释放资源
ds.close();
} }

UDP传输-接收端思路

  UDP接收数据:
    A:创建Socket接收端对象
    B:创建一个数据报包来接收数据(创建容器)
    C:调用Socket对象的方法来接收数据报包
    D:解析数据包(byte转换成String),并打印在控制台
    E:释放资源

UDP传输-接收端代码

 public class ReceiveDemo {
public static void main(String[] args) throws IOException {
// 创建接收端Socket对象
// DatagramSocket(int port)
DatagramSocket ds = new DatagramSocket(10010); // 创建一个数据包(接收容器)
// DatagramPacket(byte[] buf, int length)
byte[] bys = new byte[1000];
int length = bys.length;
DatagramPacket dp = new DatagramPacket(bys, length); // 调用Socket对象的接收方法接收数据
// public void receive(DatagramPacket p)
ds.receive(dp); // 阻塞式 // 解析数据包,并显示在控制台
// 获取对方的ip
// public InetAddress getAddress()
InetAddress address = dp.getAddress();
String ip = address.getHostAddress();
// public byte[] getData():获取数据缓冲区
// public int getLength():获取数据的实际长度
byte[] bys2 = dp.getData();
int len = dp.getLength();
String s = new String(bys2, 0, len);
System.out.println(ip + "传递的数据是:" + s); // 释放资源
ds.close();
}
}

注意:因为UDP接收端是阻塞式接收,所以先启动接收端,再启动发送端。

UDP协议发送和接收数据的图解:

最新文章

  1. 机器指令翻译成 JavaScript —— 终极目标
  2. Node出错导致运行崩溃的解决方案
  3. Quartz CronTrigger最完整配置说明
  4. Linux系统添加硬盘设备(磁盘分区-格式化-挂载-使用)
  5. [ASP.Net]TableLayoutPanel的使用
  6. mysql 基础知识
  7. iOS-iPhone系统版本号-iPhone App版本号
  8. C#解决MDI窗体闪屏的方法
  9. Android 系统api实现定位及使用百度提供的api来实现定位
  10. Python倒计时器(转)
  11. [河南省ACM省赛-第三届] 聪明的kk (nyoj 171)
  12. windows矢量字体点阵数据的提取(转)
  13. LPC1788的spi使用
  14. SaltStack 与 Python 程序的结合
  15. 2017年Unity游戏开发视频教程(入门到精通)
  16. 洛谷P1032 字串变换-题解
  17. phpredis Redis集群 Redis Cluster
  18. jar包获取资源文件
  19. Eclipse和Myeclipse的Properties插件(解决properties文件乱码)
  20. 转: Centos安装gcc及g++

热门文章

  1. ReCap 360 photo照片建模技术的又一个例子
  2. SharePoint 2010 匿名访问开启后不能访问Allitems.aspx或DisplayForm.aspx
  3. 微信公众号里打开链接下载APP
  4. 【CoreData】 简单地使用
  5. iOS 跳转到App Store下载或评论
  6. Android对应用程序签名
  7. symfony2 controller
  8. Java内存泄露简述
  9. 0008《SQL必知必会》笔记04-子查询、联接与组合查询
  10. 【转】MySQL 数据库存储引擎