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

 

静态与动态LACP链路聚合:原理、配置与排错实战指南 链路聚合技术是提升网络带宽与可靠性的核心方案,通过将多个物理端口逻辑捆绑,实现带宽叠加与链路冗余。其原理基于IEEE 802.3ad标准,通过负载均衡算法将数据流分布到不同物理链路,既避免了数据包乱序,又提升了整体吞吐量。该技术的核心价值在于消除单端口瓶颈、提供毫秒级故障切换,并能简化网络拓扑管理。在企业服务器接入、数据中心互联及虚拟化平台等场景中,链路聚合已成为构建高可用网络的基础。实践中,动态LACP模式通过协议报文协商,能主动检测链路故障并防止配置错误导致的网络环路,相比静态聚合更为可靠。本文将深入解 阅读详情

相关推荐

数理逻辑1 -- 命题演算1

一直对逻辑的东西很感兴趣,尤其最近做的东西和AI相关,因此下定决心系统地学习数理逻辑。这些笔记并不是严谨的描述,只是作为一些概念的快速参考,以及加入一些个人认为好玩的公式、定理和推导。 简单来说,数理逻辑系统是由一串“符号”组成的系统,基本元素是那一堆“符号”,由“符号”组成“式子”。逻辑系统并不关心“式子”是否对错,只关心“式子”是否存在,也即是假定存在某些“式子“,再确定”推导规则“(Rule

Jason渣神的专栏 1832

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

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

file 735

从仿真到打样:PMOS栅极泄放电路设计全流程复盘与三个踩坑点总结

本文详细复盘了PMOS栅极泄放电路从仿真到打样的全流程设计,重点总结了三个关键踩坑点:三极管BE结过压击穿、静态功耗超标和栅极振荡现象。通过优化缓启动电路、改进保护设计和布局调整,最终实现18ms开通时间、190μs关断时间和8μA静态功耗的工业级性能指标,为类似电源开关设计提供实用参考。

weixin_28693683的博客 371

使用Winsock:Winsock入门

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

一世豁然的专栏 2万+

PX4飞控 vs 大疆A3:开源与闭源方案在无人机硬件架构中的实战对比

本文深入对比了PX4飞控与大疆A3在无人机硬件架构上的差异,分析了开源与闭源方案在工业级无人机开发中的优劣势。通过详细的硬件配置、传感器兼容性、扩展能力及性能测试数据,为开发者提供选型指南,特别适合需要自定义算法和复杂功能集成的项目。

a3b4c5的博客 888

基于大模型的恶性胸腔积液全周期预测与诊疗方案研究

本研究基于大模型技术构建了恶性胸腔积液全流程预测与诊疗体系,涵盖术前风险评估、术中方案优化、术后恢复预测及并发症预防。通过整合多源医疗数据,实现了手术风险概率预测(准确率80%)、并发症预警(AUC值0.85)及个性化康复方案制定,显著提升诊疗精准度。研究创新性地将Transformer架构与多模态数据融合,在100例临床验证中显示良好性能,但存在数据样本局限、模型可解释性不足等问题。未来将扩大多中心临床验证,优化算法可解释性,探索与基因检测等技术的结合应用,推动恶性胸腔积液的精准诊疗发展。

嵌入式毕设/课设资料清单(速查手册·文档模板·题库,持续更新)→ 见最新文章 1898

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

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

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

Oracle 19c RAC安装踩坑实录:OpenSSH 8.x版本与OUI的“兼容性战争”及一劳永逸的解决思路

本文深入解析Oracle 19c RAC在Linux8环境中部署时遇到的OpenSSH 8.x版本兼容性问题,特别是[INS-06006]错误的根源与解决方案。从协议层分析冲突本质,提供SCP包装器技术、官方补丁应用指南及现代化部署体系构建三种解决方案,帮助企业高效完成RAC安装并规避类似问题。

weixin_42648844的博客 458

网络编程Winsock——connect

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

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

保姆级教程:在PyCharm里用Continue插件一键接入DeepSeek API(含乱码修复)

本文详细介绍了如何在PyCharm中通过Continue插件无缝集成DeepSeek API,提供从环境准备到高级配置的全流程指南,包括解决常见的乱码问题。通过本教程,开发者可以轻松实现AI编程助手的高效调用,提升代码编写和调试效率。

weixin_30275415的博客 850

【点云概述】什么是点云、来源、种类、特点、处理?

【点云概述】什么是点云、来源、种类、特点、处理?点云(point cloud)是空间中点的数据集,可以表示三维形状或对象,通常由三维扫描仪获取。点云中每个点的位置都由一组笛卡尔坐标 ( X , Y , Z ) (X, Y, Z) (X,Y,Z)描述,有些可能含有色彩信息 ( R , G , B ) (R, G, B) (R,G,B)或物体反射面强度(Intensity)信。

智慧空间实验室 9820

非阻塞connect用法

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

回头太难 5612

WPF高级 | WPF 与数据库交互:连接、查询与数据更新

WPF高级 | WPF 与数据库交互:连接、查询与数据更新,在现代应用程序开发中,数据的存储和管理至关重要。Windows Presentation Foundation(WPF)作为一款强大的图形界面开发框架,常常需要与数据库进行交互,以实现数据的持久化存储、读取和更新。本文将深入探讨 WPF 与数据库交互的各个方面,包括数据库连接的建立、数据查询的执行以及数据更新的操作,并通过丰富的代码示例和详细的概念解释,帮助读者掌握这一关键技术。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 6万+

jQuery属性和DOM操作

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

Welisit的博客 1668

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

jQuery对象和DOM对象的转换

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

小灰狼与大白兔的博客 7506

VB摄像头监控

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

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

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

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

余额充值