您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > WinSockAPI在易语言中的应用
WinSockAPI的使用1.WSAStartup函数为了在你的应用程序当中调用任何一个WinsockAPI函数,首先第一件事情你就是必须通过WSAStartup函数完成对Winsock服务的初始化,因此需要调用WSAStartup函数。DeclareFunctionWSAStartupLib"ws2_32.dll"_(ByValwVersionRequiredAsLong,lpWSADataAsWSAData)AsLong--代码开始--易语言格式--只需要复制红色字符部分--.版本2.DLL命令WSAStartup,整数型,"ws2_32.dll","WSAStartup",公开,初始化winsock,成功返回0,失败返回错误代码。.参数wVersionRequired,整数型,,指定了你想载入的Winsock版本,其高字节指定了次版本号,而低字节指定了主版本号。.参数lpWSAData,WSAData,传址,指向WSAData结构的指针,WSAStartup会向该结构中填充其载入的Winsock动态链库的信息。--代码结束--易语言格式--只需要复制红色字符部分--这个函数有两个参数:wVersionRequired和lpWSAData。wVersionRequired参数定义WindowsSockets提供能使用的最高版本,它的高位字节定义的是次版本号,低位字节定义的是主版本号。下面的2个Winsock版本在VB中使用的例子:初始化1.1版本lngRetVal=WSAStartup(&H101,udtWinsockData)初始化2.2版本lngRetVal=WSAStartup(&H202,udtWinsockData)--代码开始--易语言格式--只需要复制红色字符部分--.版本2.子程序载入WinSock,整数型,公开,成功返回0,失败返回错误号.参数版本,整数型.参数WinSock信息,WSAData,参考可空返回(WSAStartup(版本,WinSock信息))--代码结束--易语言格式--只需要复制红色字符部分--第二个参数是WSADATA的数据结构,它是接收WindowsSockets执行时的数据。TypeWSADatawVersionAsIntegerwHighVersionAsIntegerszDescriptionAsString*WSADESCRIPTION_LENszSystemStatusAsString*WSASYS_STATUS_LENiMaxSocketsAsIntegeriMaxUdpDgAsIntegerlpVendorInfoAsLongEndType--代码开始--易语言格式--只需要复制红色字符部分--.版本2.数据类型WSAData,公开.成员wVersion,整数型.成员wHighVersion,整数型.成员szDescription,字节型,,"256".成员szSystemStatus,字节型,,"129".成员iMaxSockets,整数型.成员iMaxUdpDg,整数型.成员lpVendorInfo,整数型--代码结束--易语言格式--只需要复制红色字符部分--数据成员的描述在下表中:Field描述wVersionWindowsSockets版本信息。wHighVersion通过加载库文件得到的最高的支持Winsock的版本,它通常和wVersion值相同。szDescriptionWindowsSockets执行时的详细描述szSystemStatus包含了相关的状态和配置的信息iMaxSockets表示同时打开的socket最大数,为0表示没有限制。iMaxUdpDg表示同时打开的数据报最大数,为0表示没有限制。lpVendorInfo厂商指定信息预留在Winsock的1.1和2.2版本中没有lpVendorInfo的返回值。因为winsock2支持多个传输协议,所以iMaxSockets和iMaxUdpDg只能在仅支持TCP/TP的winsock1.1中使用。为了在Winsock2中获得这些值,你可以使用WSAEnumProtocols函数。如果成功或者返回一个错误代码,则函数返回0。错误代码含义WSASYSNOTREADY指出网络没有为传输准备好。WSAVERNOTSUPPORTED当前的WinSock实现不支持应用程序指定的WindowsSockets规范版本WSAEINPROGRESS一个阻塞WinSock调用正在进行WSAEPROCLIM请求的协议没有在系统中配置或没有支持它的实现存在。WSAEFAULTlpWSAData不是有效的指针2.WSACleanup函数每次调用了WSAStartup函数,你都需要调用WSACleanup函数,通知系统来卸载库文件及清除已分配的资源,这个函数十分简单,没有任何参数:DeclareFunctionWSACleanupLib"ws2_32.dll"()AsLong--代码开始--易语言格式--只需要复制红色字符部分--.版本2.DLL命令WSACleanup,整数型,"ws2_32.dll","WSACleanup",公开--代码结束--易语言格式--只需要复制红色字符部分--3.建立Socket函数DeclareFunctionsocketLib"ws2_32.dll"(ByValafAsLong,_ByVals_typeAsLong,ByValProtocolAsLong)AsLong--代码开始--易语言格式--只需要复制红色字符部分--.版本2.DLL命令socket,整数型,"ws2_32.dll","socket",公开.参数af,整数型.参数s_type,整数型.参数Protocol,整数型--代码结束--易语言格式--只需要复制红色字符部分--函数有3个参数定义建立何种socket,三个参数分别是:ArgumentDescriptionEnumTypeafAddressfamilyspecification.AddressFamilys_typeTypespecificationforthenewsocket.SocketTypeProtocolProtocoltobeusedwiththesocketSocketProtocolthatisspecifictotheindicatedaddressfamily.AddressFamily:AF_UNSPEC=0'/*unspecified*/AF_UNIX=1'/*localtohost(pipes,portals)*/AF_INET=2'/*internetwork:UDP,TCP,etc.*/AF_IMPLINK=3'/*arpanetimpaddresses*/AF_PUP=4'/*pupprotocols:e.g.BSP*/AF_CHAOS=5'/*mitCHAOSprotocols*/AF_NS=6'/*XEROXNSprotocols*/AF_IPX=AF_NS'/*IPXprotocols:IPX,SPX,etc.*/AF_ISO=7'/*ISOprotocols*/AF_OSI=AF_ISO'/*OSIisISO*/AF_ECMA=8'/*europeancomputermanufacturers*/AF_DATAKIT=9'/*datakitprotocols*/AF_CCITT=10'/*CCITTprotocols,X.25etc*/AF_SNA=11'/*IBMSNA*/AF_DECnet=12'/*DECnet*/AF_DLI=13'/*Directdatalinkinterface*/AF_LAT=14'/*LAT*/AF_HYLINK=15'/*NSCHyperchannel*/AF_APPLETALK=16'/*AppleTalk*/AF_NETBIOS=17'/*NetBios-styleaddresses*/AF_VOICEVIEW=18'/*VoiceView*/AF_FIREFOX=19'/*ProtocolsfromFirefox*/AF_UNKNOWN1=20'/*Somebodyisusingthis!*/AF_BAN=21'/*Banyan*/AF_ATM=22'/*NativeATMServices*/AF_INET6=23'/*InternetworkVersion6*/AF_CLUSTER=24'/*MicrosoftWolfpack*/AF_12844=25'/*IEEE1284.4WGAF*/AF_MAX=26Sockettypes:SOCK_STREAM=1'/*streamsocket*/SOCK_DGRAM=2'/*datagramsocket*/SOCK_RAW=3'/*raw-protocolinterface*/SOCK_RDM=4'/*reliably-deliveredmessage*/SOCK_SEQPACKET=5'/*sequencedpacketstream*/Protocols:IPPROTO_IP=0'/*dummyforIP*/IPPROTO_ICMP=1'/*controlmessageprotocol*/IPPROTO_IGMP=2'/*internetgroupmanagementprotocol*/IPPROTO_GGP=3'/*gateway^2(deprecated)*/IPPROTO_TCP=6'/*tcp*/IPPROTO_PUP=12'/*pup*/IPPROTO_UDP=17'/*userdatagramprotocol*/IPPROTO_IDP=22'/*xnsidp*/IPPROTO_ND=77'/*UNOFFICIALnetdiskproto*/IPPROTO_RAW=255'/*rawIPpacket*/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函数DeclareFunctionclosesocketLib"ws2_32.dll"(ByValsAsLong)AsLong--代码开始--易语言格式--只需要复制红色字符部分--.版本2.DLL命令closesocket,整数型,"ws2_32.dll","closesocket",公开,关闭Socket函数.参数s,整数型,,建立socket时的Han
本文标题:WinSockAPI在易语言中的应用
链接地址:https://www.777doc.com/doc-4382639 .html