Winsock程序设计初步之<四> Winsock函数用法说明

winsock 函数详解 Winsock在常见的Windows平台上有两个主要的版本,即Winsock1和Winsock2。编写与Winsock1兼容的程序你需要引用头文件WINSOCK.H,如果编写使用Winsock2的程序,则需要引用WINSOCK2.H。此外还有一个MSWSOCK.H头文件,它是专门用来支持在Windows平台上高性能网络程序扩展功能的。使用WINSOCK.H头文件时,同时需要库文件WSOCK32.LIB,使用WINSOCK2.H时,则需要WS2_32.LIB,如果使用MSWSOCK.H中的扩展API,则需要MSWSOCK.LIB。正确引用了头文件,并链接了对应的库文件,你就构建起编写WINSOCK网络程序的环境了。 立即下载

WSAStartup()

连结应用程序与Winsock.DLL 的第一个函数。

格 式:

int WSAStartup( WORD wVersionRequested,LPWSADATA lpWSAData )

参 数:

wVersionRequested 欲使用的 Windows Sockets API 版本

lpWSAData 指向 WSADATA 资料的指标

传回值:

成功 - 0

失败 - WSASYSNOTREADY / WSAVERNOTSUPPORTED / WSAEINVAL

说明:

此函数「必须」是应用程序呼叫到 Windows Sockets DLL 函数中的第一

个函数呼叫成功后,才可以再呼叫其他 Windows Sockets DLL 的函数。此函数亦让使用者可以指定要使用的 Windows Sockets API 版本,

及获取设计者的一些信息。

socket()

建立Socket。

格 式:

SOCKET socket( int af, int type, int protocol )

参 数:

af 目前只提供 PF_INET(AF_INET)

type Socket 的型态 (SOCK_STREAM、SOCK_DGRAM)

protocol 通讯协定(如果使用者不指定则设为0)

传回值:

成功 - Socket 的识别码

失败 - INVALID_SOCKET(呼叫 WSAGetLastError() 可得知原因)

说明:

此函数用来建立一 Socket,并为此 Socket 建立其所使用的资源。

Socket 的型态可为 Stream Socket 或 Datagram Socket。

bind()

指定 Socket 的 Local 地址 (Address)。

格 式:

int bind( SOCKET s, const struct sockaddr FAR *name,int namelen );

参 数:

s Socket的识别码

name Socket的地址值

namelen name的长度

传回值:

成功 - 0

失败 - SOCKET_ERROR (呼叫 WSAGetLastError() 可得知原因)

说明:

此一函数是指定 Local 地址及 Port 给某一未定名之 Socket。使用者若不

在意地址或 Port 的值,那麽他可以设定地址为 INADDR_ANY,及 Port 为 0;那么Windows Sockets 会自动将其设定适当之地址及 Port (1024 到 5000之间的值),使用者可以在此 Socket 真正连接完成后,呼叫 getsockname() 来获知其被设定的值。

bind() 函数要指定地址及 port,这个地址必须是执行这个程序所在机器的 IP

地址,所以如果读者在设计程序时可以将地址设定为 INADDR_ANY,这样

Winsock 系统会自动将机器正确的地址填入。如果您要让程序只能在某台机器上

执行的话,那么就将地址设定为该台机器的 IP 地址。由於此端是 Server 端,所

以版主们一定要指定一个 port 号码给这个 socket。

listen()

设定 Socket 为监听状态,准备被连接。

格 式:

int listen( SOCKET s, int backlog );

参 数:

s Socket 的识别码

backlog 未真正完成连接前(尚未呼叫 accept 前)彼端的连接要求的最大

个数

传回值:

成功 - 0

失败 - SOCKET_ERROR (呼叫 WSAGetLastError() 可得知原因)

说明:

使用者可利用此函数来设定 Socket 进入监听状态,并设定最多可有多少

个在未真正完成连接前的彼端的连接要求。(目前最大值限制为 5, 最小值为1)

connect()

要求连接某一 TCP Socket 到指定的对方。

格 式:

int connect( SOCKET s, const struct sockaddr

FAR *name, int namelen );

参 数:

s Socket 的识别码

name 此 Socket 想要连接的对方地址

namelen name的长度

传回值:

成功 - 0

失败 - SOCKET_ERROR (呼叫WSAGetLastError()可得知原因)

说明:

此函数用来向对方要求建立连接。若是指定的对方地址为 0 的话,会传

回错误值。当连接建立完成后,使用者即可利用此一 Socket 来做传送或接收资料之用了。

accept()

接受某一 Socket 的连接要求,以完成 Stream Socket 的连接。

格 式:

SOCKET accept(SCOKET s, SOCKADDR *addr,int FAR *addrlen )

参 数: s Socket的识别码

addr 存放来连接的彼端的地址

addrlen addr的长度

传回值:

成功 - 新的Socket识别码

失败 - INVALID_SOCKET (呼叫 WSAGetLastError() 可得知原因)

说明:

Server 端的应用程序呼叫此一函数来接受 Client 端要求的 Socket 连接动作请求。

closesocket()

关闭某一Socket。

格 式:

int closesocket( SOCKET s );

参 数:

s Socket 的识别码

传回值:

成功 - 0

失败 - SOCKET_ERROR (呼叫 WSAGetLastError() 可得知原因)

说明:

此一函数是用来关闭某一 Socket 。

WSACleanup()

结束 Windows Sockets DLL 的使用。

格 式:

int WSACleanup( void );

参 数: 无

传回值: 成功 - 0

失败 - SOCKET_ERROR (呼叫 WSAGetLastError() 可得知原因)

说明:当应用程序不再需要使用Windows Sockets DLL 时,须呼叫此一函数来

注销使用,以便释放其占用的资源。

send()

使用连接式(connected)的 Socket 传送资料。

格 式:

int send( SOCKET s, const char FAR *buf,

int len, int flags );

参 数:

s Socket 的识别码

buf 存放要传送的资料的暂存区

len buf 的长度

flags 此函数被呼叫的方式

传回值:

成功 - 送出的资料长度

失败 - SOCKET_ERROR (呼叫 WSAGetLastError() 可得知原因)

说明:

此函数用于将信息从本端通过socket发送到远程端。

recv()

自 Socket 接收资料。

格 式:

int recv( SOCKET s, char FAR *buf, int len, int flags );

参 数:

s Socket 的识别码

buf 存放接收到的资料的暂存区

len buf 的长度

flags 此函数被呼叫的方式

传回值:

成功 - 接收到的资料长度 (若对方 Socket 已关闭,则为 0)

失败 - SOCKET_ERROR (呼叫 WSAGetLastError() 可得知原因)

说明:

此函数用来自连接式的 Datagram Socket 或 Stream Socket 接收资料。

对 Stream Socket 言,版主们可以接收到目前 input buffer 内有效的资料,但其数量不超过 len 的大小。

WSAStartup()

连结应用程序与 Windows Sockets DLL 的第一个函数。

格 式:

int WSAStartup( WORD wVersionRequested,LPWSADATA lpWSAData );

参 数: wVersionRequested 可使用的 Windows Sockets API 最高版本

lpWSAData 指向 WSADATA 资料的指标

传回值:

成功 - 0

失败 - WSASYSNOTREADY / WSAVERNOTSUPPORTED / WSAEINVAL

说明:

此函数「必须」是应用程序呼叫到 Windows Sockets DLL 函数中

的第一个,也唯有此函数呼叫成功后,才可以再呼叫其他 Windows Sockets

DLL 的函数。此函数亦让使用者可以指定要使用的 Windows Sockets

API 版本,及获取设计者的一些信息。

 

基于HPM5E00的EtherCAT从站开发实战:从硬件解析到软件调试 实时工业以太网通信是工业自动化与运动控制领域的核心技术,它通过硬件与协议栈的协同,实现了微秒级的高确定性数据交换。其技术价值在于为多轴同步、机器人控制等复杂场景提供了高实时性、高同步精度的通信基础。在应用场景上,广泛服务于数控机床、包装机械、半导体设备等高端制造领域。本文聚焦于EtherCAT从站开发,深入解析了基于先楫HPM5E00高性能MCU与专用从站控制器(ESC)的硬件架构设计,并详细阐述了开源协议栈SOES的移植、对象字典配置以及过程数据(PDO)映射等核心软件实践,为开发者快速构建稳定可靠的实时 阅读详情

相关推荐

IEPE传感器4mA恒流源接口电路

另外传感器的偏置电压大概在10V多点,一般接个电容把直流分量去掉。这里我们要把恒流源的电流设置在4毫安左右,R1取33Ω差不多正好。经过CR的隔直流电路后的波形是这样的。

老白的博客 6115

Windows系统缺失winsock.dll文件导致程序打不开解决办法

其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库,这时你可以下载这个winsock.dll文件(挑选合适的版本文件)把它放入到程序或系统目录中,当我们执行某一个.exe程序时,相应的DLL文件就会被调用,因此将缺失的文件放回到原目录之后就能打开你的软件或游戏了.那么出现winsock.dll丢失要怎么解决?

file 735

不用U盘也能装Ubuntu?手把手教你用EasyUEFI搞定双系统(附企业版资源)

本文详细介绍了无需U盘即可安装Ubuntu双系统的方法。通过使用EasyUEFI工具,在Windows环境下创建虚拟启动分区并配置UEFI引导,即可直接从硬盘启动Ubuntu安装程序。该方法特别适合开发者或技术爱好者快速搭建Linux开发环境,操作安全便捷,无需额外物理介质。

weixin_29215391的博客 286

使用Winsock:Winsock入门

以下是Windows套接字编程入门的分步指南。 它旨在提供对基本Winsock函数和数据结构的理解,以及它们如何协同工作。 用于说明的客户端和服务器应用程序是一个非常基本的客户端和服务器。 Microsoft Windows软件开发工具包(SDK)附带的示例中包含更高级的代码示例。 客户端和服务器应用程序的前几个步骤相同。 关于服务器和客户端 创建一个基本的Winsock应用程序 正在初...

一世豁然的专栏 2万+

动态数据脱敏技术分析

在当前国内信息安全热潮中,数据脱敏作为数据安全的重要一环得到了业界的认可与重视。早在2012年,数据脱敏首次作为一个单独的魔力象限由Gartner发布,Gartner在2014年又提出了:按照数据使用场景,将数据脱敏分为静态数据脱敏(Static data masking-SDM )与动态数据脱敏(Dynamic data masking-DDM )。 可能有人望文生义,认为动态数据脱敏一定比静态数据脱敏高级。非也非也,静态or动态,取决于脱敏的使用场景,主要是以使用场景为由来选择合适的数据脱敏的模式。 本

美创科技的博客 4676

VCS多lib编译实战:如何高效处理Verilog模块重命名与分开编译

本文深入探讨了在复杂SoC设计中,如何利用VCS工具实现多库编译,以高效处理Verilog模块重命名与分开编译的工程难题。通过解析synopsys_sim.setup配置、Config映射机制,并提供完整的自动化脚本实战指南,帮助工程师构建健壮、可维护的编译环境,从而显著提升大型项目的编译效率和代码管理灵活性。

weixin_29169505的博客 357

WinSock控件的使用(翻译原创)

WinSock控件能够通过UDP协议(用户数据报协议)或TCP协议(数据传输协议)连接到远程的机器并进行数据交换。这两种协议都能用来创建客户端和服务端应用程序。就像定时器控件一样,WinSock控件运行时没有一个可视的界面。可能的用途    创建客户端应用程序,它能在信息到达中央服务器之前把用户的信息收集起来。    创建服务端应用程序,它能作为来自多个用户的数据一个集中处理点。创建“聊天”程序。

欲穷千里目,更上一层楼 2143

嵌入式工程师成长之路(3)——PCB设计

带有目的的学:要知道,PCB板子做出来需要我们给厂家哪些东西,我们设计板子的时候,需要遵循哪些设计规范,防止画好也是块废板子。然后再逐步开始学习画板。

云轩阁 8万+

网络编程Winsock——connect

connect 与特定的套接字建立连接 int connect( _In_ SOCKET s, _In_ const struct sockaddr *name, _In_ int namelen );

当蝴蝶在南半球拍了两下翅膀,它就会稍微飞高一些。 4977

北斗导航 | 卡尔曼滤波与因子图优化对比(附图优化matlab代码)

- 历史数据利用:因子图通过滑动窗口保留历史状态,优化时联合多帧数据;卡尔曼滤波仅依赖当前和上一帧状态 。 - 迭代优化:因子图通过多次迭代逼近最优解,卡尔曼滤波仅单次更新 。 - 误差抑制:因子图的多次线性化可有效抑制非线性误差(如GNSS伪距观测的非线性) 。

尘世冰封的专栏 1303

190、LLC谐振变换器的样机调试实战(问题定位)

这篇实战笔记总结了LLC谐振变换器样机调试中的五大典型问题及解决方案:1)空载炸机源于谐振电容纹波电流能力不足;2)轻载啸叫因控制环路不稳定,需调整突发模式阈值;3)MOSFET过热由死区时间不当导致,需精确优化实现ZVS;4)输出纹波大由PCB布局耦合引起,需优化共模抑制;5)启动过冲需延长软启动时间。作者强调调试需结合示波器、热成像仪等工具,理论计算与实测并重,并详细记录每次参数调整。文章指出LLC调试是不断试错的过程,关键是通过现象分析本质原因。

Jack010169的博客 49

非阻塞connect用法

在广域网中,connect函数可能需要比较长的时间返回(等待对端发送ack),所以我们通常需要非阻塞connect。下面分别实现windows和linux的非阻塞connect,并作出对比。 先大概总结一下winsock和linuxsocket用法区别: winsock需要WSAStartup和WSACleanupleanup进行初始化和反初始化,linuxsocket不用 关闭套接字,...

回头太难 5612

YOLOv11 改进 - 注意力机制 | 空间增强注意力SEAM(Spatially Enhanced Attention Module)提升遮挡场景检测鲁棒性

本文介绍了分离与增强注意力模块(SEAM)在YOLOv11中的结合应用。SEAM模块旨在增强面部特征学习能力,特别是处理面部遮挡问题。它采用多头注意力机制强调面部区域、抑制背景区域,第一部分使用深度可分离卷积减少参数并学习通道重要性,通过1x1卷积增强通道联系,利用两层全连接网络融合通道信息,经指数归一化后作为注意力权重与原始特征相乘。我们将SEAM集成到YOLOv11的检测头中,并进行相关注册和配置。实验表明,该方法有助于提升模型检测性能。

魔改工程师的博客 1666

jQuery属性和DOM操作

获取匹配元素集中第一个元素的自定义属性的值为每个匹配元素设置一个或多个自定义属性会删除data()函数给匹配元素属性添加的数据 和 data()函数绑定的自定义属性。data函数添加的属性会被移除,但是如果属性同时在标签上定义了就不会被移除。

Welisit的博客 1668

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

jQuery对象和DOM对象的转换

jQuery对象:通过jQuery包装DOM对象后产生的对象。 注意:jQuery对象无法使用DOM对象的任何方法,同理,DOM对象也无法使用jQuery对象的任何方法。 所以涉及到转换: 其中DOM对象也包含了一些jQuery对象没有包含的成员,但总体来说,jQuery对象要丰富得多。 如果获取的对象是jQuery对象,在变量前加上$ var $variable=jQuery 对象; 获取的是...

小灰狼与大白兔的博客 7506

老版QQ原生表情gif动态

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

dom对象和jQuery对象以及之间的转换

dom对象和jQuery对象的转换 1. dom对象 dom对象是原生js选择器获取到的对象。 document.getElementById(); document.getElementsByTagName(); 而dom对象只能调用dom方法或者属性。 比如我们给一个div设置背景色为红色: <script src="jquery-1.12.4.js" type="text/java...

刘伟佳的博客 1512

VC中sqlite的使用

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

jquery对象和DOM对象的相互转换

在讨论jquery对象和DOM对象的相互转换之前,先约定好定义变量的风格如果获取的是jquery对象,那么在变量前面加上$,例如 var $varible = jquery对象; 如果获取的是DOM对象,则定义如下: var varible = DOM对象; 1.jquery对象转成DOM对象: jquery对象不能使用DOM中的方法,但如果对jquery对象所提供的方法不熟悉,或者没有jquer...

weixin_44260327的博客 446

【jQuery】DOM对象和jQuery对象

<script src="jquery-1.7.1.js"></script> <script> $(function(){ $("#btn").click(function(){ var className=$("#txtClass").val(); $("#p").addClass(className); }); $("#btn2...

apr_su 373

jQuery对象和DOM对象的相互转换

DOM对象:通过Js中的getElementsByTagName或者getElementsById来获取元素节点,这样的元素就是DOM对象。 jQuery对象:通过jQuery包装DOM对象后产生的对象,jQuery对象是jQuery独有的,其可以使用jQuery里的方法。例如: $("#test").html() //获取ID为test的元素内的html代码。其中.html()是jQuery里的方法 这段代码等同于用: document.getElementById("test").innerHTML

ianutt的博客 2596

jquery对象和dom对象是怎样转换的?

1)jquery转DOM对象:jQuery 对象是一个数组对象,可以通过[index]的丰富得到相应的DOM对象还可以通过get[index]或者get(index)去得到相应的DOM对象。 2)DOM对象转jQuery对象:$(DOM对象) ...

weixin_43708090的博客 2319

jQuery对象和DOM对象

1. jQuery对象是什么? jQuery对象就是通过jQuery($())包装DOM对象后产生的对象 2. jQuery对象的特性 jQuery对象是独有的,如果一个对象时jQuery对象,那么他就可以使用jQuery里的方法 jQuery对象无法使用DOM对象的任何方法,反之,DOM对象无法使用jQuery对象的任何方法 3. 获取jQuery对象 需要获得jQuery对象,只需要在变量面前加上$ var $variable = jQuery对象 var variable = DOM对象

猫先生的博客 423

DOM对象和JQuery对象的转换

jQuery 对象就是通过jQuery包装DOM对象后产生的对象。 jQuery 对象是 jQuery 独有的. 如果一个对象是 jQuery 对象, 那么它就可以使用 jQuery 里的方法: $(“#test”).html(); ​ 比如: ​ $("#test").html() 意思是指:获取ID为test的元素内的html代码。其中html()是jQuery里的方法 ​ ...

Apple_Boy的博客 689

jquery class点击_jQuery和DOM操作

Jquery的安装和使用安装:下载JQuery文件并把文件放到web项目中下载网址:http://jquery.com使用:直接引入jQuery的核心JS文件注意:(1)引入jQuery的script标签可以放在推荐放在body标签后(2)如果script标签设置了src属性,则在script双标签中写的js代码无效4.常用操作:5.DOM对象与jQuery对象之间的相互转换:(1)DOM =...

weixin_36326008的博客 907

jQuery对象和DOM对象的区别

jQuery对象和DOM对象使用说明,需要的朋友可以参考下。1.jQuery对象和DOM对象第一次学习jQuery,经常分辨不清哪些是jQuery对象,哪些是 DOM对象,因此需要重点了解jQuery对象和DOM对象以及它们之间的关系.DOM对象,即是我们用传统的方法(javascript)获得的对象,jQuery对象即是用jQuery类库的选择器获得的对象;复制代码 代码如下:var domOb

影子的影子在这里看你 321

DOM对象和jQuery对象的相互转换

     在讨论jQuery对象和DOM对象的相互转换之前,先约定好定义变量的风格。如果获取的对象是 jQuery 对象,那么在变量前面加上$,例如: var $variable=jQuery对象; 如果获取的是DOM对象,则定义如下: var varriable=DOM对象; 1、jQuery 对象转成 DOM 对象   ...

qq_45026311的博客 207

jquery获取script标签 变量值_jQuery从另一个HTML页面获取变量值

I have got an html page with this content, called "page1.html":contentvar x=5;var y=2;Some other contentIn another html page, I'd like to get the value of the variable "x" (5).This is the main page:An...

weixin_39823299的博客 809
上一篇: Winsock程序设计初步之<三> 源程序实例(2)
cnviolet
博客等级 码龄26年 10粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值