【转】Windows下与Linux下编写socket程序的区别(简单区别,没有异步socket,如select)

Linux 5种IO模型对比:从阻塞IO到异步IO,3张图看懂核心差异与适用场景 本文深入解析Linux中的5种IO模型,包括阻塞IO、非阻塞IO、IO复用、信号驱动IO和异步IO,通过对比表格和流程图展示其核心差异与适用场景。特别针对高并发场景,提供选型建议和性能优化关键点,帮助开发者理解《Unix网络编程》中的IO模型理论并应用于实战。 阅读详情

 

Windows下与Linux下编写socket程序的区别

 

【【Windows】】

 

        【Windows: 头文件的区别】        #include        #include

 

        【Windows: 初始化的区别】        WSADATA wsaData;        WSAStartup(0x202,&wsaData);

 

        【Windows: 声明Socket】        SOCKET类型

 

        【Windows: Socket关闭】        closesocket()

 

        【Windows: Socket操作错误返回值】        SOCKET_ERROR

 

        【Windows: 设置socket非阻塞】        ioctlsocket(server_socket,FIONBIO,&ul);

 

        【Windows: WSA宏】        WSA相关的操作

 

        【Windows: Select()函数】        Select()函数的第一个参数无效,写0就可以了。

 

        【Windows: 编译连接】        Ws2_32.lib

 

        【Windows: 错误捕捉】        WSAGetLastError()

 

        【Windows: 异常处理】        没有对send()的异常处理,最后一个参数无效,写0就可以了。

 

 

 

=======================================================================================================

 

          

 

                                        

 

        【【Linux】】

 

        【Linux: 头文件的区别】        #include        #include        #include        #include        #include        #include

 

        【Linux: 初始化的区别】        Do nothing.

 

        【Linux: 声明Socket】        SOCKET类型在Linux中没有定义,直接用int即可。

 

        【Linux: Socket关闭】        close()

 

        【Linux: Socket操作错误返回值】        在Linux中没有定义,判断socket操作是否成功可用返回值是否为-1即可,可将SOCKET_ERROR声明为-1。

 

        【Linux: 设置socket非阻塞】        ioctlsocket在Linux中没有定义,用fcntl替代即可,但要包含fcntl.h头文件。        #include        ... ...        fcntl(server_socket,F_SETFL, O_NONBLOCK);

 

        【Linux: WSA宏】        WSA相关的操作在Linux不必要,直接去掉即可。

 

        【Linux: Select()函数】        Select()函数的第一个参数必须是后几个参数用到的socket中,值最大的数(整型)加1。

 

        【Linux: 编译连接】        连接是使用参数:-lstdc        运行时需要libstdc  .so.5,可在/usr/lib目录中创建一个链接。

 

        【Linux: 错误捕捉】        #include        extern int errno;        int geterror(){return errno;}

 

        【Linux: 异常处理】        当连接断开,还发数据的时候,不仅send()的返回值会有反映,而且还会像系统发送一个异常消息,如果不作处理,系统会出BrokePipe,程序会退出。为此,send()函数的最后一个参数可以设MSG_NOSIGNAL,禁止send()函数向系统发送异常消息。 

 

Linux C++网络编程入门:从Socket到TCP回声服务器实战 网络编程是现代软件开发的基石,它使得不同设备间的数据交换成为可能,支撑着从Web服务到分布式系统的广泛应用。其核心原理在于通过协议(如TCP/IP)和套接字(Socket)抽象,在IP地址和端口号构成的端到端通道上进行可靠或不可靠的数据传输。掌握网络编程对于构建高性能服务器、物联网网关和实时通信系统具有重要技术价值。本文以Linux环境下C++开发为切入点,通过构建一个完整的TCP回声服务器实例,详细解析了Socket创建、绑定、监听、连接及数据收发的完整流程,并深入探讨了字节序转换、阻塞I/O等关键概念。 阅读详情

相关推荐

linux 下socket通信中select的用法实例

Select在Socket编程中还是比较重要的,可是对于初学Socket的人来说都不太爱用Select写程序,他们只是习惯写诸如connect、accept、recv或recvfrom这样的阻塞程序(所谓阻塞方式block,顾名思义,就是进程或是线程执行到这些函数时必须等待某个事件的发生,如果事件没有发生,进程或线程就被阻塞,函数不能立即返回)。可是使用Select就可以完成非阻塞(所谓非阻塞方式non-block,就是进程或线程执行此函数时不必非要等待事件的发生,一旦执行肯定返回,以返回值的不同来反映函数的执行情况,如果事件发生则与阻塞方式相同,若事件没有发生则返回一个代码来告知事件未发生,而进程或线程继续执行,所以效率较高)方式工作的程序,它能够监视我们需要监视的文件描述符的变化情况——读写或是异常。下面详细介绍一下! Select的函数格式(我所说的是Unix系统下的伯克利socket编程,和windows下的有区别,一会儿说明): int select(int maxfdp,fd_set *readfds,fd_set *writefds,fd_set *errorfds,struct timeval *timeout); 先说明两个结构体: 第一,struct fd_set可以理解为一个集合,这个集合中存放的是文件描述符(file descriptor),即文件句柄,这可以是我们所说的普通意义的文件,当然Unix下任何设备、管道、FIFO等都是文件形式,全部包括在内,所以毫无疑问一个socket就是一个文件,socket句柄就是一个文件描述符。fd_set集合可以通过一些宏由人为来操作,比如清空集合FD_ZERO(fd_set *),将一个给定的文件描述符加入集合之中FD_SET(int ,fd_set *),将一个给定的文件描述符从集合中删除FD_CLR(int ,fd_set*),检查集合中指定的文件描述符是否可以读写FD_ISSET(int ,fd_set* )。一会儿举例说明。 第二,struct timeval是一个大家常用的结构,用来代表时间值,有两个成员,一个是秒数,另一个是毫秒数。 具体解释select的参数: int maxfdp是一个整数值,是指集合中所有文件描述符的范围,即所有文件描述符的最大值加1,不能错!在Windows中这个参数的值无所谓,可以设置不正确。 fd_set *readfds是指向fd_set结构的指针,这个集合中应该包括文件描述符,我们是要监视这些文件描述符的读变化的,即我们关心是否可以从这些文件中读取数据了,如果这个集合中有一个文件可读,select就会返回一个大于0的值,表示有文件可读,如果没有可读的文件,则根据timeout参数再判断是否超时,若超出timeout的时间,select返回0,若发生错误返回负值。可以传入NULL值,表示不关心任何文件的读变化。 fd_set *writefds是指向fd_set结构的指针,这个集合中应该包括文件描述符,我们是要监视这些文件描述符的写变化的,即我们关心是否可以向这些文件中写入数据了,如果这个集合中有一个文件可写,select就会返回一个大于0的值,表示有文件可写,如果没有可写的文件,则根据timeout参数再判断是否超时,若超出timeout的时间,select返回0,若发生错误返回负值。可以传入NULL值,表示不关心任何文件的写变化。 fd_set *errorfds同上面两个参数的意图,用来监视文件错误异常。 struct timeval* timeout是select的超时时间,这个参数至关重要,它可以使select处于三种状态,第一,若将NULL以形参传入,即不传入时间结构,就是将select置于阻塞状态,一定等到监视文件描述符集合中某个文件描述符发生变化为止;第二,若将时间值设为0秒0毫秒,就变成一个纯粹的非阻塞函数,不管文件描述符是否有变化,都立刻返回继续执行,文件无变化返回0,有变化返回一个正值;第三,timeout的值大于0,这就是等待的超时时间,即select在timeout时间内阻塞,超时时间之内有事件到来就返回了,否则在超时后不管怎样一定返回,返回值同上述。 返回值: 负值:select错误 正值:某些文件可读写或出错 0:等待超时,没有可读写或错误的文件

一个简单木马程序的实现

实现一个简单的木马,一般须要client和服务端。为了便于实现,就用Windows自带的Telnet软件远程连接,服务端通过监听某个port提供服务。类似于Telnet服务的后台程序。其服务端编程的基本原理例如以下: 1)打开一通信通道(绑定某个port)并告知本地主机,它在某一个地址上接收客户请求。利用Socket和bind函数实现。 2)等待客户请求到达该port。利用listen...

weixin_34183910的博客 563

Intel Arc显卡玩《三角洲行动》报错?手把手教你修改注册表跳过验证

本文针对Intel Arc显卡用户在运行《三角洲行动》时遇到的驱动验证报错问题,提供了详细的解决方案。通过安全修改Windows注册表,添加特定键值以跳过游戏驱动兼容性验证,并结合游戏内图形设置与Intel驱动面板的优化建议,旨在帮助玩家顺利进入游戏并提升游戏帧率与运行稳定性。

weixin_29310605的博客 696

Windows与Linux下的select网络模型对比分析

详尽分析了Windows与Linux下的select模型的不同,各自的实现原理,各自的优点以及一些改进的建议。附有封装好的模型代码和相关注释

走在成长的路上 2492

Oracle EBS MRP 模块测试记录

MRP 模块测试记录        构思:创建Shirt成品物料,它由Cloth和Button组成。1*Shirt=1*Cloth+8*Button。        首先创建这三个物料(复制模板创建),并分配给T02。        创建BOM,将这三个物料关联起来。        分别创建资源(人工和设备)制造Cloth和Button。        分别创建两个部门(HumanDep和Mach

NetSuite 张老师 8165

ISCC-Amy‘s Code CTF-Reverse

ISCC-Amy's Code CTF-Reverse

m0_72904009的博客 682

windows和linux下Select()函数的区别

Select的函数格式(Unix系统下的伯克利socket编程,和windows下的略有区别,体现两个方面:一是select函数的第一个参数,在windows下可以忽略,但在linux下必须设为最大文件描述符加1;二是结构fd_set在两个系统里定义不一样)

公众呺:Linux兵工厂, 加关+私信获取海量Linux干货资料和代码 1893

MATLAB - 使用 RRT 进行挖掘机运动规划

本例演示了如何使用运动规划器在包含障碍物的环境中为挖掘机规划路径。在此示例中,您将以运动树的简化形式为挖掘机建模,然后使用基于采样的运动规划器确定挖掘机在存在障碍物的两个姿势之间的可行路径。在 Simscape™ 多体™ 模型中模拟结果。

机器人控制与仿真应用 1850

linux socket select实例,socket + select 完成伪并发操作的实例

linux使用select()实现socket并发的一些问题,夜影驱动编程小编今天和大家分享给linux使用select()实现socket并发的一些问题,夜影驱动编程小编今天和大家分享给给思路由于是单线程,listen默认是同时5个链接收到连接后尽快accept,就可以再收5个了所以你的问题应该在于尽快把连接建立而不是考虑如何接收更多的等待连接socket select 能保证异步并发吗关于so...

weixin_29522501的博客 234

中国农业银行——轻量式云原生应用平台(轻云平台)

2021年10月,中国人民银行等联合发布了《关于规范金融业开源技术应用与发展的意见》(银办发〔2021〕146 号),规范金融机构合理应用开源技术,提高应用水平和自主可控能力,促进开源技术健康可持续发展。前期,为助力成员单位做好开源技术应用与发展工作,北京金融科技产业联盟开源专委会组织了金融业开源技术应用、创新等方面的案例征集,现对部分优秀案例进行宣传,发挥先进典型示范引领作用。申报单位:中国农业银行股份有限公司技术领域:云原生、无服务器架构(Serverless)、DevOps。

银行信息系统应用架构详解 2392

告别标注地狱!YOLO+CLIP多模态零样本检测全实战:图文联合推理,想检测什么直接输文字,不用训模型

这套方案我给朋友的超市用了快3个月,运行极其稳定,临期商品的检测准确率能到96%,后续加了“货架空货检测”“通道杂物堆积检测”,都是改一行文本就搞定,完全不用重新开发,朋友说省了十几万的定制开发费用。很多做计算机视觉的朋友,总觉得目标检测必须标数据、训模型,其实不是的。现在多模态大模型的能力已经足够强,把YOLO的定位能力和CLIP的图文泛化能力结合起来,就能用极低的成本,搞定绝大多数定制化检测需求。对于我们开发者来说,技术的价值从来不是炫技,而是用最简单的方案,解决最实际的问题。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 516

Windows和Linux IO模型简单介绍

Windows和Linux IO模型简单介绍Socket IO模型Windows下的Socket IOLinux下的Socket IO两个操作系统下IO模型的区别差异 Socket IO模型 IO模型相信大家都很熟悉,主要就分下面几种: 同步 异步 阻塞 非阻塞 同步和异步就不多解释了,下面主要分析一下阻塞。 很多人会将异步和非阻塞搞混,异步一定是非阻塞的吗? 阻塞:指调用结果返回之前,当前...

Doub1's Blog 1096

Android 14.0 SystemUI状态栏居中显示时间和修改时间显示样式

在14.0的系统rom定制化开发中,在systemui状态栏系统时间默认显示在左边和通知显示在一起,但是客户想修改显示位置,想显示在中间,所以就要修改SystemUI 的Clock.java 文件这个就是管理显示时间的,居中显示的话就得修改布局文件了

安卓兼职framework和app工程师的博客 978

Linux/Windows下Socket通信模型总结

Linux/Windows下Socket通信模型总结

ChrisMM 722

4、硬件工程师笔试面试知识器件篇——电阻(2025版本)

本文系统介绍了电阻的基础知识与应用。首先阐述了电阻的定义、工作原理及类型(固定/可变电阻),详细说明了常见电阻材料(碳膜、金属膜、线绕等)的特性与标记方法。重点分析了电阻在电路设计中的关键参数:功率计算需考虑1.5-2倍安全裕度,温度系数影响电路稳定性。文章还对比了不同封装形式(轴向/贴片/功率封装等)的适用场景,特别强调高功率电路需选择专用封装并做好散热设计。最后指出电路仿真可优化电阻选择,并列举了相关电子元件在设计中同样需要仿真验证。全文为硬件工程师提供了电阻选型的实用指导。

XU157303764的博客 5210

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Windows Socket和Linux Socket编程区别

Socket 编程 windows到Linux代码移植遇到的问题   1、一些常用函数的移植   http://www.vckbase.com/document/viewdoc/?id=1586   2、网络 ------ 转载 & 修改(待整理)   socket相关程序从windows移植到linux下需要注意的   1)头文件   windows下winsock.

311

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

windows和linux套接字中的select机制浅析

转载自:http://www.cnblogs.com/lidabo/p/3804411.html 先来谈谈为什么会出现select函数,也就是select是解决什么问题的? 平常使用的recv函数时阻塞的,也就是如果没有数据可读,recv就会一直阻塞在那里,这是如果有另外一个连接过来,就得一直等待,这样实时性就不是太好。 这个问题的几个解决方法:1. 使用ioctlsocket函

qinm的专栏 1366

老版QQ原生表情gif动态

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

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

linux socket ioctl,Windows socket之重叠IO:事件通...-VC 一个函数实现listbox 水平滚...-linux ioctl实验 对初学ioctl很有帮助_169...

Windowssocket重叠IO模型开发。利用套接字重叠IO模型,应用程序能一次投递一个或多个IO请求,当系统完成IO操作后通知应用程序。该模型以win32异步IO机制为基础。与前面介绍的所有IO模型相比较,该模型是真正意义上的异步IO模型,它能使Windowssocket应用程序达到更高的性能。关于异步IO机制可以参考:《Windows核心编程系列》十谈谈同步设备IO与异步设备IO之异步设...

weixin_30110807的博客 204

socket阻塞与非阻塞,同步与异步

socket阻塞与非阻塞,同步与异步 作者:huangguisu 转自:http://blog.youkuaiyun.com/hguisu/article/details/7453390 1. 概念理解 在进行网络编程时,我们常常见到同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock)四种调用方式: 同步/异步主要针对C端...

weixin_30807779的博客 69

Socket编程核心:从TCP/UDP到select多路复用实战详解

网络编程是构建分布式系统和网络应用的基础,其核心在于实现不同主机间进程的数据交换。Socket(套接字)作为操作系统提供的网络编程接口,封装了底层协议细节,使应用程序能够像操作文件一样进行网络通信。从原理上看,Socket基于TCP/IP协议栈,通过IP地址标识主机、端口号标识进程,支持面向连接的TCP流式传输和无连接的UDP数据报传输。在技术价值层面,Socket编程实现了网络通信的标准化与跨平台能力,支撑了从Web服务、实时通信到物联网等广泛场景。针对高并发场景,I/O多路复用技术如select函数应运

weixin_30851867的博客 330

非阻塞connect(异步connnect)

在 socket 是阻塞模式下 connect 函数会一直到有明确的结果才会返回(或连接成功或连接失败),如果服务器地址“较远”,连接速度比较慢,connect 函数在连接过程中可能会导致程序阻塞在 connect 函数处好一会儿(如两三秒之久),虽然这一般也不会对依赖于网络通信的程序造成什么影响,但在实际项目中,我们一般倾向使用所谓的异步的 connect 技术,或者叫非阻塞的 connect。...

weixin_42226134的博客 1782

socket阻塞与非阻塞,同步与异步、…

socket阻塞与非阻塞,同步与异步   1. 概念理解        在进行网络编程时,我们常常见到同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock)四种调用方式: 同步:       所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回。也就是必须一件一件事做,等前一件做完了才能做下一件事。   例如普通B/S模式(同步):提

不入流小码农 508

Windows平台UDP Socket编程实战:从基础到高性能网络通信

UDP(用户数据报协议)是一种无连接、不可靠但高效的网络传输协议,其核心原理在于面向数据报的通信模型,每个数据包独立传输且边界清晰。相比TCP的可靠连接,UDP具有更小的协议开销和更低的延迟,这使得它在实时性要求高的场景中展现出独特的技术价值。在视频流媒体、在线游戏、物联网设备通信和局域网服务发现等应用场景中,UDP能够有效避免TCP重传机制带来的延迟累积。Windows平台下的UDP Socket编程涉及Winsock库的特殊行为,例如Socket错误码处理(如WSAECONNRESET 10054)和缓

weixin_30788619的博客 371
上一篇: 【转】Windows下如何枚举所有进程(含代码)
下一篇: 【转】用Python发送email示例
zdragon2002
博客等级 码龄21年 37粉丝 5原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值