1、DatagramPacket

  (1)JDK中提供了一个DatagramPacket类,该类的实例对象就相当于一个集装箱,用于封装UDP通信中发送或者接收的数据;

  (2)在创建发送端和接收端的DatagramPacket对象时,使用的构造方法有所不同,接收端的构造方法只需要接收一个字节数组来存放接收到的数据,而发送端的构造方法不但要接收存放了发送数据的字节数组,还需要指定发送端IP地址和端口号;

2、DatagramSocket

  (1)DatagramSocket类的作用就类似于码头,使用这个类的实例对象就可以发送和接收DatagramPacket数据包;

3、UDP网络程序

  (1)要实现UDP通信需要创建一个发送端程序和一个接收端程序,很明显,在通信时只有接收端程序先运行,才能避免因发送端发送的数据无法接收,而造成数据丢失。因此,首先需要来完成接收端程序的编写;

  (2)UDP完成数据的接收

 import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress; /*
* UDP接收端
*
* 1,创建DatagramSocket对象
* 2,创建DatagramPacket对象
* 3,接收数据存储到DatagramPacket对象中
* 4,获取DatagramPacket对象的内容
* 5,释放流资源
*/
public class UDPReceive {
public static void main(String[] args) throws IOException {
// 1,创建DatagramSocket对象,并指定端口号
DatagramSocket receiveSocket = new DatagramSocket(12306);
// 2,创建DatagramPacket对象, 创建一个空的仓库
byte[] buffer = new byte[1024];
DatagramPacket dp = new DatagramPacket(buffer, 1024);
// 3,接收数据存储到DatagramPacket对象中
receiveSocket.receive(dp);
// 4,获取DatagramPacket对象的内容
// 谁发来的数据 getAddress()
InetAddress ipAddress = dp.getAddress();
String ip = ipAddress.getHostAddress();// 获取到了IP地址
// 发来了什么数据 getData()
byte[] data = dp.getData();
// 发来了多少数据 getLenth()
int length = dp.getLength();
// 显示收到的数据
String dataStr = new String(data, 0, length);
System.out.println("IP地址:" + ip + "数据是" + dataStr);
// 5,释放流资源
receiveSocket.close();
}
}

  (3)UDP完成数据的发送

 import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress; /*
* 发送端
* 1,创建DatagramSocket对象
* 2,创建DatagramPacket对象,并封装数据
* 3,发送数据
* 4,释放流资源
*/
public class UDPSend {
public static void main(String[] args) throws IOException {
// 1,创建DatagramSocket对象
DatagramSocket sendSocket = new DatagramSocket();
// 2,创建DatagramPacket对象,并封装数据
// public DatagramPacket(byte[] buf, int length, InetAddress address,
// int port)
// 构造数据报包,用来将长度为 length 的包发送到指定主机上的指定端口号。
byte[] buffer = "hello,UDP".getBytes();
DatagramPacket dp = new DatagramPacket(buffer, buffer.length,
InetAddress.getByName("192.168.0.4"), 12306);
// 3,发送数据
// public void send(DatagramPacket p) 从此套接字发送数据报包
sendSocket.send(dp);
// 4,释放流资源
sendSocket.close();
}
}

  运行结果:

  

最新文章

  1. JAva使用DOM读取XML数据(解析)
  2. leveldb源码分析--Iterator遍历数据库
  3. Java 正则表达式学习总结和一些小例子
  4. UI-UIImageView和Image的区别
  5. RAD XE10 Seattle
  6. java.lang.UnsupportedClassVersionError: Bad version number in .class file 解决办法
  7. phantomjs 渲染
  8. Spring整合Hibernate 二 - 声明式的事务管理
  9. J2SE知识点摘记(二十五)
  10. RESTful API Design With NodeJS & Restify
  11. Python: 列表注意细节与元组的基本用法
  12. 大数据开发 | MapReduce介绍
  13. hibernate_xml映射exception
  14. Vue实现树形下拉框
  15. vue-cli创建第一个项目(用git bash解决上下键移动选择问题)
  16. Java.WeakReference-SoftReference-PhantomReference
  17. Laya鼠标事件阅读
  18. OpenGL ES 2.0 Shader 调试新思路(二): 做一个可用的原型
  19. Java程序员进击书籍推荐
  20. svn up 排除目录更新

热门文章

  1. linux 网络编程-基础篇01
  2. TeX中的引号
  3. java dom4j 读写XML
  4. bzoj2253
  5. STM32:TIMER输出比较模式-PWM
  6. EasyUI 之 easyui-datagrid 字段格式化
  7. shopnc学习
  8. 上传Android代码到gerrit服务器
  9. Squirrel的安装(windows上Phoneix可视化工具)
  10. Linq学习(一)-初涉Linq