网络编程1_网络编程引入

article/2025/6/18 18:40:20

为什么需要网络编程?

用户再在浏览器中,打开在线视频资源等等,实质上说通过网络,获取到从网络上传输过来的一个资源。

与打开本地的文件类似,只是这个文件的来源是网络。相比本地资源来说,网络提供了更为丰富的网络资源。

所谓网络资源 ,其实就是在网络中获取到各种数据资源。而所有的网络资源,都是通过网络编程来进行数据传输。

什么是网络编程

网络编程:网络上的主机,通过不同的进程,以编程的方式实现网络通信(网络数据传输)。

也可以只需要满足进程不同即可。所以即使是同一个主机,只要是不同进程,基于网络来传输数据,也属于网络编程。

特殊的,对于开发来说,在条件有限的情况下,一般也都是在一个主机中运行多个进程来完成网络编程。

但是,我们一定要明确,我们的目的是使网络上的不同主机,基于网络来传输数据资源。

进程A :编程来获取网络资源。

进程B:编程来提供网络资源。

网络编程中的基本概念

发送端和接收端

在一次网络数据传输时:

发送端:数据发送方的进程,称为发送端。发送端主机即网络通信的源主机。

接收端:数据接收方的进程,称为接收端。接收端主机即网络通信的目的主机。

收发端:既发送数据,又接收数据。

注意:发送端和接收端只是相对的,只是一次网络数据传输中,产生数据流向的概念。

请求和响应

一般来说,获取一个网络资源,涉及到两次网络数据传输。

第一次:请求数据的发送(request)。

第二次:响应数据的发送。(response)。

客户端和服务端

服务端:在常见的网络数据传输场景下,把提供服务的一方进程,称为“服务端”,可以对外提供服务。(也就是我们常说的服务器)

客户端:获取服务的一方进程,称为客户端。

客户端获取服务资源:

客户端保存资源在服务端: 

常见的客户端服务端模型

最常见的场景,客户端说给用户的程序,而服务端是给用户提供服务的程序。

1、客户端先发送请求给服务器。

2、服务器根据请求数据,进行相应业务的处理。

3、服务端返回响应:发送业务处理结果。

4、客户端根据响应的数据,展示处理结果(展示获取的资源,或提示保存资源的处理结果) 

客户端和服务器之间的交互,也是有很多种模式的:

1、一问一答:一个请求对应一个响应。(最常见的模式,网站开发(web开发)就是使用这种一问一答的模式)

2、一问多答:一个请求对应多个响应。(多出现于“下载”场景中)。

3、多问一答:多个请求,对应一个响应(多出现于“上传”场景中)。

4、多问多答:一个请求可能对应多个响应,一个响应也可能对应多个请求。(多用于“远程桌面/远程控制”)。

Socket套接字

概念

Socket套接字,是由系统提供用于网络通信的技术,是基于TCP/IP协议的网络通信的基本操作单元。基于Socket套接字的网络程序开发就是网络编程。

分类

Socket套接字主要针对应用层->传输层的协议分为如下三类:

字节流套接字

使用传输层的TCP协议,主要有以下特点:

1、有连接:通信双方必须都认同,才能使数据能够传输。

2、可靠传输:尽可能地传输数据,就算无法传输也能知道数据最终对方是否收到。

3、面向字节流:与文件中的字节流相同。

4、全双工:能够同时发送和接收信息。

数据报套接字

使用UDP协议,特点:

1、无连接

2、不可靠传输

3、面向数据报

4、全双工 

原始套接字

这里不做过多赘述 ……

Java数据报套接字通信模型

UDP协议来说,具有无连接、面向数据报的特征,即每次通信都没有建立连接,并且一次发送全部数据报,一次接收全部数据报。

Java中使用UDP协议通信,主要基于DatagramSocket类来创建数据报套接字,并使用DatagramPacket作为发送或者接收的UDP数据报。一次发送及接收UDP数据报流程如下:

以上只是一次发送端的UDP数据报发送和接收端数据报接收,并没有返回数据。也就是只有请求,并没有返回响应。对于一个服务器来说,重要的是处理多个客户端的请求并返回响应,流程如下: 

Java字节流套接字通信模型

 Socket编程的注意事项

1、客户端和服务器:我们自己练习开发时,经常是基于一个主机开启两个进程作为客户端和服务器,但真实的场景中,一般是不同主机作为客户端和服务器。

2、目的IP和端口号,表示了一次数据传输时要发送数据的终点主机和进程

3、Socket编程我们使用的是字节流套接字和数据报套接字,是基于传输层的TCP或者UDP协议,但也要考虑应用层协议,也需要考虑。

4、如果一个进程A已经绑定了一个端口,再启动另一个进程B绑定该端口,这种情况也叫做端口号被占用。在Java中,如果端口号被占用就会报出如下异常:

此时可以检查进程B绑定的时那个端口,再查看该端口被哪个进程占用。

在cmd中输入netstat -ano|findstr 端口号,就可以显示出对应进程的pid 

在任务管理器中,通过pid查找进程

解决端口被占用问题 :

如果占用端口的进程A不需要进行,就可以关闭A之后,再启动需要绑定该端口的进程B。

如果需要运行A进程,也可以修改进程B的绑定端口,换为其他没有使用的端口。


http://www.hkcw.cn/article/UDCJfddjjv.shtml

相关文章

性能优化 - 理论篇:性能优化的七类技术手段

文章目录 Pre引言性能优化的七类技术手段性能优化策略一览表1. 复用优化2. 计算优化2.1 并行执行2.2 变同步为异步2.3 惰性加载 3. 结果集优化3.1 数据格式与协议选择3.2 字段精简与按需返回3.3 批量处理与分页3.4 索引与位图加速 4. 资源冲突优化4.1 锁的分类与特点4.2 无锁与…

Android之ListView

1:简单列表(ArrayAdapter) 1:运行的结果: 2:首先在MyListView里面创建一个按钮,点击的时候进行跳转。 这里让我吃惊的是,Button里面可以直接设置onClick .java里面的方法。 也即是点击这个按钮之后就会去…

Unity程序集

对于Unity的程序集,具体内容可以参考Unity官方文档,程序集定义 - 预定义程序集 比如Unity的默认程序集,Assembly-CSharp.dll,还有其他的比如 Assembly-CSharp-Editor.dll,Assembly-CSharp-firstpass.dll 没有指定或…

【算法】递归与分治策略

一、算法整体思想 一般情况下,问题的规模越大,解题所需的计算时间越长,并且解题的难度可能会变得很大。 问题的规模越小,解题所需的计算时间往往越短,也比较容易处理。 当直接解决一个较大的问题时,有时是…

NVIDIA Mellanox BlueField-2 DPU(Data Processing Unit)智能网卡的调试和使用

专有名词 OOB: BMC: BFB: EMMC: 关键词解释eMMCEmbedded Multi-Media Card——把 NAND 闪存颗粒与控制器封装在一起的板载存储件,类似手机里的“内置储存” .deb:文件是​​Debian软件包格式​​的专…

(LeetCode 每日一题) 909. 蛇梯棋 (广度优先搜索bfs)

题目&#xff1a;909. 蛇梯棋 思路&#xff1a;广度优先搜索bfs队列&#xff0c;时间复杂度0(6*n^2)。 细节看注释 C版本&#xff1a; class Solution { public:int snakesAndLadders(vector<vector<int>>& board) {int nboard.size();// vis[i]&#xff1a;…

医疗多模态共情推理与学习一体化网络构成初探

1 引言:多模态共情推理的概念内涵与技术背景 在当今医疗人工智能领域,多模态共情推理正逐步成为突破临床决策支持系统瓶颈的关键范式。这一技术通过融合认知共情与情感共情的双重机制,模拟人类医生的综合诊断思维过程,实现对患者全方位健康状态的深度理解。医疗环境中的共…

RFID技术深度剖析:从原理、协议到S50卡与FM17550读写

知识点1【RFID的概述】 学习目标是学习对这个卡片的读写 用已有的手册实现对卡片内数据的读写操作 RFID&#xff1a;&#xff08;Radio Frequency Identification&#xff09;无线射频识别 通过无线识别目标&#xff0c;并读写相关数据&#xff0c;而无需接触 位于感知层&…

4-香豆酸:CoA连接酶晶体-文献精读138

Crystal structures of a Populus tomentosa 4-coumarate:CoA ligase shed light on its enzymatic mechanisms 杨树&#xff08;Populus tomentosa&#xff09;4-香豆酸&#xff1a;CoA连接酶的晶体结构揭示了其酶促机制 摘要 4-香豆酸&#xff1a;CoA连接酶&#xff08;4CL…

VTK|实现类似CloundCompare的测量功能

文章目录 CloundCompare在点、线、面三种模式下的显示内容✅ 图1&#xff1a;点模式✅ 图2&#xff1a;线模式✅ 图3&#xff1a;面模式 增加控制菜单栏实现测量功能类如何调用项目git链接 CloundCompare在点、线、面三种模式下的显示内容 点 线 面 三张图展示了 CloudComp…

Android15 userdebug版本不能remount

背景描述&#xff1a; 最近调试Android Vendor Hal的时候发现一个奇怪的现象: android userdebug版本刷到设备中&#xff0c;执行adb root没提示错误&#xff0c;但是没有获取到root权限。 Android设备运行的系统版本有三种情况&#xff1a;user版本、userdebug版本和eng版本…

伊朗外长:将适当回应美方核谈判提案

△伊朗外交部长阿拉格齐(资料图)当地时间5月31日,伊朗外交部长阿拉格齐在社交平台表示,当天阿曼外交大臣巴德尔访问伊朗并向其介绍了美方有关核谈判的提案。阿拉格齐表示,伊朗将根据原则、国家利益和伊朗人民的权利对此作出适当的回应。白宫新闻秘书莱维特当地时间31日表示…

27 C 语言编程核心:main 主函数(基本形式、返回值、参数、命令行传参)、多文件编程实践

1 main 主函数 1.1 主函数的作用 在 C 语言中&#xff0c;main 主函数是程序的入口函数&#xff0c;所有 C 程序必须包含一个名为 main 的函数。程序总是从该函数开始执行&#xff0c;没有它程序就无法启动。 主函数可以调用其他函数。其他函数不能调用主函数。主函数不能调用…

GIS常见数据及主要应用综述:类型解析、应用案例与未来趋势全景解读

&#x1f30f; GIS常见数据及主要应用综述&#xff1a;类型解析、应用案例与未来趋势全景解读 地理信息系统&#xff08;GIS&#xff09;是支撑空间决策、资源管理、城市治理的重要技术体系。本文从常见数据类型入手&#xff0c;结合中国及国际资源&#xff0c;梳理典型GIS应用…

系统性学习C语言-第十二讲-深入理解指针(2)

系统性学习C语言-第十二讲-深入理解指针&#xff08;2&#xff09; 1. const 修饰指针1.1 const 修饰变量1.2 const 修饰指针变量 2. 野指针2.1 野指针成因2.2 如何规避野指针2.2.1 指针初始化2.2.2 小心指针越界2.2.3 指针变量不再使用时&#xff0c;及时置 NULL &…

Linux安装redis

Linux redis路径 https://download.redis.io/releases/解压安装Redis 解压 tar -zvxf redis-6.0.5.tar.gz 由于redis是c语言编写的&#xff0c;所以我们需要先安装gcc&#xff0c;安装的命令如下&#xff1a; yum install gcc-c安装 输入命令&#xff1a; make PREFIX/usr/…

NumPy 数组计算:广播机制

文章目录 NumPy 数组计算&#xff1a;广播机制一、广播机制简介二、广播机制的规则1. 广播机制示例 12. 广播机制示例 23. 广播机制示例 3 三、广播机制实战1. 数组的中心化2. 绘制二维函数 NumPy 数组计算&#xff1a;广播机制 我们在NumPy数组的计算&#xff1a;通用函数中看…

Codesys FOR 循环之轴控

关于多伺服的轴控,不管怎么写都会很复杂,要么编程的时候代码行数多,要么是后期检查时非常麻烦,目前还未找到一个两全其美的方法,今天介绍的是通过FOR循环的轴控,就属于后者,代码行数较少,控制的轴数也没有限制,不需要一个轴一个的复制FB块,但是想在调试的时候实时查看…

欧冠决赛杜埃梅开二度 新星闪耀赛场

北京时间6月1日,本赛季的欧冠决赛中,19岁的杜埃表现出色,梅开二度并送出一次助攻,帮助巴黎圣日耳曼在比赛进行到73分钟时以4-0领先国际米兰。据统计,杜埃成为自1964年国际米兰名宿桑德罗-马佐拉以来,首位在欧冠决赛中完成梅开二度并且送出助攻的球员。本赛季,杜埃代表巴…

使用VSCode在WSL和Docker中开发

通过WSL&#xff0c;开发人员可以安装 Linux 发行版&#xff08;例如 Ubuntu、OpenSUSE、Kali、Debian、Arch Linux 等&#xff09;&#xff0c;并直接在 Windows 上使用 Linux 应用程序、实用程序和 Bash 命令行工具&#xff0c;不用进行任何修改&#xff0c;也无需使用传统虚…