1. UDP协议发送数据 和 接收数据

UDP协议发送数据:
  • 创建发送端的Socket对象
  • 创建数据,并把数据打包
  • 调用Socket对象的发送方法,发送数据包
  • 释放资源

 UDP协议接收数据:

      • 创建接收端的Socket对象
      • 创建数据包,接收数据(接收容器)
      • 调用Socket对象的接收方法,接收数据包
      • 解析数据包,并显示在控制台
      • 释放资源

2. 代码实现

(1)首先我们先写发送端的程序,如下:

 package com.himi.udpDemo;

 import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException; /**
*
* UDP协议发送数据:
* 1. 创建发送端的Socket对象
* 2. 创建数据,并把数据打包
* 3. 调用Socket对象的发送方法,发送数据包
* 4. 释放资源
*
*/
public class UdpSendDemo {
public static void main(String[] args) throws IOException {
//创建发送端的Socket对象,这里使用的UDP使用的客户端的Socket对象类是DatagramSocket.
//DatagramSocket:DatagramSocket()
DatagramSocket ds = new DatagramSocket(); //创建数据,并把数据打包
//DatagramPacket:此类表示数据报包
/**DatagramPacket(byte[] buf, int length, InetAddress address, int port)
** 构造数据报包,用来将长度为 length 的包发送到指定主机上的指定端口号。
*/
//创建数据
byte[] bytes = "风云雄霸天下,风云必胜. 风云合璧,摩柯无量. 圣心诀,玄武真功".getBytes();
//IP地址对象
InetAddress address = InetAddress.getByName("49.123.72.145");
//端口号
int port = 10086;
//数据打包
DatagramPacket dp = new DatagramPacket(bytes, bytes.length, address, port); //调用Socket对象的发送方法,发送数据包
//public void send(DatagramPacket p)
ds.send(dp); //释放资源
ds.close(); } }

(2)其次实现的是接收端的代码,如下:

 package com.himi.udpDemo;

 import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress; /**
*
* UDP协议接收数据:
* 1. 创建接收端的Socket对象
* 2. 创建数据包,接收数据(接收容器)
* 3. 调用Socket对象的接收方法,接收数据包
* 4. 解析数据包,并显示在控制台
* 5. 释放资源
*
*/ public class UdpReceiveDemo { public static void main(String[] args) throws IOException {
// 创建接收端的Socket对象
//DatagramSocket(int port):创建数据报套接字并将其绑定到本地主机上的指定端口
DatagramSocket ds = new DatagramSocket(10086); //创建数据包,接收数据(接收容器)
//DatagramPacket(byte[] buf, int length)
byte[] bytes = new byte[1024];
int length = bytes.length; DatagramPacket dp = new DatagramPacket(bytes, 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[] bys = dp.getData();
int len = dp.getLength();
String s = new String(bys,0,len); System.out.println("发送端"+IP+"的数据:"+s); //释放资源
ds.close(); } }

(3)运行:

-->先运行接收端(类似于先开启服务器)

-->再运行发送端,这个时候,上面的接收端控制台,就会显示发送端发送过来的数据,效果如下:

最新文章

  1. Oracle数据库该如何着手优化一个SQL
  2. LeetCode:Count and Say
  3. LINUX下PHP开启短标签short_open_tag支持
  4. linq to entity 获取项的集合总数
  5. PV UV IP含义及区别
  6. 8款JS框架比较
  7. YouTube视频代码总结
  8. MLlib-分类与回归
  9. JavaScript的原型
  10. byte为什么要与上0xff(转)
  11. layoutSubview触发时机
  12. linux仅修改文件夹权限;linux 分别批量修改文件和文件夹权限
  13. php SESSION入库的实现
  14. Cookie、Session和自定义分页
  15. (面试题)python面试题集锦-附答案
  16. 【RestTemplete】使用RestTemplete传Json或者 {} 报错--解决
  17. Liferay7 BPM门户开发之20: 理解Asset Framework
  18. Log4j rootLogger配置
  19. jmeter获取token并请求失败Internal authentication failed 400
  20. 有向图的强联通tarjan算法(判断是否为强联通模板)(hdu1269)

热门文章

  1. 构建简单的 C++ 服务组件,第 1 部分: 服务组件体系结构 C++ API 简介
  2. 不重复查询mysql
  3. 【HDOJ】2546 饭卡
  4. bzoj2125 3047
  5. word在线编辑\生成图片(包含截图与合并)
  6. 【转】Ubuntu下配置samba服务器--不错
  7. (转载)JavaScript中的原型和对象机制
  8. Java中重载和重写的区别
  9. GPU 的硬件基本概念,Cuda和Opencl名词关系对应
  10. ACM2031_进制转换(使用了递归,代码超少的啦!!)