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 版本,及获取设计者的一些信息。

 

Claude Code 学习笔记之一:理解 Agentic Loop 与内置工具 本文介绍了Claude Code这一终端智能助手的工作原理与使用方式。作者从ABAP开发经验出发,指出学习Claude Code的高级用法具有长期价值。文章详细解析了Claude Code的Agentic Loop机制:通过大语言模型进行推理,借助各类工具执行任务,并循环收集上下文、执行操作、验证结果三个步骤。系统阐述了Claude Code支持的五大类工具及其扩展方式,说明了其访问本地资源的范围和自治处理能力,同时介绍了权限模式等安全机制。最后提供了从小任务开始、充分探索、及时引导、使用CLAUDE.md 阅读详情

相关推荐

偏最小二乘结构方程(PLS-SEM)_TomatoSCI分析日记

①模型整体拟合指标(Goodness-of-Fit, GOF),这个可以看做整体的R方了,上限是1;②指标载荷的具体值;然而,当数据中包含潜变量(即由多个观测指标组合而成的综合概念)时,贝叶斯结构方程不太适用。指标过少(1-2 个)会削弱潜变量的解释力,而指标过多可能增加噪声,影响模型稳定性。如果指标较多,可考虑进一步划分潜变量,但应确保每个指标有意义。掌握这两类方法后,在处理多变量、因果或路径分析研究时,可以根据数据特点与研究需求灵活选择。对于一般的多变量研究,这两类结构方程均为常用且有效的分析方案。

qq_44684643的博客 2011

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

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

file 735

驯服电源尖峰:从BUCK/BOOST环路剖析到高di/dt噪声的实战抑制

本文深入探讨了电源系统中高di/dt噪声的产生机制及抑制方法,通过BUCK/BOOST电路的环路分析,揭示了电流路径不连续导致的电压尖峰问题。文章提供了实用的PCB布局技巧和噪声抑制策略,包括最短回路原则、铺铜优化和过孔阵列战术,帮助工程师有效降低EMI噪声,提升电源系统的稳定性。

weixin_29587015的博客 275

使用Winsock:Winsock入门

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

一世豁然的专栏 2万+

台达伺服B3驱动器参数的设定和CN1的接法

3. B2的电子齿轮比是直接设定P1-44(分子)和P1-45(分母)就就可以的,但是B3的有个隐藏的细节,就是P1-44的默认值77216不用去更改,这是官方客服说的,需要改的是P1-45这个参数,比如说,我使用的丝杆螺距是5mm的,那么就是以5000脉冲走完5mm为一圈,则就把P1-45设定为5000即可;我的是三菱FX3S系列的PLC,是NPN型的,输出点是24V-作为信号的,所以接41、37,具体可参考B3的。,跟着客服的讲解操作才解决的,以下就是解决方法,希望能够帮到需要的各位。

qq_38681017的博客 1万+

Halcon深度学习实战:基于异常值检测的工业缺陷精准识别方案

本文详细介绍了Halcon深度学习中的异常值检测技术在工业缺陷识别中的应用。该方法仅需少量正常样本即可训练,能有效应对未知、多变的缺陷类型,显著降低项目启动门槛。文章提供了从数据准备、模型训练、参数调优到产线部署的完整实战指南,并分享了关键的性能优化与避坑经验。

weixin_29042035的博客 243

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

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

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

从d、q轴电流到电机性能:FOC控制中角度偏移的实战影响与调试策略

本文深入探讨了永磁同步电机FOC控制中d、q轴电流与角度偏移对电机性能的影响及调试策略。通过分析角度偏移导致的效率下降、电流异常等问题,提供了实用的四步调试法和参数优化技巧,帮助工程师有效提升电机控制精度和效率。

weixin_29264201的博客 294

网络编程Winsock——connect

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

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

libnice和coturn这两个库有交叉实现的地方,具体有啥区别?

TurnAdmin:是一个TURN的管理工具,此工具能被用来管理用户账号的增删改查。 TurnServer:是TURN和STUN的服务器实现。 Turnutils_uclient: 模拟多个UDP、TCP、TLS或DTLS客户端 Turnutils_peer: 一个简单的无状态UDP-ECHO服务器,用作中继模式中的最终服务器 Turnutils_stunclient: 一个简单的STUN客户端例子 Turnutils_rfc5769check: 检查STUN/TURN协议实现的正确性。 我们..

Langeldep的专栏 1320

00 — Intel xe SVM 内核实现精读系列专栏导读

本文系统介绍了Intel Xe GPU的共享虚拟内存(SVM)实现机制。第一部分通过概念地图阐述SVM的六个核心概念及其关系;第二部分通过三个测试用例解析SVM关键功能:fault生命周期验证、madvise与VRAM迁移、跨GPU一致性;第三部分深入内核实现,包括初始化/销毁流程、Page Fault处理、MMU Notifier失效路径、异步垃圾回收、VRAM迁移机制、madvise实现原理,以及与ROCm SVM的对比。文章建议按功能模块顺序学习,从基本概念到测试用例,再深入内核实现细节,最后对比不同

图形/计算GPU的驱动与虚拟化技术分享园地 1674

非阻塞connect用法

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

回头太难 5612

《Zephyr OS 入门与实战》第5章:内存管理策略

【代码】《Zephyr OS 入门与实战》第5章:内存管理策略。

2301_79143213的博客 349

jQuery属性和DOM操作

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

Welisit的博客 1668

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

jQuery对象和DOM对象的转换

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

小灰狼与大白兔的博客 7506

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

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

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

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、付费专栏及课程。

余额充值