Linux下Socket编程学习(五)

Linux Socket编程 Socket是网络编程中的一个概念,用于标识网络通讯中的一个进程。在网络通讯中,“IP地址 + TCP或UDP端口号” 可以唯一标识一个进程,这个标识被称为Socket。Linux下的Socket编程涉及多个系统调用,通过这些调用可以实现网络通信。无论是TCP还是UDP协议,Socket编程的基本流程相似,主要包括创建Socket、绑定地址、监听连接、接受连接、发送和接收数据等步骤。通过实例代码,可以更好地理解和掌握这些操作。 阅读详情

这章讲下产生SIGPIPE信号的原因

往一个已经收到FIN的套接字中写是允许的,接收到FIN仅仅代表对方不再发送数据。

如果对方进程不存在了,你还写数据那么会返回一个RST段RST段之后,如果再调用write就会产生SIGPIPE信号,对于这个信号直接忽略就ok了

singal(SIGPIPE,SIG_IGN);


五种I/O模型

阻塞I/O

非阻塞I/O

I/O复用(select和poll)

信号驱动I/O

异步I/O


阻塞I/O

    recv进行阻塞

     当有数据到来 会从内核空间拷贝到用户空间 recv返回

非阻塞I/O

     recv设置为非阻塞模式(fcntl(fd,F_SETFEL,flag|O_NONBLOCK))

     没有数据返回错误 -1  errono =EWOULDBLOCK

      不停的轮询 直到有数据到来

       应用范围很窄基本不会去用啦

I/O复用(select和poll)

       使用select来实现

        select可以管理多个文件描述符,一旦有一个或多个有数据到来就可以返回

        在select中阻塞

信号驱动I/O

         基本上不用 用户空间建立SIGIO信号。当有数据到来时就以信号的方式通知程序

异步I/O

         递送一个应用层的缓冲区,即使没有数据到来也返回,当有数据到来之后,内核就将数据拷贝到应用层缓冲区

         通知上层程序




          

Linux socket编程 domain用于指定协议族(PF)或地址族(AF),不过通常两者区别不大,选择其中一种使用即可。经常使用的参数类型有如下几种:type用于指定socket的类型,常见的类型如下:protocol用于指定协议,通常与第二个参数搭配使用,常见的如下:typetypeSOCK_DGRAMtypeSOCK_RAM※注:当protocol参数设置为 0 时,系统会根据domain(地址族)和type(套接字类型)参数自动选择一个合适的默认协议。 阅读详情

相关推荐

Linux下Socket编程

学习socket编程前要先明白网络应用程序通信流程应用程序 A 要将数据”hello” 传给网络上另外一台主机上的应用程序 B, 数据“hello”从应用层发送给传输层后,传输层在数据前面加上 tcp 协议或 udp 协议的报头,将整条报文发给网络层,网络层添加自己的 IP 报头,再将整条数据发送给数据链路层。数据链路层将数据封装成能在网络中独立传输的数据单元,即数据帧。封装好的数据帧通过网络传输到另一台主机,然后再从下层依次拆包,将数据部分送往应用层。应用程序 B 就得到了数据” hello”。

oorik的博客 2112

Linux下Socket编程学习(一)

sockaddr_in详细讲解 IPV4套接口地址结构通常也称为”网际套接字地址结构“,它以"sockaddr_in"命名,定义在头文件 中 struct sockaddr_in{    uint8_t sin_len;    //整个sockaddr_in结构体的长度    sa_family_t sin_family;    //指定地址家族,AF_INET使用的是ipv4协议  

startFromWeb的专栏 856

Linux下socket编程初学者的体会,希望对其他初学者有帮助

免费分享一下关于Linux下socket编程的基本原理和相关函数的解析,还有一下其他的体会,如有不对的地方请指正。

Linux下Socket编程学习(三)

1、流协议与粘包 2、粘包产生的原因 3、粘包处理方案 4、readn writen TCP 是流协议没有边界容易产生粘包。 解决方案:    1、定长包    2、包尾加\r\n(ftp) 有一定问题 消息本身具有\r\n就无法区分边界    3、包头加上包体长度    4、更复杂的应用协议 解决TCP粘包问题,读取指定大小的数据 size_t readn(in

startFromWeb的专栏 835

实战Linux+Socket编程.pdf

实战Linux+Socket编程.pdf

手把手教你用Xilinx Ultrascale+ FPGA解串12-bit ADC的LVDS信号(附Verilog代码)

本文详细介绍了如何使用Xilinx Ultrascale+ FPGA解串12-bit ADC的LVDS信号,涵盖硬件设计、时钟域处理和数据对齐等关键技术。通过Verilog代码实例和调试技巧,帮助工程师解决高速数据采集中的核心挑战,提升系统稳定性和性能。

weixin_42522964的博客 373

socket/io(1)、Linux的socket编程详解

Linux的SOCKET编程详解 1. 网络中进程之间如何通信 进 程通信的概念最初来源于单机系统。由于每个进程都在自己的地址范围内运行,为保证两个相互通信的进 程之间既互不干扰又协调一致工作,操作系统为进程通信提供了相应设施,如 UNIX BSD有:管道(pipe)、命名管道(named pipe)软中断信号(signal) UNIX system V有:消息(mes......

黄规速博客:学如逆水行舟,不进则退 34万+

跨模态行人重识别实战:Python复现SYSU-MM01官方评估协议

本文详细介绍了如何用Python复现SYSU-MM01数据集的官方评估协议,以解决原Matlab代码在Python生态中不便使用的问题。文章深入解析了数据集的`indoor`与`all`两种评估模式,并提供了完整的Python代码实现,包括特征加载、相似度计算、Rank-k与mAP指标计算等核心步骤,确保评估结果与官方Matlab版本完全一致,助力跨模态行人重识别研究。

weixin_29081163的博客 99

linux-socket编程(五)recv,getsockname,gethostname等函数学习

1:read与recv函数 recv首先查看一下帮助: recv的功能和read的一样,都可以从套接口当中获取数据,但是recv只能用于套接口I/O不能用于文件I/O,以及其他的I/O,read函数可以用于任何I/O。 recv相比于read多了一个flags选项,通过这个选项可以指定接受的行为。主要有两个重要的选项: MSG_OOB:可以接收带外数据,通过紧急指针发送的数据。带外数据被认为具有比普通数据更高的优先级 MSG_PEEK:可以接收缓存区的数据但是并不将缓存区中的数据清除,read函数

小冰球 1097

Unity 2022.3.3 LTS + Visual Studio 2022:手把手教你复刻《吸血鬼幸存者》核心战斗(附完整项目源码)

本文详细介绍了如何使用Unity 2022.3.3 LTS和Visual Studio 2022从零构建《吸血鬼幸存者》式战斗系统。通过图文开发教程,涵盖对象池优化、ECS架构雏形、2D物理碰撞控制等关键技术,帮助开发者高效复刻这款热门游戏的自动攻击与海量刷怪机制。

weixin_30721077的博客 458

5.3 磁悬浮轴承:基于有限元法的电磁场分析

摘要:本文系统阐述了有限元法在磁悬浮轴承电磁场分析中的应用。相较于等效磁路法和解析法,有限元法能精确处理复杂几何、材料非线性和动态效应。重点介绍了三维静磁场仿真(用于计算稳态磁场、电磁力和电感)和瞬态磁场仿真(用于分析动态过程和损耗)的关键设置与后处理方法。通过有限元分析可验证承载力、评估损耗分布并指导结构优化,形成"磁路设计-有限元验证-参数修正"的闭环设计流程,为磁轴承的精确设计和性能评估提供可靠依据。

技术工作者 1290

Linux下的网络编程学习(五):socket api的TCP数据读写

TCP的读写   有关TCP的socket编程接口的读写如下: #include<sys/types.h> #include<sys/socket.h> ssize_t recv(int sockfd,void buf,size_t len ,int flags); ssize_t send(int sockfd,const void buf,size_t len,int ...

weixin_44581722的博客 319

视觉惯性SLAM系列——ORB-SLAM3的整体介绍及各个线程的功能(五)

跟踪线程(Tracking Thread)作用:负责处理每一帧图像,进行相机位姿的估计和定位。它首先执行与前一帧图像的特征匹配,然后通过仅运动(motion-only)BA(Bundle Adjustment)优化位姿。如果跟踪失败,它会尝试在所有地图中进行重定位。此外,跟踪线程还负责决定何时插入新的关键帧,以及何时将关键帧从局部地图中移除。详细介绍见局部建图线程(Local Mapping Thread)作用:管理局部地图,向活跃地图添加关键帧和点,移除多余的关键帧和点。

曾经也曾立志 1004

Linux下Socket编程基础

Socket是网络通信的端点抽象,如同现实世界中的电话插座,一个人想要用电话,肯定需要把插头插到插座中,而在网络上你想跟其他节点通信,也需要将socket这个插头插进网络中。在Linux系统中,socket表现为一个int类型的文件描述符,我们完全可以把其当作一个文件,对其执行读取写入等操作。

cooler_water的博客 2543

用Multisim复刻经典收音机:从零搭建超外差中波调幅接收机(附仿真源文件)

本文详细介绍了如何使用Multisim软件从零搭建超外差中波调幅接收机,复刻经典收音机的设计过程。通过模块化搭建、稳定性优化和增益分配等实战指南,帮助读者掌握超外差架构的核心技术,并附赠仿真源文件供实践参考。

weixin_28744423的博客 473

别再盲调PID了!手把手教你用VOFA+实时可视化电机速度曲线(附STM32F4源码)

本文详细介绍了如何使用VOFA+工具实现PID参数的可视化调试,帮助开发者从盲调转向精准调优。通过实时可视化电机速度曲线,结合STM32F4源码示例,展示了如何高效调试Kp、Ki、Kd参数,解决响应慢、超调等常见问题,大幅提升电机控制系统的性能。

weixin_28366475的博客 128

Linux下简单socket编程

Linux下简单socket编程 socket的英文翻译是接口、插座的意思,很形象,就相当于将两个台电脑用一根线连起来,线的两头分别是插头,插在两台电脑上,借此实现通信。 两台电脑通信,实际上是这两台电脑上的某个进程在进行通信。而两个进程进行通信,实际上是往同一个文件中读取数据。 在理解socket编程之前,先大概了解一下socket缓冲区的概念。 socket编程基于传输层,是应用层和传输层之间...

weixin_41249411的博客 1万+

SAP 针对不同行业(制造业、零售业、金融业)推出了专属的云解决方案,以下是各行业的核心方案与特点

SAP推出行业专属云解决方案:制造业(SAP Digital Manufacturing Cloud)提供AI排产与质量预警,降低缺陷率;零售业(S/4HANA Cloud零售版)实现AI预测补货与全渠道库存同步,减少浪费;金融业(Business ByDesign)支持合规自动化与实时风控,降低审计成本。各方案均采用云原生架构,典型案例显示实施效果显著。

金牌架构师 491

【Linux】SOCKET编程

传统的进程间通信借助内核提供IPC机制进行,但是只能限制于本机通信,若要进行跨机通信,就要使用网络通信。​ 网络通信的本质是借助内核提供SOCKET伪文件的机制进行通信,实际上是使用了文件描述符,因此需要使用内核提供的socketAPI函数库(在传输层层面进行)。

Demok123的博客 3199

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

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

老版QQ原生表情gif动态

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

【linux】Socket网络编程

IP 在网络中, 用来标识主机的唯一性。,例如使用qq从qq服务器上获得数据。

fulufulucode的博客 1406

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

【Linux】socket网络编程之UDP

udp网络套接字编程,实现了一个客户端可以通过指令操控服务器,然后将服务器应该输出的结果打印到客户端

s_little_monster的博客 1万+

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Linux网络——Socket编程

结果如下:当出现上述字段时,证明网络是连通的,这里值得注意的是,,但是我们也可以指定ping命令的检测次数,指令为:如图,执行指定次数后便会立即退出。

2303_78442132的博客 1566

Windows Socket和Linux Socket编程的区别

SOCKET在原理上应该是一样的,只是不同系统的运行机置有些不同。 Socket 编程 windows到Linux代码移植遇到的问题 1、一些常用函数的移植 http://www.vckbase.com/document/viewdoc/?id=1586 2、网络 socket相关程序从windows移植到linux下需要注意的  1)头文件 windows下winsoc

白永辉的专栏 4600

Linux内核开发五:Socket网络编程

1、Linux网络编程/套接字编程 现在大多数计算机网络都是根据TCP/IP协议栈搭建起来的,为了具体实现TCP/IP协议栈,Linux操作系统就对外提供了一套可供程序员做网络开发所用的操作接口,这就是Socket编程接口,这就是用来进行Linux网络编程项目开发的一些最基本的接口函数,比如socket、listen、connect、accept、send、read和write等等。总而言之,S

七色米的足迹 1261

Linux下的Socket编程

网络通信前,通信双方需要知道本机与对方主机的IP地址,方可进行通信。在IP数据报的报头中需要包含有和这两个地址,源IP地址即为本机地址,目的IP地址即为对方地址。其中,在报头中包含的目的IP地址用于本机向对方主机发送请求报文,而源IP地址则是使对方主机能知道该报文的发送方身份。当对方主机将报文处理完毕后,会将作为,从而对不同主机的请求进行正确响应。

m0_74310998的博客 1380

基于Socket编程下 实现Linux-Linux、Linux-Windows tcp通信

Socket编程基础、TCP传输控制协议。①、调用 socket()函数打开套接字,得到套接字描述符;②、调用 bind()函数将套接字与 IP 地址、端口号进行绑定;③、调用 listen()函数让服务器进程进入监听状态;④、调用 accept()函数获取客户端的连接请求并建立连接;⑤、调用 read/recv、write/send 与客户端进行通信;⑥、调用 close()关闭套接字。

Bit_Dong的博客 2184
上一篇: Linux下Socket编程学习(四)
下一篇: 如何定位Android NDK开发中遇到的错误
startFromWeb
博客等级 码龄16年 23粉丝 32原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值