技术标签: udp 网络 # 网络 网络协议 tcp/ip 计算机网络
目录
UDP和TCP都是传输层的重要协议,也是学习网络的必备内容了,接下来这篇我们就详细分析一下这两者的内容,以及这两者的区别。
传输层是TCP/IP协议五层模型中的第四层。它提供了应用程序
间的通信,它负责数据能够从发送端传输到接收端。
其功能包括:一、格式化信息流;二、提供可靠传输。
UDP(UserDatagramProtocol)是一个简单的面向消息的传输层协议。
UDP 是无连接的,知道对方的IP和端口号直接进行传输就行,不需要建立连接
UDP 不可靠,没有任何可靠机制,即便发送失败也不会返回任何错误信息
UDP 面向数据报,发多少就收多少,原样发送,交给UDP的报文,UDP不会拆分或合并
UDP 没有拥塞控制,网络出现的拥塞不会使源主机的发送速率降低。
UDP 支持一对一、一对多、多对一和多对多的交互通信
缓冲区:只有接收缓冲区,没有发送缓冲区,接收缓冲区满了,多的直接丢弃
首部由四个字段构成,每个字段都是 2byte
UdpServer
package echo;
import java.net.*;
import java.util.Arrays;
import java.io.IOException;
public class UdpServer {
private static int PORT = 2222;
private DatagramSocket socket;
public UdpServer() throws SocketException {
socket = new DatagramSocket(PORT);
}
public void start() throws IOException {
byte[] bytes = new byte[2048];
DatagramPacket receivePacket = new DatagramPacket(bytes, bytes.length);
socket.receive(receivePacket);
System.out.printf("ClientAddress: %s\nClientPort: %d\n",
receivePacket.getAddress(),receivePacket.getPort());
System.out.println("ClientData:"+ new String(receivePacket.getData(),"utf-8"));
DatagramPacket sendPacket = process(receivePacket);
socket.send(sendPacket);
}
public DatagramPacket process(DatagramPacket packet){
DatagramPacket packet1 = new DatagramPacket(packet.getData(),packet.getLength(),
packet.getSocketAddress());
return packet1;
}
public static void main(String[] args) throws IOException {
UdpServer server = new UdpServer();
server.start();
}
}
UdpClient
package echo;
import java.net.*;
import java.io.IOException;
import java.util.Scanner;
public class UdpClient {
public void start() throws IOException {
DatagramSocket socket = new DatagramSocket();
byte[] bytes = new byte[2048];
System.out.println("请输入你想发送给服务器的信息:");
Scanner scanner = new Scanner(System.in);
String str =scanner.nextLine();
bytes = str.getBytes();
DatagramPacket sendPacket = new DatagramPacket(bytes,bytes.length,
new InetSocketAddress("localhost",2222));
socket.send(sendPacket);
DatagramPacket receivePacket = new DatagramPacket(new byte[2048],2048);
socket.receive(receivePacket);
System.out.println(new String(receivePacket.getData(),"utf-8"));
}
public static void main(String[] args) throws IOException {
UdpClient client = new UdpClient();
client.start();
}
}
TCP :有连接、可靠传输、面向字节流、全双工
保证可靠性:确认应答、超时重传、连接管理(三次挥手 四次握手)
提高效率:滑动窗口、流量控制、拥塞控制
文章浏览阅读925次,点赞27次,收藏9次。在这个部分总结了2019年到目前为止Java常见面试问题,取其面试核心编写成这份文档笔记,从中分析面试官的心理,摸清面试官的“套路”,可以说搞定90%以上的Java中高级面试没一点难度。本节总结的内容涵盖了:消息队列、Redis缓存、分库分表、读写分离、设计高并发系统、分布式系统、高可用系统、SpringCloud微服务架构等一系列互联网主流高级技术的知识点。(上述只是一个整体目录大纲,每个点里面都有如下所示的详细内容,从面试问题——分析面试官心理——剖析面试题——完美解答的一个过程)
文章浏览阅读8.7k次,点赞71次,收藏47次。可解释人工智能(Explainable Artificial Intelligence, XAI)是指智能体以一种可解释、可理解、人机互动的方式,与人工智能系统的使用者、受影响者、决策者、开发者等,达成清晰有效的沟通,以取得人类信任,同时满足监管要求。可解释性AI旨在提高人工智能系统的透明度和可理解性,使人们更好地理解AI的决策过程和原理。换言之,它追求AI决策背后的逻辑可被人理解,而非像黑盒子一样难以穿透。我们应当认识到可解释性AI的重要性。
文章浏览阅读870次。_html怎么select里面加a标签
文章浏览阅读1.1w次,点赞137次,收藏241次。在深度学习中常见的神经网络层的讲解_神经网络层
文章浏览阅读4k次,点赞4次,收藏13次。1.背景记录一次排查挖矿病毒的过程,其实都是按照阿里云官方教程操作,其中有些操作命令需要重点记录下,为后面生产环境做铺垫学习。2.现象近期测试服务器有黑客通过redis的6379端口入侵,然后阿里云发送报警信息,然后登录控制台发现以下报警信息:3.恶意文件删除原先还担心 /etc/sysguard 是不是系统自带的,后来,检查看了下其他机器/etc目录下,都无此文件。遂放心...
文章浏览阅读1.4k次。1、开启映射扫描1)在dao/mapper映射接⼝上添加@Mapper注解开启扫描 注:这种方式需要在每个接口上都添加此注解,有些麻烦2)在⼊⼝程序(包含main⽅法的java类)上添加@MapperScan("映射接口所在 包")注解扫描 注:此方法⼀劳永逸,只需要配置⼀次,后⾯面的接口上都不需要添加@Mapper注 解到此配置完成。可以直接在接口上写sql2.2..._springboot mybatis 映射列
文章浏览阅读849次。DecimalFormat的用法 Java 浮点数 Float Double 小数 格式化 保留小数位后几位等 1 DecimalFormat df = new DecimalFormat(); 2 double data = 1234.56789; 3 System.out.println("格式化之前的数字: " _decimalformat 转flot
文章浏览阅读4.1k次,点赞3次,收藏5次。_软路由aria2设置
文章浏览阅读9.2k次。下图是系统集成项目管理工程师2019年上半年下午的案例题,这里用来解析关键路径法的顺推和逆推备注:因为软考的项目管理考纲是采用PMP的教材,所以这里的解析是通用的专业术语解释:1,顺推,从A推到ID前面的有B,CB的最早结束时间为11,C的最早结束时间为13所以D的最早开始时间为13(取最大的),D的最早结束时间为13+7=20H前面的有D,E,FD的最早结...
文章浏览阅读168次。【代码】wordpress 显示文章日期。
文章浏览阅读4.1k次,点赞2次,收藏7次。系列文章目录文章目录前言1、C语言程序开发的步骤2、代码编辑(俗称写代码)3、编译及链接4、修改代码5. 调试及测试前言一步步,教你编写一个最简单的C语言程序,让你了解C语言是怎么样真正运行的。(演示在windows 10环境下的操作步骤。)1、C语言程序开发的步骤现在你肯定迫不及待地想要开始写程序了。这一节,我们来聊聊怎样把程序写出来,如何让它能够被计算机所理解,又怎样让它按照我们想要的效果运行。要让C语言代码成功运行,并达到预想的效果,一般需要经过以下步骤:代码编辑。编译及链接。_c语言程序编码运行,或其它语言开发工具、开发环境的应用与开发
文章浏览阅读778次。ConstraintsTime Limit: 1 secs, Memory Limit: 32 MB Description在Mars星球上,每个Mars人都随身佩带着一串能量项链。在项链上有N颗能量珠。能量珠是一颗有头标记与尾标记的珠子,这些标记对应着某个正整数。并且,对于相邻的两颗珠子,前一颗珠子的尾标记一定等于后一颗珠子的头标记。因为只有这样,通过吸盘(吸盘是Mars人吸收能_134sicily