当前位置: 首页 > news >正文

【网络通信三要素】TCP与UDP快速入门

网络通信三要素

1.什么是网络编程?

可以让设备中的程序,与网络上其他设备中的程序进行数据交互,从而实现网络通信的手段,java.net.*包下提供了网络编程的解决方案

2.基本的通信架构

基本的通信架构有2种形式:CS架构(Client客户端/Server服务端)、BS架构(Browser浏览器/Server服务端),无论是CS架构,还是BS架构的软件都必须依赖网络编程
在这里插入图片描述
在这里插入图片描述

3.网络通信三要素
  • IP:设备在网络中的地址,是唯一的标识

    IP(Internet Protocol),全称"互联网协议地址",也称"IP地址",是分配给上网设备的数字标签常见的IP分类为IPv4和IPv6

    IPv4是4个字节,32个bit位,点分十进制表示法;IPv6

    lIPv6:由128bit位(16个字节)组成,号称可以为地球每一粒沙子编号,IPv6分为8组,每组的每四位编码成一个十六进制位表示, 冒分十六进制表示法

    特殊的IP地址:127.0.0.1、localhost:代表本机IP,只会寻找当前所在的主机

    IP常用命令

    • ipconfig:查看本机IP地址
    • lping IP地址:检查网络是否连通

    InetAddress:该类对象代表ip地址

    InetAddress的常用方法如下:

    • public static InetAddress getLocalHost:获取本机IP,会以一个 InetAddress的对象返回
    • public static InetAddress getByName(String host):根据ip地址或者域名,返回一个 InetAddress对象
    • public String getHostName():获取ip地址对象对应的主机名
    • public String getHostAddress():获取ip地址对象中的ip地址信息
    • public boolean isReachable(int timeout):在指定毫秒内,判断主机与该ip对应的主机是否能连通
  • 端口:应用程序在设备中的唯一标识,用两个字节表示,范围是0到65535

    分类

    • 周知端口:0-1023,被预先定义的知名应用占用(如:HTTP占用80,FTP占用21)
    • 注册端口:1024-49151,分配给用户进程或某些应用程序
    • 动态端口:49152-65535,之所以被称为动态端口,49152-65535,一般不固定分配给某进程,而是动态分配

    注意:开发程序一般使用注册端口,且一个设备中不能出现两个程序的端口号一样,否则出错

  • 协议:连接和数据在网络中的传输规则

    传输层有两个通信协议:UDP(User Datagram Protocol)用户数据包协议;TCP(Transmission Control Protocol)传输控制协议

    UDP协议

    (1)特点:面向无连接,不可靠通信,通信效率高

    (2)不事先建立连接,数据包包含自己的ip、程序端口、目的地ip、程序端口和数据(64k)等

    (3)发送方不管对方是否在线,数据在路上丢不丢失,接收方收到数据也无需接收返回确认

    (4)应用场景:语音通话、视频直播

    Java提供了java.net.DatagramSocket类,来实现UDP通信

    DatagramSocket:用于创建客户端、服务端

    • public DatagramSocket():创建客户端的Socket,系统会随机分配一个端口号
    • public DatagramSocket(int port):创建服务端的Socket对象,并指定端口号
    • public void send(DatagramPacket dp):发送数据包
    • public void receive(DatagramPacket p):使用数据包接收数据

    DatagramPacket:创建数据包

    • public DatagramPacket(byte[] buf,int length,InetAddress address,int port):创建发出去的数据包对象
    • public DatagramPacket(byte[] buf,int length):创建用来接收数据的数据包
    • public int getLength():获取数据包,实际接收到的字节个数

    客户端:

    import java.net.*;public class UDPClient {public static void main(String[] args) throws Exception {//创建客户端Socket对象,随机分配端口号DatagramSocket client = new DatagramSocket(); //也可以指定//public DatagramPacket(字节数组, 数组长度, 服务器IP对象, 服务器端口号); 创建发送的数据包对象byte[] bytes = "礼物".getBytes();DatagramPacket dp = new DatagramPacket(bytes,bytes.length,//InetAddress.getLocalHost(),InetAddress.getByName("127.0.0.1"),10000);//public void send(DatagramPacket dp); 发送数据包client.send(dp);//释放资源client.close();}
    }
    

    服务端:

    import java.io.IOException;
    import java.net.*;public class UDPServer {public static void main(String[] args) throws Exception {System.out.println("UDP服务端启动,等待接收数据:");//创建服务器Socket对象,并指定端口号DatagramSocket server = new DatagramSocket(10000);//创建用来接收的数据包对象byte[] bytes = new byte[1024];DatagramPacket dp = new DatagramPacket(bytes, bytes.length);//使用数据包接收数据server.receive(dp); //receive是阻塞的,等着接数据//展示数据int len = dp.getLength(); //len:代表本次接收的有效数据个数System.out.println(new String(bytes, 0, len));//DatagramPacket对象获取客户端其他信息System.out.println(dp.getAddress().getHostAddress());System.out.println(dp.getPort());//释放资源server.close();}
    }
    

在这里插入图片描述

TCP协议

(1)特点:面向连接的,可靠通信,通信效率相对不高

(2)TCP的最终目的,就是保证在不可靠的信道上,实现可靠的传输,传输数据不限制大小

(3)TCP协议通过三次握手建立连接,通过四次挥手断开连接

(4)应用场景:网页、文件下载、支付

Java提供了一个java.net.Socket类来实现TCP通信

  • public Socket(String host,int port):根据指定二点服务器ip,端口号请求与服务端建立连接,连接通过就获得了客户端socket
  • public ServerSocket(int port):创建服务端ServerSocket对象并绑定端口号
  • public OutputStream getOutputStream():获得字节输出流对象
  • public InputStream getInputstream():获得字节输入流对象
  • public Socket accept():阻塞等待客户端的连接请求,一旦连接成功返回服务端Socket对象

客户端:

import java.io.DataOutputStream;
import java.io.OutputStream;
import java.net.DatagramSocket;
import java.net.Socket;
public class TCPClient {public static void main(String[] args) throws Exception {//根据指定的IP和端口创建客户端Socket对象Socket client = new Socket("127.0.0.1", 10010);//获取字节输出流对象(发送)OutputStream os = client.getOutputStream();//封装数据输出流DataOutputStream dos = new DataOutputStream(os);//写数据dos.writeUTF("发送礼物");//释放资源(释放new出来的资源)client.close();dos.close();}
}

服务端:

import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;public class TCPServer {public static void main(String[] args) throws IOException {System.out.println("TCP服务端启动,等待接收数据:");//创建服务端ServerSocket对象并绑定端口号ServerSocket server = new ServerSocket(10010);//阻塞等待客户端的连接请求,一旦连接成功返回服务端Socket对象Socket serverSocket = server.accept();//获取字节输入流对象(接收)InputStream is = serverSocket.getInputStream();//封装数据输入流DataInputStream dis = new DataInputStream(is);//读取数据System.out.println(dis.readUTF());//释放资源server.close();dis.close();}
}

在这里插入图片描述

注意:如果没有启动服务器,单独启动客户端,会报错 java.net.ConnectException

原因:由于TCP是面向连接的,建立连接(三次握手)的时候失败

相关文章:

【网络通信三要素】TCP与UDP快速入门

网络通信三要素 1.什么是网络编程? 可以让设备中的程序,与网络上其他设备中的程序进行数据交互,从而实现网络通信的手段,java.net.*包下提供了网络编程的解决方案 2.基本的通信架构 基本的通信架构有2种形式:CS架构…...

k8s集群的简单搭建

K8S简单集群搭建 前提条件 windos11电脑,内存16g以上安装vmware虚拟机软件安装三个centos7虚拟机,分配硬盘40g,内存4g,CPU4核心网络均采用NAT模式(新建虚拟机默认的模式) centos7镜像下载:https://mirrors.tuna.tsi…...

语义分割笔记(三):通过opencv对mask图片来画分割对象的外接椭圆

文章目录 mask图像介绍步骤代码 mask图像介绍 根据 mask 图像来画分割对象的外接椭圆是一种常见的图像分割任务。Mask 图像通常是一个二值图像,其中包含了感兴趣对象的像素。通常情况下,白色像素表示对象,黑色像素表示背景。 步骤 以下是一…...

Nosql redis高可用和持久化

Nosql redis高可用和持久化 1、redis高可用2、redis持久化2.1redis持久化2.2Redis 持久化方法2.3RDB 持久化2.3.1RDB持久化工作原理2.3.2触发条件2.3.3其他自动触发机制2.3.4执行流程2.3.5启动时加载 2.4AOF 持久化2.4.1AOF持久化原理2.4.2开启AOF2.4.3执行流程2.4.4文件重写的…...

软件工程(1、2;5~7小测参考答案)

目录 软件工程第1、2章小测 需求工程第5-7章小测 软件工程第1、2章小测 一 单项选择题(12分) 1、下列关于软件开发的描述不正确的是()。(1分) 软件是独立于计算机硬件的一部分,但它又依赖于计算机硬件。 软件既是一种复杂的逻辑实体,又是一种工具。 软件的核心是程序,…...

服务器存储面临的两大难题

服务器存储面临的两大难题 服务器存储为核心的IT系统承受着业务发展带来的巨大压力: 随着业务发展,IT应用数量不断增多,当前数据中心的IT基础设施愈加复杂,服务器、存储等设备的数量不断增加。服务器与存储管理更加复杂:随着业务应用对IT基础…...

Blind Signature盲签名与fabric区块链结合的应用

盲签名的概念 首先由 David Chaum 于1982年提出,盲签名实现了签名者对发送者的消息进行签名,却不能知道签名者消息的具体内容。 相当于将文件放入信封,签名者在信封上对文件进行签名,而不知道具体的文件内容。 盲签名的实现方式…...

ueditor

下载文件 文档 UEditor入门部署 入门部署和体验 1.1 下载编辑器 到官网下载 UEditor 最新版:http://ueditor.baidu.com/website/download.html#ueditor 1.2 创建demo文件 解压下载的包,在解压后的目录创建 demo.html 文件,填入下面的…...

2023年台州市第三届网络安全技能大赛(MISC)—Black Mamba

前言:当时比赛没有做出来现在来复现一下 就当记录一下(这个思路没想到) Black Mamba: 一张图片 常规得分离,属性,LSB,盲水印等都尝试过 无果! 考点:异或解密&#xff0…...

这道面试题工作中经常碰到,但 99% 的程序员都答不上来

小时候都被问过一个脑筋急转弯,把大象放进冰箱有几个步骤?我们一开始都会抓耳挠腮,去想着该如何把大象塞进冰箱。最终揭晓的答案却根本不关心具体的操作方法,只是提供了 3 个步骤组成的流程,「把冰箱打开,把…...

Linux安装单机PostgreSQL15.4

1. 联网rpm安装 1.1.关闭服务 ## 关闭防火墙 systemctl stop firewalld.service systemctl disable firewalld.service ## 关闭 selinux cat /etc/selinux/config SELINUXdisabled1.2.安装yum源 yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-…...

最新 SpringCloud微服务技术栈实战教程 微服务保护 分布式事务 课后练习等

SpringCloud微服务技术栈实战教程,涵盖springcloud微服务架构Nacos配置中心分布式服务等 SpringCloud及SpringCloudAlibaba是目前最流行的微服务技术栈。但大家学习起来的感受就是组件很多,不知道该如何应用。这套《微服务实战课》从一个单体项目入手&am…...

Docker搭建MySQL8.0主从复制(一主一从)

0. 配置说明 宿主机使用的版本为19045的win10专业版,MySQL使用的是8.0,Docker容器使用Linux。 1. 安装Docker Desktop 略 修改Docker默认安装路径 安装包自己就提供了修改安装路径的功能,CMD中运行: “Docker Desktop Installe…...

40V汽车级P沟道MOSFET SQ4401EY-T1_GE3 工作原理、特性参数、封装形式—节省PCB空间,更可靠

AEC-Q101车规认证是一种基于失效机制的分立半导体应用测试认证规范。它是为了确保在汽车领域使用的分立半导体器件能够在严苛的环境条件下正常运行和长期可靠性而制定的。AEC-Q101认证包括一系列的失效机制和应力测试,以验证器件在高温、湿度、振动等恶劣条件下的可…...

记录在搭建Jenkins时,所遇到的坑,以及解决方案

项目场景: 记录在搭建Jenkins时,所遇到的坑,以及解决方案.问题描述1 在使用Jenkins构建时,报错如下: cp: cannot stat /project/xx/xxxx/dist/: No such file or directory Build step Execute shell marked build as failure Finished: FAILURE解决方…...

二极管“天马行空”的作用,你知道吗?

网友:二极管怎么有这么多种类呀? 工程师:二极管可以说除了电阻电容外用的比较多的一种元器件,起到的作用多着呢 那么二极管都可以起到哪些作用呢: 一、防反作用,主回路中串联一个二极管,是利用…...

鼎盛合:adc芯片的五种结构

随着国内消费电子产品、通信、工业自动化、汽车电子等行业的快速发展,对ADC芯片的需求不断增加,国内ADC芯片近年也在持续稳定地发展着。ADC种类多样,可分为单通道ADC、多通道ADC、高速ADC、精密ADC和集成ADC等,主要应用于医疗仪器…...

CTF 全讲解:[SWPUCTF 2021 新生赛]Do_you_know_http

文章目录 参考环境题目hello.php雾现User-Agent伪造 User-AgentHackBarHackBar 插件的获取修改请求头信息 雾散 a.php雾现本地回环地址与客户端 IP 相关的 HTTP 请求头X-Forwarded-For 雾散 参考 项目描述搜索引擎Bing、GoogleAI 大模型文心一言、通义千问、讯飞星火认知大模型…...

物联网AI MicroPython传感器学习 之 4路电容式触摸开关

学物联网,来万物简单IoT物联网!! 一、产品简介 板载TTP224电容式4键触摸感应IC,开发者通过触摸该电容模块获取对应的高低电平状态,可以广泛应用于灯光控制、玩具、家用电器等产品中。 引脚定义: VCC&…...

头戴式耳机什么牌子最好?头戴式耳机推荐性价比高

脖子上挎个头戴式作为随身装备,不仅给服装配饰添加了潮流感,还可以可以随时聆听音乐,随着广大消费者的生活水平不断提高,市面上的头戴式耳机越来越多。 选择头戴式耳机时无非就是听音质、看外观、舒适度等等,那么头戴…...

第 366 场周赛 LeetCode 周赛题解

A 分类求和并作差 模拟 class Solution { public:int differenceOfSums(int n, int m) {int res 0;for (int i 1; i < n; i)res i % m ! 0 ? i : -i;return res;} };B 最小处理时间 排序&#xff1a;设四个 p r o c e s s o r T i m e processorTime processorTime 的元…...

Linux: tcpdump抓包示例

文章目录 1. 前言2. TCP 状态机3. tcpdump 抓包示例3.1 抓连接握手包&#xff1a;三次握手3.2 抓数据包示例3.3 抓终结连接&#xff1a;四次挥手 4. 参考资料 1. 前言 限于作者能力水平&#xff0c;本文可能存在谬误&#xff0c;因此而给读者带来的损失&#xff0c;作者不做任…...

seafile server10.0.1 onlyoffice

目标&#xff1a;解决seafile server无法查看office相关文档问题 seafile server 已安装完成 安装onlyoffice 一、Install Docker Engine on Ubuntu 20.04 验证是否安装成功 sudo docker run hello-world 二、拉取onlyoffice/documentserver 镜像及安装 docker network cre…...

商城系统选型:Java商城系统还是PHP商城系统好?

电子商务的不断发展&#xff0c;商城系统成为了企业建设在线销售平台的重要组成部分。 可是在选择合适的商城系统时&#xff0c;许多企业面临着一个重要的决策&#xff1a;是选择Java商城系统还是PHP商城系统呢&#xff1f;下面就对这两种常见的商城系统进行比较&#xff0c;并…...

【多线程进阶】线程安全的集合类

文章目录 前言1. 多线程环境使用 ArrayList2. 多线程环境使用队列3. 多线程环境使用哈希表3.1 HashTable3.2 ConcurrentHashMap 总结 前言 本文主要讲解 Java 线程安全的集合类, 在之前学习过的集合类中, 只有 Vector, Stack, HashTable, 是线程安全的, 因为在他们的关键方法中…...

016 Spring Boot + Vue 图书管理系统

Spring Boot Vue 图书馆管理系统&#xff08;library-system&#xff09; 本地快捷预览项目 第一步&#xff1a;运行 db 文件夹下的springboot-vue.sql(询问作者获取)&#xff0c;创建springboot-vue数据库 第二步&#xff1a;修改后端数据库配置文件&#xff0c;启动后端 …...

C语言中volatile/register/const/static/extern/auto关键字的作用

目录 一、volatile 二、register详解 三、const详解 四、static详解 五、extern详解 语法 作用 六、auto详解 突然想总结一下这些关键字的作用&#xff0c;灵活使用这些对程序的可靠性和速率都有提高 一、volatile volatile是防止编译器优化&#xff0c;如果是高频繁…...

docker compose的安装和使用

docker-copose 介绍 docker-compose 是一个容器编排工具&#xff08;自动化部署、管理&#xff09;; 它用来在单台 Linux 服务器上运行多个 Docker 容器; docker-compose 使用YAML文件来配置所有需要运行的 Docker 容器&#xff0c;该 YAML 文件的默认名称为 docker-compose.…...

/lib64/libstdc++.so.6: version `GLIBCXX_3.4.21‘ not found (required by

在某项目中遇到下面的错误&#xff0c; ./model2trt_v2: /lib64/libstdc.so.6: version GLIBCXX_3.4.21 not found (required by ./model2trt_v2) ./model2trt_v2: /lib64/libstdc.so.6: version GLIBCXX_3.4.21 not found (required by ../../../lib/linux_lib/libcuda_utils…...

数字化转型的必备工具:智能呼叫中心系统的应用

数字化转型已经成为企业发展的必然趋势&#xff0c;在这个过程中&#xff0c;智能呼叫中心系统成为了一个不可或缺的工具。智能呼叫中心系统通过整合各种通信渠道和自动化技术&#xff0c;为企业提供了高效、智能的客户服务解决方案。 首先&#xff0c;系统能够集成多种通信渠…...

保定行业网站/百度非企推广开户

1.安装 1.1安装mmseg ./bootstrap # 必须执行&#xff0c;不然安装会失败 ./configure --prefix/usr/local/mmseg-3.2.14 #指定安装目录 make make install 1.2安装coreseek # 在csft-4.1/configure.ac中 # 查找 AM_INIT_AUTOMAKE([-Wall -Werror foreign]) # 更改 AM_INIT_AUT…...

蒲江网站建设/现代网络营销的方式

不被支持 原来写错勒转载于:https://blog.51cto.com/xitingguic/514381...

网上网城网站/怎么制作个人网站

这个问题浪费了我整整一个下午时间 最后终于解决了 这里来备份一下 $(function(){ var stu_no freeUrl(); var data, subname"",data2; var sbList new Array(); $.ajax({ async: false , dataType: "json", contentType: "application/json&quo…...

php网站建设个人总结/最好用的磁力搜索神器

DataNode对ClientDatanodeProtocol、InterDatanodeProtocol两个协议接口进行了实现&#xff0c;通过ipc::Server向Client、其它DN提供RPC服务&#xff08;参见Hadoop IPC&#xff09;&#xff1b; 同时DataNode依赖DatanodeProtocol向NN请求RPC服务&#xff0c;RPC中包含Datano…...

地推平台招代理/seo全国最好的公司

我们简单看一下pairs、ipairs以及自定义按key值顺序遍历的pairsBykeys这3中方式&#xff1a; -- table表的操作 function pairsBykeys(t)local a {}for n in pairs(t) doa[#a1] nendtable.sort(a)local i 0return function()i i 1return a[i], t[a[i]]end end -- table…...

网站建设三剑客/代刷网站推广免费

当面对互联网海量的舆论舆情数据&#xff0c;要进行针对性统计时&#xff0c;着实比较困难。在大数据时代下&#xff0c;大众不再是被动地接受媒介信息&#xff0c;而是拥有自主发布权&#xff0c;可以自主的制造和传播信息&#xff0c;人人都是麦克风&#xff0c;人人都是通讯…...