【网络通信原理之套接字】

news2024/11/22 15:23:54

目录

概念

分类

数据报套接字:使用传输层UDP协议

流套接字:使用传输层TCP协议  

原始套接字

Socket编程注意事项  


前言:本文主要介绍了在什么是套接字及在Java中套接字是什么,和在套接字编程的注意事项。

概念

Socket套接字,是由系统提供用于网络通信的技术,是基于TCP/IP协议的网络通信的基本操作单元基于Socket套接字的网络程序开发就是网络编程。简单来说, 要想进行网络通信, 就需要有Socket文件这样的对象。

借助这个Socket文件对象

  • 往这个Socket对象中写入数据, 相当于通过网卡发送消息
  • 从这个Socket对象中读入数据, 相当于通过网卡接受消息,才能间接的操作网卡。

分类

Socket套接字主要针对传输层协议划分为如下三类:

数据报套接字:使用传输层UDP协议

UDP,即User Datagram Protocol(用户数据报协议),传输层协议。
以下为UDP的特点(细节后续再学习):

  • 无连接
  • 不可靠传输
  • 面向数据报
  • 有接收缓冲区,无发送缓冲区
  • 大小受限:一次最多传输64k

对于数据报来说,可以简单的理解为,传输数据是一块一块的,发送一块数据假如1000个字节,
必须一次发送,接收也必须一次接收1000个字节,而不能分1000次,每次接收1个字节。    

下面介绍Java数据报套接字通信模型,对于UDP协议来说,具有无连接,面向数据报的特征,即每次都是没有建立连接,并且一次发送全部数据报,一次接收全部的数据报
Java中使用UDP协议通信,主要基于 DatagramSocket 类来创建数据报套接字,并使用DatagramPacket 作为发送或接收的UDP数据报。对于一次发送及接收UDP数据报的流程如下:  

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

流套接字:使用传输层TCP协议  

TCP,即Transmission Control Protocol(传输控制协议),传输层协议。
以下为TCP的特点(细节后续再学习):

  • 有连接
  • 可靠传输
  • 面向字节流
  • 有接收缓冲区,也有发送缓冲区
  • 大小不限

对于字节流来说,可以简单的理解为,传输数据是基于IO流,流式数据的特征就是在IO流没有关闭的情况下,是无边界的数据,可以多次发送,也可以分开多次接收.

下面介绍Java流套接字通信模型,如下图所示:

原始套接字

原始套接字用于自定义传输层协议,用于读写内核没有处理的IP协议数据。简单了解即可。  

Socket编程注意事项  

1. 客户端和服务端:开发时,经常是基于一个主机开启两个进程作为客户端和服务端,但真实的场景,一般都是不同主机。

2. 注意目的IP和目的端口号,标识了一次数据传输时要发送数据的终点主机和进程

3. Socket编程我们是使用流套接字数据报套接字,基于传输层的TCP或UDP协议,但应用层协议,也需要考虑,这块我们在后续来说明如何设计应用层协议。

4. 关于端口被占用的问题
如果一个进程A已经绑定了一个端口,再启动一个进程B绑定该端口,就会报错,这种情况也叫端
口被占用。对于java进程来说,端口被占用的常见报错信息如下:  

此时需要检查进程B绑定的是哪个端口,再查看该端口被哪个进程占用。
以下为通过端口号查进程的方式:  
1.在cmd输入 netstat -ano | findstr 端口号 ,则可以显示对应进程的pid。

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

解决端口被占用的问题:  
如果占用端口的进程A不需要运行,就可以关闭A后,再启动需要绑定该端口的进程B
如果需要运行A进程,则可以修改进程B的绑定端口,换为其他没有使用的端口。  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1308088.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Postman接口测试工具使用

一、前言 在前后端分离开发时,后端工作人员完成系统接口开发后,需要与前端人员对接,测试调试接口,验证接口的正确性可用性。而这要求前端开发进度和后端进度保持基本一致,任何一方的进度跟不上,都无法及…

K8S(四)—pod详解

目录 pod介绍Pod的概念:Pod的特性:Pod的配置:Pod的控制:示例 YAML 文件: pod启动流程问题 两种方式启动镜像的升级和回滚更新 Deployment:回滚检查 Deployment 历史版本回滚到之前的修订版本缩放 Deploymen…

进程概念【linux】

进程基础 在学习进程之前,首先要有一定的计算机硬件和软件基础。 硬件基础:冯诺依曼体系结构 如图,是计算机在硬件上的体系结构。 下面举出一些常见的输入输出设备(有些设备只作输出设备,或者只作输入设备&#xff…

基于Leaflet的Webgis经纬网格生成实践

目录 前言 一、Leaflet.Graticule 1、参数说明 二、集成使用 1、新建网页模板 2、初始化地图对象 3、运行效果 三、源码调用分析 1、参数注入 2、经纬网构建 总结 前言 众所周知,在地球仪上或地图上,经线和纬线相互交织,就构成经纬…

复旦微固化流程

生成boot.bin 如图所示,psoc下的create boot image,选择文件配置路径output bif,任意命名 点击右侧add,分别添加三部分 1.编译FSBL工程后SDK\system_platform\FSBL\Debug\Exe路径下的FSBL.out 2.PL侧的bit文件 3.编译工程后SDK\sy…

关于对RF射频方面性能要求各有不同

1.1 射频天线性能 对于一个射频设备每个公司对其合格指标要求都不一,有些公司注重于阻抗及电压驻波,有些公司注重与回波损耗及阻抗、有些只关注电压驻波。 1.2 射频的目的 其实射频天线的目的就是在不把无用的杂散放大超标准的前提下,把有用…

穿梭时光的Java魔法:轻松掌握Date类,揭示当前时间的神秘面纱!

一、实现目标 获取当前时间! 二、上代码 import java.text.SimpleDateFormat; import java.util.Date; public class Date_ { // 输出当前的时间 public static void main(String[] arg…

项目总结-自主HTTP实现

终于是写完了,花费了2周时间,一点一点看,还没有扩展,但是基本功能是已经实现了。利用的是Tcp为网络链接,在其上面又写了http的壳。没有使用epoll,多路转接难度比较高,以后有机会再写&#xff0c…

大数据技术8:StarRocks极速全场景MPP数据库

前言:StarRocks原名DorisDB,是新一代极速全场景MPP数据库。StarRocks 是 Apache Doris 的 Fork 版本。StarRocks 连接的多种源。一是通过这个 CDC 或者说通过这个 ETL 的方式去灌到这个 StarRocks 里面;二是还可以去直接的和这些老的 kafka 或…

图的导航-最短路径算法-深度优先遍历

介绍 最短路径:从起点开始访问所有的路径,到达终点的路径有多条,其中路径的权值最短的一条则为最短路径。 最短路径算法有深度优先遍历、广度优先遍历、Bellman-Ford算法、弗洛伊德算法、SPFA算法、迪杰斯特拉算法等。 而本篇讲的是利用深…

TypeScript中的基本类型

提示:TypeScript中的基本类型 文章目录 前言基本类型1.类型声明2.自动类型判断3.类型断言 前言 TypeScript (计算机编程语言)简称:TS,是 JavaScript 的超集。简单来说就是:JS 有的 TS 都有。JS写的代码在TS…

基于ssm民宿管理系统论文

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本民宿管理系统就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信息&am…

H5 - - - - 移动端禁止长按保存图片

H5 - - - - 移动端禁止长按保存图片 1. 问题描述2. 解决办法2.1 img标签添加css属性2.2 设置为背景图片2.3 图片元素的同级加一个透明盒子 1. 问题描述 H5移动端 img标签长按,会出现如图效果⬇️ 那么该如何修改,能避免长按保存图片操作呢? …

代码随想Day36 | 435. 无重叠区间、763.划分字母区间、56. 合并区间

435. 无重叠区间 这道题和前一天的射箭题目思想类似,用总区间个数-不重叠的区间个数等于需要去除的区间个数。首先对左边界排序,如果当前的左边界大于等于上一区间的右边界,则说明是一个不重叠的区间,否则,更新上一重…

Microsoft 发布了 12 月份产品安全问题修复报告。

🔥 Microsoft 发布了 12 月份产品安全问题修复报告。 请注意趋势漏洞 CVE-2023-36011 和 CVE-2023-35632。这些漏洞与 Win32k 内核和负责网络通信的辅助功能驱动程序 (AFD) 驱动程序中的缺陷有关。成功利用这两个漏洞可让进入 Windows 系统的攻击者将其权限提升至系…

NXP应用随记(二):S32K3xx内存随记

目录 1、TCM 1.1、代码放置在ITCM的方式 __attribute__ 的函数属性 __attribute__ 的变量属性 __attribute__ 的类型属性 __attribute__ 的优化控制属性 1.2、DTCM 1.3、TCM的使用注意事项 1、TCM CMTightly Coupled Memory,是一种高速缓存,据说是…

【EI会议征稿】第三届电力系统与电力工程国际学术会议(PSPE 2024)

第三届电力系统与电力工程国际学术会议(PSPE 2024) 2024 3rd International Conference on Power System and Power Engineering(PSPE 2024) 第三届电力系统与电力工程国际学术会议(PSPE 2024)于2024年3月29-31日在中国三亚隆重召…

开发案例:使用canvas实现图表系列之折线图

一、功能结构 实现一个公共组件的时候,首先分析一下大概的实现结构以及开发思路,方便我们少走弯路,也可以使组件更加容易拓展,维护性更强。然后我会把功能逐个拆开来讲,这样大家才能学习到更详细的内容。下面简单阐述…

C++怎么快速提升实力?

C怎么快速提升实力? 在开始前我有一些资料,是我根据自己从业十年经验,熬夜搞了几个通宵,精心整理了一份「C的资料从专业入门到高级教程工具包」,点个关注,全部无偿共享给大家!!&…

redis-学习笔记(Jedis hash简单命令)

hset & hget 往 hash 里面塞数据和获取数据 示例代码 hmset & hmget 批量插入数据, 获取数据 注意, hmset 里面插入的是一个 Map hmget 的返回值是一个一个 List 列表 (参数仍是变长参数) 示例代码 hexists 判断 hash 中 域值 存不存在 示例代码 hdel 删除指定的域和值…