WinSockAPI在易语言中的应用
更新时间:2023-12-01 00:38:02 阅读量: 教育文库 文档下载
WinSockAPI在易语言中的应用
WinSockAPI的使用
1.WSAStartup 函数
为了在你的应用程序当中调用任何一个Winsock API 函数,首先第一件事情你就是必须通过WSAStartup函数完成对Winsock 服务的初始化,因此需要调用WSAStartup函数。
Declare Function WSAStartup Lib \
(ByVal wVersionRequired As Long, lpWSAData As WSAData) As Long
--代码开始--易语言格式--只需要复制红色字符部分--
.版本 2
.DLL命令 WSAStartup, 整数型, \公开, 初始化winsock,成功返回0,失败返回错误代码。
.参数 wVersionRequired, 整数型, , 指定了你想载入的Winsock版本,其高字节指定了次版本号,而低字节指定了主版本号。
.参数 lpWSAData, WSAData, 传址, 指向WSAData结构的指针,WSAStartup会向该结构中填充其载入的Winsock动态链库的信息。
--代码结束--易语言格式--只需要复制红色字符部分--
这个函数有两个参数: wVersionRequired 和 lpWSAData。wVersionRequired 参数定义Windows Sockets 提供能使用的最高版本,它的高位字节定义的是次版本号,低位字节定义的是主版本号。下面的2个Winsock版本在VB中使用的例子:
初始化1.1版本
lngRetVal = WSAStartup(&H101, udtWinsockData)
初始化2.2版本
lngRetVal = WSAStartup(&H202, udtWinsockData)
--代码开始--易语言格式--只需要复制红色字符部分--
.版本 2
.子程序 载入WinSock, 整数型, 公开, 成功返回0,失败返回错误号 .参数 版本, 整数型
.参数 WinSock信息, WSAData, 参考 可空
返回 (WSAStartup (版本, WinSock信息))
--代码结束--易语言格式--只需要复制红色字符部分--
第二个参数是WSADATA 的数据结构 ,它是接收Windows Sockets 执行时的数据。
Type WSAData wVersion As Integer wHighVersion As Integer
szDescription As String * WSADESCRIPTION_LEN szSystemStatus As String * WSASYS_STATUS_LEN iMaxSockets As Integer iMaxUdpDg As Integer lpVendorInfo As Long End Type
--代码开始--易语言格式--只需要复制红色字符部分-- .版本 2
.数据类型 WSAData, 公开
.成员 wVersion, 整数型
.成员 wHighVersion, 整数型
.成员 szDescription, 字节型, , \ .成员 szSystemStatus, 字节型, , \ .成员 iMaxSockets, 整数型 .成员 iMaxUdpDg, 整数型
.成员 lpVendorInfo, 整数型
--代码结束--易语言格式--只需要复制红色字符部分--
数据成员的描述在下表中:
Field 描述
wVersion Windows Sockets 版本信息。
wHighVersion 通过加载库文件得到的最高的支持Winsock 的版本, 它通常和wVersion值相同。
szDescription Windows Sockets 执行时的详细描述 szSystemStatus 包含了相关的状态和配置的信息
iMaxSockets 表示同时打开的socket最大数,为0表示没有限制。 iMaxUdpDg 表示同时打开的数据报最大数,为0表示没有限制。 lpVendorInfo 厂商指定信息预留
在Winsock的1.1和2.2版本中没有lpVendorInfo的返回值。因为winsock 2支持多个传输协
议,所以iMaxSockets 和iMaxUdpDg只能在仅支持TCP/TP的winsock1.1中使用。为了在Winsock 2中获得这些值,你可以使用WSAEnumProtocols 函数。
如果成功或者返回一个错误代码,则函数返回 0。
错误代码 含义
WSASYSNOTREADY 指出网络没有为传输准备好。
WSAVERNOTSUPPORTED 当前的WinSock实现不支持应用程序指定的Windows Sockets规范版本
WSAEINPROGRESS 一个阻塞WinSock调用正在进行
WSAEPROCLIM 请求的协议没有在系统中配置或没有支持它的实现存在。 WSAEFAULT lpWSAData 不是有效的指针
2.WSACleanup 函数
每次调用了WSAStartup函数,你都需要调用WSACleanup函数,通知系统来卸载库文件及清除已分配的资源,这个函数十分简单,没有任何参数:
Declare Function WSACleanup Lib \
--代码开始--易语言格式--只需要复制红色字符部分-- .版本 2
.DLL命令 WSACleanup, 整数型, \公开 --代码结束--易语言格式--只需要复制红色字符部分--
3.建立Socket函数
Declare Function socket Lib \al af As Long, _ ByVal s_type As Long, ByVal Protocol As Long) As Long
--代码开始--易语言格式--只需要复制红色字符部分-- .版本 2
.DLL命令 socket, 整数型, \ws2_32.dll\公开 .参数 af, 整数型 .参数 s_type, 整数型 .参数 Protocol, 整数型
--代码结束--易语言格式--只需要复制红色字符部分--
函数有3个参数定义建立何种socket,三个参数分别是: Argument Description Enum Type af Address family specification. AddressFamily s_type Type specification for the new socket. SocketType Protocol Protocol to be used with the socket SocketProtocol that is specific to the indicated address family.
AddressFamily:
AF_UNSPEC = 0 '/* unspecified */
AF_UNIX = 1 '/* local to host (pipes, portals) */ AF_INET = 2 '/* internetwork: UDP, TCP, etc. */ AF_IMPLINK = 3 '/* arpanet imp addresses */ AF_PUP = 4 '/* pup protocols: e.g. BSP */ AF_CHAOS = 5 '/* mit CHAOS protocols */ AF_NS = 6 '/* XEROX NS protocols */
AF_IPX = AF_NS '/* IPX protocols: IPX, SPX, etc. */ AF_ISO = 7 '/* ISO protocols */
AF_OSI = AF_ISO '/* OSI is ISO */
AF_ECMA = 8 '/* european computer manufacturers */ AF_DATAKIT = 9 '/* datakit protocols */
AF_CCITT = 10 '/* CCITT protocols, X.25 etc */ AF_SNA = 11 '/* IBM SNA */ AF_DECnet = 12 '/* DECnet */
AF_DLI = 13 '/* Direct data link interface */ AF_LAT = 14 '/* LAT */
AF_HYLINK = 15 '/* NSC Hyperchannel */ AF_APPLETALK = 16 '/* AppleTalk */
AF_NETBIOS = 17 '/* NetBios-style addresses */ AF_VOICEVIEW = 18 '/* VoiceView */
AF_FIREFOX = 19 '/* Protocols from Firefox */ AF_UNKNOWN1 = 20 '/* Somebody is using this! */ AF_BAN = 21 '/* Banyan */
AF_ATM = 22 '/* Native ATM Services */ AF_INET6 = 23 '/* Internetwork Version 6 */ AF_CLUSTER = 24 '/* Microsoft Wolfpack */ AF_12844 = 25 '/* IEEE 1284.4 WG AF */ AF_MAX = 26
Socket types:
SOCK_STREAM = 1 ' /* stream socket */
SOCK_DGRAM = 2 ' /* datagram socket */
SOCK_RAW = 3 ' /* raw-protocol interface */ SOCK_RDM = 4 ' /* reliably-delivered message */ SOCK_SEQPACKET = 5 ' /* sequenced packet stream */
Protocols:
IPPROTO_IP = 0 '/* dummy for IP */
IPPROTO_ICMP = 1 '/* control message protocol */
IPPROTO_IGMP = 2 '/* internet group management protocol */ IPPROTO_GGP = 3 '/* gateway^2 (deprecated) */ IPPROTO_TCP = 6 '/* tcp */ IPPROTO_PUP = 12 '/* pup */
IPPROTO_UDP = 17 '/* user datagram protocol */ IPPROTO_IDP = 22 '/* xns idp */
IPPROTO_ND = 77 '/* UNOFFICIAL net disk proto */ IPPROTO_RAW = 255 '/* raw IP packet */ IPPROTO_MAX = 256
该函数可以建立使用特定协议的网络套接字
例如
对于UDP协议可以这样写:
s=socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)
对于TCP协议可以这样写:
s=socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)
--代码开始--易语言格式--只需要复制红色字符部分-- .版本 2
.子程序 创建Socket, 逻辑型, 公开, 该函数如果调用成功就返回新创建的套接字的描述符 .参数 协议族, 整数型, , AF_系列常量。
.参数 套接字类型, 整数型, , SOCK_系列常量。 .参数 通信协议, 整数型, , IPPROTO_系列常量
Socket套接字 = socket (协议族, 套接字类型, 通信协议) 返回 (Socket套接字 ≠ 0)
--代码结束--易语言格式--只需要复制红色字符部分--
4.关闭Socket函数
正在阅读:
WinSockAPI在易语言中的应用12-01
上海市中级职称要求05-28
部队文书离职申请书12-11
2017版英语汇编专题精选:专题十六 语法填空 Word版含解析09-11
五年级下学期《品德与社会》第二次月考试卷 五年级下学期07-18
年度先进个人评选标准01-15
误用成语分类整理09-06
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 言中
- WinSockAPI
- 应用
- 电梯安装与维修练习习题一
- 烂漫书怀
- 钙钛矿太阳能电池的光物理原理
- 题库 细胞生物学题库及答案
- 审计补充练习参考答案(2013)
- 人教版语文小学六年级课外短文阅读训练参考题全集
- 引风机振动增大原因的诊断与处理 日期:2005-03-22 来自:网友
- 课堂观察的四个维度
- 校园文化艺术节之第三届模拟招聘会暨简历制作大赛方案(1)
- 狮尾沟村办煤矿安全设施和主要生产系统联合试运转报告
- 有限差分法及其应用
- 解决Win7大量读写硬盘问题
- 高频电路原理与分析(曾兴雯 - 第四版)课后习题答案 - 图文
- 小学三年级奥数讲义全集
- 小学仪器室工作计划
- 安徽省马鞍山市第二中学2014-2015学年高二下学期期中考试英语试题 Word版含答案
- 档案管理补充复习题
- 精细有机合成论文-糖类羟基的保护和去保护
- 2016人教版小学五年级上册数学第五单元《简易方程》测试题 - 副本
- 地方少数民族文化事业发展现状与困境 来凤文化事业发展现状和困境