项目总结22:Java UDP Socket数据的发送和接收

1-先上demo

  客户端(发送数据)

package com.hs.pretest.udp;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException; public class UDPClient { /**
* @description:数据发送方
* @param:[args]
* @return:void
* @date:2019/4/29
* @author:tangyj
* @remark:
* */
public static void main(String[] args) {
try {
DatagramSocket socket = new DatagramSocket();
String s = "这是测试数据";
byte[] buffer = s.getBytes();
DatagramPacket packet = new DatagramPacket(buffer, buffer.length, InetAddress.getByName("127.0.0.1"),10000);
socket.send(packet);
socket.close();
} catch (SocketException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} }
}

  服务端(接收数据)

package com.hs.pretest.udp;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException; public class UDPServer { /**
* @description:数据接收方
* @param:[args]
* @return:void
* @date:2019/4/29
* @author:tangyj
* @remark:
* */
public static void main(String[] args) {
try {
DatagramSocket socket = new DatagramSocket(10000);
byte[] buffer = new byte[65508];
DatagramPacket packet = new DatagramPacket(buffer, 0, buffer.length);
while(true){
socket.receive(packet);
String s = new String(packet.getData(),0,packet.getLength());
System.out.println(s);
}
} catch (SocketException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}

  

2-操作流程

  先启动服务端(服务端启动后,会一直处于响应状态);在启动客户端main方法,客户端每启动一次,服务端就会收到一次数据

3-DatagramSocket 

  Java使用DatagramSocket代表UDP协议的Socket,DatagramSocket本身只是码头,不维护状态,不能产生IO流,它的唯一作用就是接收和发送数据报,Java使用DatagramPacket来代表数据报,DatagramSocket接收和发送的数据都是通过DatagramPacket对象完成的。

4-什么是UDP

  UDP协议:全称是用户数据报协议,在网络中它与TCP协议一样用于处理数据包,是一种无连接的协议。

  UDP协议的特点:
(1)UDP无需建立连接。因此UDP不会引入建立连接的时延。试想如果DNS运行在TCP之上而不是UDP,则DNS的速度会满很多。HTTP使用TCP而不是UDP,是因为基于文本数据的Web网页来说,可靠性是至关重要的。
什么是DNS? DNS(Domain Name System,域名系统),万维网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。通过域名,最终得到该域名对应的IP地址的过程叫做域名解析(或主机名解析)。

(2)无连接状态。TCP需要在端系统中维护连接状态。此连接状态包括接受和发送缓存、拥塞控制参数和确认号和序号的参数。而UDP不维护连接状态,也不跟踪这些参数,因此某些专用应用服务器使用UDP时,一般都能支持更多的活动客户机。

(3)分组首部开销更小。TCP有20字节的的首部开销,而UDP只有8个字节的首部开销。

(4)应用层能够更地控制要发送的数据和发送时间。UDP没有拥塞控制,因此网络中的拥塞也不会影响主机的发送效率。某些实时应用(如直播)要求以稳定的速度发送,能容忍一些数据的丢失,但不允许有较大的时延,而UDP正好可以满足这些应用的需求。

(5)UDP常用于一次性传输比较小数据的网络应用,如DNS、SNMP等,因为对于这些应用,若采用TCP,则将为创建连接、维护和拆除而带来不小的开销。UDP也常用于多媒体应用(如IP电话、实时视频会议、流媒体等),显然,可靠数据传输对于这些应用来说并不是最重要的,但TCP的拥塞控制会导致数据出现较大的延迟,这是它们不可容忍的。

(6)UDP提供尽最大努力的交付,即不保证可靠交付,但并不意味着应用对数据的要求是不可靠的,因此需要维护传输可靠性的工作需要用户在应用层来完成。应用实体可以根据应用需求来灵活设计自己的可靠性机制。

(7)UDP是面向报文的的。发送方UDP对应用层交下来的报文,在添加首部后就交付给IP层,既不合并,也不拆分,而是保留这些报文的边界;接受方UDP对IP层交上来的用户数据报,在去除首部后就原封不动的交付给上层的应用进程,一次交付一个完整的报文,因此报文不可分割,是UDP数据处理的最小单位。

最新文章

  1. 虚拟机安装CentOS6.3两个问题
  2. [CareerCup] 4.3 Create Minimal Binary Search Tree 创建最小二叉搜索树
  3. 增量与位置PID
  4. javascript:history.go(-1);
  5. Plugin with id 'android-apt' not found
  6. C语言中对于结构的定义一般放在.h中还是.c中
  7. pyqt动态创建一系列组件并绑定信号和槽(网友提供学习)
  8. 关于tomcat和jetty的乱码问题
  9. Elasticsearch笔记六之中文分词器及自定义分词器
  10. 转载:Linux命令之查看文件占用空间大小-du,df
  11. UVA 1627 Team them up!
  12. SQL Server管理员必备技能之性能优化
  13. kafka---->kafka stream的使用(一)
  14. 爬虫 scrapy 笔记
  15. Python中For循环
  16. asp.net中HttpModule扩展的浅析
  17. JS 7路线图
  18. How to deal with "Could not find component on update server. Contact VMware Support or your system administrator." in Vmware.
  19. SpringBoot 统一响应格式
  20. ssh结合tar命令把远程文件拉回来或推过去(实现数据无落地推送)

热门文章

  1. Jquery 正则式验证
  2. node启动本地服务器
  3. selenium常用的模块
  4. python 获取中文拼音首字母;判断文件夹是否存在
  5. python 反射 hasattr getattr
  6. 201772020113李清华《面向对象程序设计(java)》第十二周学习总结
  7. nodejs 实现文件拷贝
  8. Java8 Base64
  9. --- rk3399/3288 系列平台接mipi 的dts 数据 panel-init-sequence = [] 命令的整法
  10. qt学习001之运行对话框