Socket

使用SOCKET实现TCP/IP协议的通讯 一、原理:      首先要理解基本的原理,2台电脑间实现TCP通讯,首先要建立起连接,在这里要提到服务器端与客户端,两个的区别通俗讲就是主动与被动的关系,两个人对话,肯定是先有人先发起会话,要不然谁都不讲,谈什么话题,呵呵!一样,TCPIP下建立连接首先要有一个服务器,它是被动的,它只能等待别人跟它建立连接,自己不会去主动连接,那客户端如何去连接它呢,这里提到2个东西,IP地址... 阅读详情

TCP/IP

要想理解socket首先得熟悉一下TCP/IP协议族, TCP/IP(Transmission Control Protocol/Internet Protocol)即传输控制协议/网间协议,定义了主机如何连入因特网及数据如何在它们之间传输的标准。

从字面意思来看TCP/IP是TCP和IP协议的合称,但实际上TCP/IP协议是指因特网整个TCP/IP协议族。不同于ISO模型的七个分层,TCP/IP协议参考模型把所有的TCP/IP系列协议归类到四个抽象层中

应用层:TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet 等等

传输层:TCP,UDP

网络层:IP,ICMP,OSPF,EIGRP,IGMP

数据链路层:SLIP,CSLIP,PPP,MTU

每一抽象层建立在低一层提供的服务上,并且为高一层提供服务。

socket

我们知道两个进程如果需要进行通讯最基本的一个前提能够唯一的标示一个进程,在本地进程通讯中我们可以使用PID来唯一标示一个进程,但PID只在本地唯一,网络中的两个进程PID冲突几率很大,这时候我们需要另辟它径了,我们知道IP层的ip地址可以唯一标示主机,而TCP层协议和端口号可以唯一标示主机的一个进程,这样我们可以利用ip地址+协议+端口号唯一标示网络中的一个进程。
能够唯一标示网络中的进程后,它们就可以利用socket进行通信了,什么是socket呢?我们经常把socket翻译为套接字,socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用已实现进程在网络中通信。
在这里插入图片描述
socket起源于UNIX,在Unix一切皆文件哲学的思想下,socket是一种"打开—读/写—关闭"模式的实现,服务器和客户端各自维护一个"文件",在建立连接打开后,可以向自己文件写入内容供对方读取或者读取对方内容,通讯结束时关闭文件。

socket通信流程

在这里插入图片描述
简单描述一下Socket的通信流程:

  • 服务端这边首先创建一个Socket(Socket()),然后绑定IP地址和端口号(Bind()),之后注册监听(Listen()),这样服务端就可以监听客户端的连接请求了;
  • 客户端这边也创建一个Socket(Socket())并打开,然后根据服务器IP地址和端口号向服务器Socket发送连接请求(Connect());
  • 服务器Socket监听到客户端Socket发来的连接请求之后,被动打开,并调用Accept()函数接收请求(开始接收客户端请求,直到客户端返回连接信息。这时候socket进入阻塞状态,所谓阻塞即accept()方法一直到客户端返回连接信息后才返回,开始接收下一个客户端连接请求);
  • 客户端连接成功,向服务器发送连接状态信息;
  • 服务器accept方法返回,连接成功;
  • 成功建立连接之后就可以互相传送数据了,客户端和服务器进行数据交互(Receive()、Send());
  • 在数据传送完成之后,各自关闭连接(Close()),交互结束;

服务器socket与客户端socket建立连接的部分其实就是大名鼎鼎的三次握手
在这里插入图片描述

SOCKET通信中的各种ip问题,服务端获取客户端ip地址 inet_ntoa(ser_addr.sin_addr),如果客户端地址是"192.168.2.2",在服务端打印出来的这个ip就是"192.168.2.2",可用INADDR_ANY,宏INADDR_ANY转换过来就是0.0.0.0,泛指本机的意思,也就是表示本机的所有IP,因为有些机子不止一块网卡,多网卡的情况下,这个就表示所有网卡ip地址的意思,也可以自己填入需要的ip,比如上述函数获得的某一个ip。在进行socket网络通信的时候,我们经常需要获取ip地址,下面介绍一些获取ip地址的方法。 阅读详情

相关推荐

C# Socket高并发

C#高性能大容量SOCKET并发(转) C#高性能大容量SOCKET并发(零):代码结构说明 C#高性能大容量SOCKET并发(一):IOCP完成端口例子介绍 C#高性能大容量SOCKET并发(二):SocketAsyncEventArgs封装 C#高性能大容量SOCKET并发(三):接收、发送 C#高性能大容量SOCKET并发(四):缓存设计 C#高性能大容量SOCKET并发...

ishenjiaming的博客 2897

Socket——获取客户端IP

获取客户端IP地址的代码 //获取客户端IP InetAddress ia= socket.getInetAddress(); String ip=ia.getHostAddress(); System.out.println("此客户端的IP为"+ip); LoginThread 类 package tcpscoket_obj_29; import java.io.InputStream; import java.io.ObjectInputStream; import ja

斯特凡今天也很帅的博客 5614

HTTP、TCP/IP、socket及bluetooth-socket的整理

网络OSI七层模型 1物理层(简单理解网线)-- 2数据链路层(简单理解网卡)-- 3网络层(IP协议)-- 4传输层(TCP协议)-- 5会话层-- 6表示层(HTTP)-- 电脑/手机能够使用联网功能是因为底层实现了TCP/IP协议,可以使终端通过网络设备(网卡)建立TCP连接。TCP协议可以对上层(传输层)网络提供接口,使上层网络数据的传输建立在“无差别(不管是有线,无线,局域网,广域网等)”的网络之上。 在建立TCP/IP连接之前,需要进行三次确认后,客户端与服务器才正式开始传送数据。理想状态下

zhaochengsheng的专栏 2948

socket IP地址和端口号

IP(Internet Protocol)网络协议,是为收发网络数据分配给计算机的值。 端口号是为了区分程序中创建的套接字而分配的序号 参考:《TCP/IP网络编程》尹圣雨,章节3.1 网络地址(Internet Address):同样是为使计算机连接到网络并收发数据分配的IP地址 IPv4(Internet Address version 4)4字节地址族 IPv6(Internet Address version 6)16字节地址族 IPv4将4字节的地址分为网络地址和主机地址,且分为A、B、C、

YDDUONG的博客 1万+

C# Socket通信从入门到精通(9)——如何设置本机Ip地址(史上最全)

本文详细介绍了Socket通信中如何设置电脑的IP,专为小白打造,由高级工程师多年经验总结而成,绝对干货!

qq_34059233的博客 2697

Ubuntu下Vim创建属于自己的头部注释和代码模板

痛点 每次打开vim想写个C或者C++的程序都要把固定的模板敲一遍,是不是感觉非常的繁琐,能不能把Vim弄得像IDE那样新建一个文件直接生成对应的头部注释和代码模板,减少这些重复工作呢?下面我尽量详细的介绍实现的方法: 先看看新建文件后的效果 C语言格式效果 C++语言效果 方法: 使用命令 vi /etc/vim/vimrc 打开vimrc这个文件,然后复制以下代码至文件末尾的空白处即可! 修改vimrc文件里面的内容必须要用root管理员身份才能进行修改,修改时先切换至root身份即可。 "新建.

weixin_42137584的博客 1559

socket

UNIX system V有:消息(message)、共享存储区(shared memory)和信号量(semaphore)等.网络层的“ip地址”可以唯一标识网络中的主机,而传输层的“协议+端口”可以唯一标识主机中的应用程序(进程)。这样利用三元组(ip地址,协议,端口)就可以标识网络的进程使用TCP/IP协议的应用程序通常采用应用编程接口:UNIX  BSD的套接字(socket)和UNIX ...

httpdrestart的博客 3万+

2025必备:C#上位机自动更新方案,支持断点续传与版本回滚(附完整源码)

摘要:工业上位机自动更新方案解析 本文针对工业现场上位机更新效率低下、风险高的问题,提出了一套完整的自动更新解决方案。该方案包含四个核心模块:版本检测(后台比对版本)、断点下载(支持网络中断续传)、安装更新(自动备份旧版本)和版本回滚(更新失败快速恢复)。通过独立更新工具与主程序解耦的设计,实现了"不影响生产+有退路"的工业级更新要求。方案基于.NET Framework开发,采用HTTP协议通信,包含详细的代码实现和工业场景适配说明,解决了U盘更新效率低、网络不稳定导致下载失败、更新后

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 955

Perl Socket 编程

Socket又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求,使主机间或者一台计算机上的进程间可以通讯。本章节我们为大家接收 Perl 语言中如何使用 Socket 服务。

Kandy1iu的博客 2165

手把手教你学Simulink——逆变器场景:基于PR控制器的单相逆变器并网控制策略仿真

摘要:本文详细介绍基于PR控制器的单相逆变器并网控制策略的Simulink仿真实现。首先分析PR控制器在单相逆变应用中的优势,然后逐步讲解模型搭建过程,包括主电路设计(直流电源、全桥逆变器、L滤波器)、控制回路实现(参考电流生成、坐标变换、PR控制器设计)以及关键参数设置。通过仿真验证了PR控制器对电网频率的精确跟踪能力,并网电流THD<3%。最后提出优化建议,如加入状态观测器、自适应参数整定等改进方向。该建模方法为可再生能源系统中的逆变器控制提供了有效验证手段。

MHD0815的博客 497

Oracle EBS R12 主 / 辅助分类帐(主 / 辅助帐套)落地

本文提供了Oracle EBS R12主/辅助分类帐实施的全套文档模板,包含主帐套(法定帐套)和辅助帐套的完整配置清单、科目映射规则模板、4类典型调整分录示例(存货跌价、折旧差异、往来重分类、外币折算)以及税会/IFRS案例分录。重点阐述了主/辅助帐套的配置要点、SLA子分类帐关键配置、科目映射规则(一对一、多对一、重分类等类型)以及调整分录的自动生成逻辑。文档可直接用于项目实施,包含总体架构图、科目映射矩阵表、会计规则集配置等交付物,并附有Excel版模板便于直接使用。适用于需要实现多准则并行记账、税务调

金牌架构师 385

Windows 环境下的 Socket 编程 1 - 环境搭建和 Socket 相关函数

版本占用 2 字节,高 8 位为副版本,低 8 位为主版本,比如 V1.2 版本,则传递 0x0201。Windows 严格区分文件 I/O 函数和 SOCKET I/O函数,而Linux只有文件 I/O 函数。编译:菜单 Terminal > Run Build Task ,或者快捷键 Ctrl+Shift+B。编译:菜单 Terminal > Run Build Task ,或者快捷键 Ctrl+Shift+B。其次,当程序结束之前,需要调用。版本,并初始化相应版本的库。函数,设置程序中用到的。....

朱工的专栏 5943

用 SAP Fiori Launchpad Content Manager 做目录传输:把 Catalog 变更稳稳送到目标系统

摘要:SAP Fiori项目中,目录传输是确保应用一致交付的关键环节。开发团队常遇到目录在不同系统/客户端间不一致的问题,核心在于理解Launchpad内容管理的两种作用域:系统级(/UI2/FLPCM_CONF)使用workbench请求跨系统传输,客户端级(/UI2/FLPCM_CUST)通过customizing请求按SCC4设置传输。混淆作用域会导致目录分叉,如系统级目录被客户端本地修改后形成独立副本。官方推荐使用Content Manager而非过时的Launchpad Designer,并强调手

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 104

windows 下C语言socket编程

之前一直在Linux系统开发C语言的socket,由于项目的需要 需要在windows下开发,第一次在windows下开 发,顺便记录下来。 首先socket的通信流程: Server程序: 1 .创建socket:socket(); 2. 绑定socket的IP+端口号:bind(); 3.监听端口号:listen(); 4.接收客户端的连接请求:accept(); 5.读写客...

fly_sky_share的博客 6381

5、癌症数据预处理技术与深度学习在癌症预测中的应用

本文详细介绍了癌症数据预处理技术和深度学习在癌症预测中的应用。针对CT扫描图像、X射线图像、超声图像、基因表达数据和文本数据等不同类型的癌症数据,分别阐述了去噪、插值、配准、归一化等预处理技术的具体方法。同时,分析了深度学习在乳腺癌、白血病和宫颈癌预测中的作用,结合相关影响因素探讨了模型的应用潜力。此外,还总结了深度学习在癌症预测中面临的挑战及未来发展方向,为癌症的早期诊断与精准预测提供了理论支持和技术参考。

alice7model的博客 123

YOLOv8改进---BiFPN特征融合

yolov8结合BiFPN进行改进

qq_41920323的博客 4523

什么是SOCKET编程?在PHP中如何实现SOCKET通信?

SOCKET编程是一种网络编程方式,它允许程序通过网络(如Internet)或本地机器(如Unix域套接字)进行通信。SOCKET可以看作是网络通信的一个端点,通过它,程序可以发送和接收数据。SOCKET编程提供了低级的网络通信接口,使得程序员可以直接控制网络数据流。SOCKET编程是一种基础但强大的网络编程技术,它允许程序通过网络进行直接通信。在PHP中,可以使用内置的socket_*函数来实现SOCKET编程,创建服务器端和客户端进行通信。

长风破浪会有时的博客 1631

手把手教你学simulink(16.2)--基于Simulink的高通滤波器(High-Pass Filter)项目

基于Simulink的高通滤波器(High-Pass Filter)项目的详细实例介绍。这个项目将重点放在高通滤波器的设计、实现和仿真上,帮助你理解和应用高通滤波器在信号处理中的作用。

MHD0815的博客 926

Socket描述符选项[SOL_SOCKET]

Socket描述符选项[SOL_SOCKET]  #include      int setsockopt( int socket, int level, int option_name,                         const void *option_value, size_t option_len); 

linuxerhqt的专栏 3万+

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

C++ socket编程基础二(三种Socket:TCP,UDP,原始Socket)

一、基于TCP(面向连接)的的Socket   1、服务器端   创建套接字 SOCKET socket( int af, //参数af指定通信发生的区域:AF_UNIX、AF_INET、AF_NS等,而DOS、 WINDOWS中仅支持AF_INET,它是网际网区域。因此,地址族与协议族相同。 int type, //参数type 描述要建立的套接字的类型。这里分三种:TCP

蚂蚁的坚持 6143

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

网络协议之:socket协议详解之Socket和Stream Socket

文章目录简介Socket是什么Stream Socket使用socat创建一个TCP服务器使用ss检查TCP连接使用nc连接socket总结 简介 不管是在普通的网络编程中还是在netty中,都经常会提到一个词叫做socket,好像socket是一个神奇的东西,使用socket我们可以建立客户端到服务器端的连接,并且和进行客户端和服务器端的通讯,那么socket到底是什么呢?它有哪些分类呢?一起来看看吧。 Socket是什么 socket的中文翻译是套接字,个人觉的这个翻译真的是太差劲了,套接字听起来毫无意

程序那些事 9029

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

socket介绍

Socket: socket本质是编程接口(API),对TCP/IP的封装,TCP/IP也要提供可供程序员做网络开发所用的接口,这就是Socket编程接口;HTTP是轿车,提供了封装或者显示数据的具体形式;Socket是发动机,提供了网络通信的能力。在Internet上的主机一般运行了多个服务软件,同时提供几种服务。每种服务都打开一个Socket,并绑定到一个端口上,不同的端口对应于不同的服务 1、网络中进程之间如何通信? TCP/IP协议族来处理,网络层的“ip地址”可以唯一标识网络中的主机,而传输层的“

许嵩不爱吃土豆的博客 2890

Socket原理和Socket函数

Socket的概念 Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。如下图: 先从服务器端说起。服务器端先初始化Socket,然后与端口绑定(bind),对端口进行监听(listen)...

梓栋DREM 3340

关于socket的各种错误码

1、INVALID_SOCKET : 表示该 socket fd 无效。如 accept(2) 或 socket(2) 等在创建socketfd时: int m_socket = socket(AF_INET, SOCK_STREAM, 0); if (m_socket == INVALID_SOCKET){ printf("socket failed, err_code=%d\n", _G...

u014694510的博客 2万+

【底层机制】【Socket】本地Socket VS 普通 Socket?Zygote为什么使用本地Socket?

本地Socket是为同一台机器上的进程间通信量身定制的解决方案,而普通Socket是为跨网络通信设计的。在Android系统内部通信这种特定场景下,本地Socket在性能、安全和简洁性方面都具有绝对优势

沐怡旸的专栏 1115
上一篇: C++的特性
下一篇: HTTPS通信过程
GoodLinGL
博客等级 码龄6年 120粉丝 47原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值