⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mwinsock2.bas

📁 在Windows下用WinSock API开发的示例
💻 BAS
📖 第 1 页 / 共 2 页
字号:
Attribute VB_Name = "mWinsock2"
Option Explicit
'
' ---------------------------------------------------------------------------------
' File...........: mWinsock2.bas
' Author.........: Will Barden
' Created........: 02/05/03
' Modified.......: 09/05/03
' Version........: 1.0
' Website........: http://www.WinsockVB.com
' Contact........: admin@winsockvb.com
'
' Port of necessary Winsock2 declares, consts, types etc.. Will handle straight
' blocking I/O, WSAAsyncSelect and WSAEventSelect under both TCP/IP and UDP/IP.
' Will also handle sending ICMP echos (a ping) to check if a host is alive. Has
' some helper functions at the bottom, prefixed with "vb".
' ------------------------------------------------------------------------------
'
' ------------------------------------------------------------------------------
' Constants.
' ------------------------------------------------------------------------------
'
' Winsock version constants.
Public Const WINSOCK_V1_1  As Long = &H101
Public Const WINSOCK_V2_2  As Long = &H202
'
' Length of fields within the WSADATA structure.
Public Const WSADESCRIPTION_LEN  As Long = 256
Public Const WSASYS_STATUS_LEN   As Long = 128
'
' For socket handle errors, and bas returns from APIs.
Public Const ERROR_SUCCESS    As Long = 0
Public Const SOCKET_ERROR     As Long = -1
Public Const INVALID_SOCKET   As Long = SOCKET_ERROR
'
' Internet addresses.
Public Const INADDR_ANY          As Long = &H0
Public Const INADDR_LOOPBACK     As Long = &H7F000001
Public Const INADDR_BROADCAST    As Long = &HFFFFFFFF
Public Const INADDR_NONE         As Long = &HFFFFFFFF
'
' Maximum backlog when calling listen().
Public Const SOMAXCONN  As Long = 5
'
' Messages send with WSAAsyncSelect().
Public Const FD_READ       As Long = &H1
Public Const FD_WRITE      As Long = &H2
Public Const FD_OOB        As Long = &H4
Public Const FD_ACCEPT     As Long = &H8
Public Const FD_CONNECT    As Long = &H10
Public Const FD_CLOSE      As Long = &H20
'
' Used with shutdown().
Public Const SD_RECEIVE    As Long = &H0
Public Const SD_SEND       As Long = &H1
Public Const SD_BOTH       As Long = &H2
'
' Winsock error constants.
Public Const WSABASEERR          As Long = 10000
Public Const WSAEINTR            As Long = WSABASEERR + 4
Public Const WSAEBADF            As Long = WSABASEERR + 9
Public Const WSAEACCES           As Long = WSABASEERR + 13
Public Const WSAEFAULT           As Long = WSABASEERR + 14
Public Const WSAEINVAL           As Long = WSABASEERR + 22
Public Const WSAEMFILE           As Long = WSABASEERR + 24
Public Const WSAEWOULDBLOCK      As Long = WSABASEERR + 35
Public Const WSAEINPROGRESS      As Long = WSABASEERR + 36
Public Const WSAEALREADY         As Long = WSABASEERR + 37
Public Const WSAENOTSOCK         As Long = WSABASEERR + 38
Public Const WSAEDESTADDRREQ     As Long = WSABASEERR + 39
Public Const WSAEMSGSIZE         As Long = WSABASEERR + 40
Public Const WSAEPROTOTYPE       As Long = WSABASEERR + 41
Public Const WSAENOPROTOOPT      As Long = WSABASEERR + 42
Public Const WSAEPROTONOSUPPORT  As Long = WSABASEERR + 43
Public Const WSAESOCKTNOSUPPORT  As Long = WSABASEERR + 44
Public Const WSAEOPNOTSUPP       As Long = WSABASEERR + 45
Public Const WSAEPFNOSUPPORT     As Long = WSABASEERR + 46
Public Const WSAEAFNOSUPPORT     As Long = WSABASEERR + 47
Public Const WSAEADDRINUSE       As Long = WSABASEERR + 48
Public Const WSAEADDRNOTAVAIL    As Long = WSABASEERR + 49
Public Const WSAENETDOWN         As Long = WSABASEERR + 50
Public Const WSAENETUNREACH      As Long = WSABASEERR + 51
Public Const WSAENETRESET        As Long = WSABASEERR + 52
Public Const WSAECONNABORTED     As Long = WSABASEERR + 53
Public Const WSAECONNRESET       As Long = WSABASEERR + 54
Public Const WSAENOBUFS          As Long = WSABASEERR + 55
Public Const WSAEISCONN          As Long = WSABASEERR + 56
Public Const WSAENOTCONN         As Long = WSABASEERR + 57
Public Const WSAESHUTDOWN        As Long = WSABASEERR + 58
Public Const WSAETOOMANYREFS     As Long = WSABASEERR + 59
Public Const WSAETIMEDOUT        As Long = WSABASEERR + 60
Public Const WSAECONNREFUSED     As Long = WSABASEERR + 61
Public Const WSAELOOP            As Long = WSABASEERR + 62
Public Const WSAENAMETOOLONG     As Long = WSABASEERR + 63
Public Const WSAEHOSTDOWN        As Long = WSABASEERR + 64
Public Const WSAEHOSTUNREACH     As Long = WSABASEERR + 65
Public Const WSAENOTEMPTY        As Long = WSABASEERR + 66
Public Const WSAEPROCLIM         As Long = WSABASEERR + 67
Public Const WSAEUSERS           As Long = WSABASEERR + 68
Public Const WSAEDQUOT           As Long = WSABASEERR + 69
Public Const WSAESTALE           As Long = WSABASEERR + 70
Public Const WSAEREMOTE          As Long = WSABASEERR + 71
Public Const WSASYSNOTREADY      As Long = WSABASEERR + 91
Public Const WSAVERNOTSUPPORTED  As Long = WSABASEERR + 92
Public Const WSANOTINITIALISED   As Long = WSABASEERR + 93
Public Const WSAHOST_NOT_FOUND   As Long = WSABASEERR + 1001
'
' Winsock 2 extensions.
Public Const WSA_IO_PENDING         As Long = 997
Public Const WSA_IO_INCOMPLETE      As Long = 996
Public Const WSA_INVALID_HANDLE     As Long = 6
Public Const WSA_INVALID_PARAMETER  As Long = 87
Public Const WSA_NOT_ENOUGH_MEMORY  As Long = 8
Public Const WSA_OPERATION_ABORTED  As Long = 995

Public Const WSA_WAIT_FAILED           As Long = -1
Public Const WSA_WAIT_EVENT_0          As Long = 0
Public Const WSA_WAIT_IO_COMPLETION    As Long = &HC0
Public Const WSA_WAIT_TIMEOUT          As Long = &H102
Public Const WSA_INFINITE              As Long = -1
'
' Max size of event handle array when calling WSAWaitForMultipleEvents().
Public Const WSA_MAXIMUM_WAIT_EVENTS   As Long = 64
'
' Size of WSANETWORKEVENTS.iErrorCode[] array.
Public Const FD_MAX_EVENTS    As Long = 10
'
' Used to refer to particular elements of the WSANETWORKEVENTS.iErrorCodes[].
Public Const FD_READ_BIT                     As Long = 0
Public Const FD_WRITE_BIT                    As Long = 1
Public Const FD_OOB_BIT                      As Long = 2
Public Const FD_ACCEPT_BIT                   As Long = 3
Public Const FD_CONNECT_BIT                  As Long = 4
Public Const FD_CLOSE_BIT                    As Long = 5
Public Const FD_QOS_BIT                      As Long = 6
Public Const FD_GROUP_QOS_BIT                As Long = 7
Public Const FD_ROUTING_INTERFACE_CHANGE_BIT As Long = 8
Public Const FD_ADDRESS_LIST_CHANGE_BIT      As Long = 9
'
' ------------------------------------------------------------------------------
' Enumerations.
' ------------------------------------------------------------------------------
'
' Used with socket().
Public Enum Protocols
   IPPROTO_IP = 0
   IPPROTO_ICMP = 1
   IPPROTO_GGP = 2
   IPPROTO_TCP = 6
   IPPROTO_PUP = 12
   IPPROTO_UDP = 17
   IPPROTO_IDP = 22
   IPPROTO_ND = 77
   IPPROTO_RAW = 255
   IPPROTO_MAX = 256
End Enum
'
' Used with socket().
Public Enum SocketTypes
   SOCK_STREAM = 1
   SOCK_DGRAM = 2
   SOCK_RAW = 3
   SOCK_RDM = 4
   SOCK_SEQPACKET = 5
End Enum
'
' Used with socket().
Public Enum AddressFamilies
   AF_UNSPEC = 0
   AF_UNIX = 1
   AF_INET = 2
   AF_IMPLINK = 3
   AF_PUP = 4
   AF_CHAOS = 5
   AF_NS = 6
   AF_IPX = 6
   AF_ISO = 7
   AF_OSI = 7
   AF_ECMA = 8
   AF_DATAKIT = 9
   AF_CCITT = 10
   AF_SNA = 11
   AF_DECNET = 12
   AF_DLI = 13
   AF_LAT = 14
   AF_HYLINK = 15
   AF_APPLETALK = 16
   AF_NETBIOS = 17
   AF_MAX = 18
End Enum
'
' ------------------------------------------------------------------------------
' Types.
' ------------------------------------------------------------------------------
'
' To initialize Winsock.
Public Type WSADATA
   wVersion                               As Integer
   wHighVersion                           As Integer
   szDescription(WSADESCRIPTION_LEN + 1)  As Byte
   szSystemstatus(WSASYS_STATUS_LEN + 1)  As Byte
   iMaxSockets                            As Integer
   iMaxUpdDg                              As Integer
   lpVendorInfo                           As Long
End Type
'
' Basic IPv4 addressing structures.
Public Type in_addr
   s_addr   As Long
End Type
'
Public Type sockaddr_in
   sin_family        As Integer
   sin_port          As Integer
   sin_addr          As in_addr
   sin_zero(0 To 7)  As Byte
End Type
'
' Used with name resolution functions.
Public Type hostent
   h_name         As Long
   h_aliases      As Long
   h_addrtype     As Integer
   h_length       As Integer
   h_addr_list    As Long
End Type
'
' Used with WSAEnumNetworkEvents().
Public Type WSANETWORKEVENTS
    lNetworkEvents               As Long
    iErrorCode(FD_MAX_EVENTS)    As Integer
End Type
'
' Used when sending ICMP echos (pings).
Public Type IP_OPTION_INFORMATION
    TTL           As Byte
    Tos           As Byte
    Flags         As Byte
    OptionsSize   As Long
    OptionsData   As String * 128
End Type
'
Public Type IP_ECHO_REPLY
    Address(0 To 3)  As Byte
    Status           As Long
    RoundTripTime    As Long
    DataSize         As Integer
    Reserved         As Integer
    data             As Long
    Options          As IP_OPTION_INFORMATION
End Type
'
' ------------------------------------------------------------------------------
' APIs.
' ------------------------------------------------------------------------------
'
' DLL handling functions.
Public Declare Function WSAStartup Lib "ws2_32.dll" (ByVal wVersionRequested As Integer, ByRef lpWSAData As WSADATA) As Long
Public Declare Function WSACleanup Lib "ws2_32.dll" () As Long
Public Declare Function WSAGetLastError Lib "ws2_32.dll" () As Long
Public Declare Function WSASetLastError Lib "ws2_32.dll" (ByVal err As Long) As Long
'
' Resolution functions.
Public Declare Function getpeername Lib "ws2_32.dll" (ByVal s As Long, ByRef name As sockaddr_in, ByRef namelen As Long) As Long
Public Declare Function getsockname Lib "ws2_32.dll" (ByVal s As Long, ByRef name As sockaddr_in, ByRef namelen As Long) As Long
Public Declare Function gethostbyname Lib "ws2_32.dll" (ByVal host_name As String) As Long
Public Declare Function gethostbyaddr Lib "ws2_32.dll" (haddr As Long, ByVal hnlen As Long, ByVal addrtype As Long) As Long
'
' Conversion functions.
Public Declare Function inet_addr Lib "ws2_32.dll" (ByVal cp As String) As Long
Public Declare Function inet_ntoa Lib "ws2_32.dll" (ByVal laddr As Long) As Long
Public Declare Function htonl Lib "ws2_32.dll" (ByVal hostlong As Long) As Long
Public Declare Function ntohl Lib "ws2_32.dll" (ByVal netlong As Long) As Long
Public Declare Function htons Lib "ws2_32.dll" (ByVal hostshort As Long) As Integer
Public Declare Function ntohs Lib "ws2_32.dll" (ByVal netshort As Long) As Integer
'
' Socket functions.
Public Declare Function socket Lib "ws2_32.dll" (ByVal af As AddressFamilies, ByVal stype As SocketTypes, ByVal protocol As Protocols) As Long
'
Public Declare Function bind Lib "ws2_32.dll" (ByVal s As Long, ByRef name As sockaddr_in, ByVal namelen As Long) As Long
Public Declare Function listen Lib "ws2_32.dll" (ByVal s As Long, ByVal backlog As Long) As Long
Public Declare Function accept Lib "ws2_32.dll" (ByVal s As Long, ByRef addr As sockaddr_in, ByRef addrlen As Long) As Long
Public Declare Function connect Lib "ws2_32.dll" (ByVal s As Long, ByRef name As sockaddr_in, ByVal namelen As Long) As Long
'
Public Declare Function send Lib "ws2_32.dll" (ByVal s As Long, ByRef buf As Byte, ByVal datalen As Long, ByVal Flags As Long) As Long

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -