Java中通过UDP协议发送和接受数据
2016-02-18 13:54
771 查看
UDP(User Data Protocol,用户数据报协议)是与TCP相对应的协议。它是面向非连接的协议,它不与对方建立连接,而是直接就把数据包发送过去!
UDP适用于一次只传送少量数据、对可靠性要求不高的应用环境。正因为UDP协议没有连接的过程,所以它的通信效率高;但也正因为如此,它的可靠性不如TCP协议高。QQ就使用UDP发消息,因此有时会出现收不到消息的情况。
[align=left]创建发送端Socket对象——DatagramSocket[/align]
[align=left]创建数据并将数据打包到DatagramPacket对象[/align]
[align=left]通过Socket发送[/align]
[align=left]释放相关资源[/align]
发送处理代码:
[align=left]创建接受端Socket对象——DatagramSocket[/align]
[align=left]创建包DatagramPacket对象(数据接收容器)[/align]
[align=left]调用接受方法接受数据[/align]
[align=left]解析数据包对象,取出接受到的信息[/align]
[align=left]释放资源[/align]
接受处理代码:
运行:
先运行接收端,让程序监听8081端口,然后运行发送端发送数据到本机(localhost)的8081端口。
之后会发现在接收端的控制台打印出 ‘hello UDP ’的内容。
UDP适用于一次只传送少量数据、对可靠性要求不高的应用环境。正因为UDP协议没有连接的过程,所以它的通信效率高;但也正因为如此,它的可靠性不如TCP协议高。QQ就使用UDP发消息,因此有时会出现收不到消息的情况。
一、UDP协议发送数据
发送处理过程:[align=left]创建发送端Socket对象——DatagramSocket[/align]
[align=left]创建数据并将数据打包到DatagramPacket对象[/align]
[align=left]通过Socket发送[/align]
[align=left]释放相关资源[/align]
发送处理代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | public class TestUDPSend { public static void main(String[] args) { String data="hello UDP"; DatagramSocket datagramSocket=null; try { //实例化套接字,并指定发送端口 datagramSocket=new DatagramSocket(8080); //指定数据目的地的地址,以及目标端口 InetAddress destination=InetAddress.getByName("localhost"); DatagramPacket datagramPacket= new DatagramPacket(data.getBytes(), data.getBytes().length,destination,8081); //发送数据 datagramSocket.send(datagramPacket); } catch (SocketException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally{ datagramSocket.close(); } } } |
二、UDP协议接收数据
接受处理过程:[align=left]创建接受端Socket对象——DatagramSocket[/align]
[align=left]创建包DatagramPacket对象(数据接收容器)[/align]
[align=left]调用接受方法接受数据[/align]
[align=left]解析数据包对象,取出接受到的信息[/align]
[align=left]释放资源[/align]
接受处理代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | public class TestUDPReceive { public static void main(String[] args) { DatagramSocket datagramSocket=null; try { //监视8081端口的内容 datagramSocket=new DatagramSocket(8081); byte[] buf=new byte[1024]; //定义接收数据的数据包 DatagramPacket datagramPacket=new DatagramPacket(buf, 0, buf.length); datagramSocket.receive(datagramPacket); //从接收数据包取出数据 String data=new String(datagramPacket.getData() , 0 ,datagramPacket.getLength()); System.out.println(data); } catch (SocketException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { datagramSocket.close(); } } } |
先运行接收端,让程序监听8081端口,然后运行发送端发送数据到本机(localhost)的8081端口。
之后会发现在接收端的控制台打印出 ‘hello UDP ’的内容。
相关文章推荐
- Java中通过UDP协议发送和接受数据
- java判断字符串包含某个字符段
- Java开发中的23种设计模式详解(转)
- Java线程(九):Condition-线程通信更高效的方式
- 2、修改MyEclipse中生成的模板servlet的方法
- Java线程(八):锁对象Lock-同步问题更完美的处理方式
- eclipse 使用mvn模块化开发
- Java对象的强、软、弱和虚引用
- java 排序算法
- Java并发编程:volatile关键字解析(转)
- 基于Struts2的验证码程序
- Java 反射
- Java线程(七):Callable和Future
- Java线程(六):线程池
- 第三章 类文件结构与javap的使用
- win7安装Genymotion 和 virtualBox eclipse插 使用离线ova 附下载
- RxJava 详解
- 1、MyEclipse的常用配置
- Java线程(五):Timer和TimerTask
- Java线程(四):线程中断、线程让步、线程睡眠、线程合并