当前位置: 首页 > 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&…...

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

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

国防科技大学计算机基础课程笔记02信息编码

1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制,因此这个了16进制的数据既可以翻译成为这个机器码,也可以翻译成为这个国标码,所以这个时候很容易会出现这个歧义的情况; 因此,我们的这个国…...

将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?

Otsu 是一种自动阈值化方法,用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理,能够自动确定一个阈值,将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...

相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)

【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...

BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践

6月5日,2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席,并作《智能体在安全领域的应用实践》主题演讲,分享了在智能体在安全领域的突破性实践。他指出,百度通过将安全能力…...

全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比

目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...

【Oracle】分区表

个人主页:Guiat 归属专栏:Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...

.Net Framework 4/C# 关键字(非常用,持续更新...)

一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...

Java毕业设计:WML信息查询与后端信息发布系统开发

JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发,实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构,服务器端使用Java Servlet处理请求,数据库采用MySQL存储信息&#xff0…...

scikit-learn机器学习

# 同时添加如下代码, 这样每次环境(kernel)启动的时候只要运行下方代码即可: # Also add the following code, # so that every time the environment (kernel) starts, # just run the following code: import sys sys.path.append(/home/aistudio/external-libraries)机…...

基于江科大stm32屏幕驱动,实现OLED多级菜单(动画效果),结构体链表实现(独创源码)

引言 在嵌入式系统中,用户界面的设计往往直接影响到用户体验。本文将以STM32微控制器和OLED显示屏为例,介绍如何实现一个多级菜单系统。该系统支持用户通过按键导航菜单,执行相应操作,并提供平滑的滚动动画效果。 本文设计了一个…...