Programación General > Visual Basic 6.0 e inferiores
Api Winsock
(1/1)
RadicalEd:
Este es el manejo de la api Winsock para Visual.
--- Código: Text ---'*************************************************************'¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬' Application Programming Inteface (API) for WinSock''Este módulo contiene todas las declaraciones necesarias para'utilizar los sockets de sistema. El funcionamiento y ejemplo'de estas funciones se pueden encontrar en MSDN:''http://msdn.microsoft.com''Autor: Slasher Keeper :)'Fuente: MSDN Library''¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬'************************************************************** Option Explicit #Const WS_CURVERSION = 2 Public Const WS_VERSION_REQD = &H101Public Const WS_VERSION_MAJOR = WS_VERSION_REQD \ &H100 And &HFF&Public Const WS_VERSION_MINOR = WS_VERSION_REQD And &HFF&Public Const MIN_SOCKETS_REQD = 1Public Const SOCKET_ERROR = -1Public Const WSADescription_Len = 256Public Const WSASYS_Status_Len = 128Public Const FD_SETSIZE = 64 'Network Events.'Public Const FD_READ_BIT = 0Public Const FD_READ = 1Public Const FD_WRITE_BIT = 1Public Const FD_WRITE = 2Public Const FD_OOB_BIT = 2Public Const FD_OOB = 4Public Const FD_ACCEPT_BIT = 3Public Const FD_ACCEPT = 8Public Const FD_CONNECT_BIT = 4Public Const FD_CONNECT = 16Public Const FD_CLOSE_BIT = 5Public Const FD_CLOSE = 32Public Const FD_QOS_BIT = 6Public Const FD_QOS = 64Public Const FD_GROUP_QOS_BIT = 7Public Const FD_GROUP_QOS = 128Public Const FD_ROUTING_INTERFACE_CHANGE_BIT = 8Public Const FD_ROUTING_INTERFACE_CHANGE = 256Public Const FD_ADDRESS_LIST_CHANGE_BIT = 9Public Const FD_ADDRESS_LIST_CHANGE = 512Public Const FD_MAX_EVENTS = 10Public Const FD_ALL_EVENTS = 1023 'Namespaces.'Public Const NS_ALL = 0 Public Const NS_SAP = 1Public Const NS_NDS = 2Public Const NS_PEER_BROWSE = 3 Public Const NS_TCPIP_LOCAL = 10Public Const NS_TCPIP_HOSTS = 11Public Const NS_DNS = 12Public Const NS_NETBT = 13Public Const NS_WINS = 14 Public Const NS_NBP = 20 Public Const NS_MS = 30Public Const NS_STDA = 31Public Const NS_NTDS = 32 Public Const NS_X500 = 40Public Const NS_NIS = 41Public Const NS_NISPLUS = 42 Public Const NS_WRQ = 50 Public Const SERVICE_REGISTER = 1Public Const SERVICE_DEREGISTER = 2Public Const SERVICE_FLUSH = 3Public Const SERVICE_FLAG_HARD = &H2 Enum SearchControlFlags LUP_DEEP = &H1 LUP_CONTAINERS = &H2 LUP_NOCONTAINERS = &H4 LUP_NEAREST = &H8 LUP_RETURN_NAME = &H10 LUP_RETURN_TYPE = &H20 LUP_RETURN_VERSION = &H40 LUP_RETURN_COMMENT = &H80 LUP_RETURN_ADDR = &H100 LUP_RETURN_BLOB = &H200 LUP_RETURN_ALIASES = &H400 LUP_RETURN_QUERY_STRING = &H800 LUP_RETURN_ALL = &HFF0 LUP_RES_SERVICE = &H8000 LUP_FLUSHCACHE = &H1000 LUP_FLUSHPREVIOUS = &H2000End Type 'Protocolos'Enum SockProtocols IPPROTO_IP = 0 'dummy for IP IPPROTO_ICMP = 1 'control message protocol IPPROTO_IPIP = 4 IPPROTO_GGP = 2 ' gateway^2 (deprecated) IPPROTO_TCP = 6 ' tcp IPPROTO_EGP = 8 IPPROTO_PUP = 12 ' pup IPPROTO_UDP = 17 ' user datagram protocol IPPROTO_IDP = 22 ' xns idp IPPROTO_ND = 77 ' UNOFFICIAL net disk proto NSPROTO_IPX = 1000 NSPROTO_SPX = 1256 NSPROTO_SPXII = 1257End Enum 'Socket types.'Enum SockTypes SOCK_STREAM = 1 'Envía datos como flujo de bytes. SOCK_DGRAM = 2 'Datagrama. Protocolo de conexión. SOCK_RAW = 3 '??? SOCK_RDM = 4 'Reliably-Delivered Message (Mensaje confiablemente-entregado) 'Es un protocolo que conserva los límites del mensaje en los 'datos SOCK_SEQPACKET = 5 'Flujo de paquetes secuenciados. Es esencialmente igual 'que SOCK_RDM.End Enum Enum SockPorts ' 'Standard well-known ports ' IPPORT_ECHO = 7 IPPORT_DISCARD = 9 IPPORT_SYSTAT = 11 IPPORT_DAYTIME = 13 IPPORT_NETSTAT = 15 IPPORT_FTP = 21 IPPORT_TELNET = 23 IPPORT_SMTP = 25 IPPORT_TIMESERVER = 37 IPPORT_NAMESERVER = 42 IPPORT_WHOIS = 43 IPPORT_MTP = 57 IPPORT_TFTP = 69 IPPORT_RJE = 77 IPPORT_FINGER = 79 IPPORT_TTYLINK = 87 IPPORT_SUPDUP = 95 IPPORT_EXECSERVER = 512 IPPORT_LOGINSERVER = 513 IPPORT_CMDSERVER = 514 IPPORT_EFSSERVER = 520 'UDP ports. ' IPPORT_BIFFUDP = 512 IPPORT_WHOSERVER = 513 IPPORT_ROUTESERVER = 520 'Los puertos menores a este valor están reservados para 'procesos con provilegios. ' IPPORT_RESERVED = 1024 'Los puertos mayores a este valor están reservados para 'procesos sin privilegios. ' IPPORT_USERRESERVED = 5000 End Enum Enum SockErrors ' 'Windows Sockets definitions of regular Berkeley error constants ' WSABASEERR = 10000 WSAEWOULDBLOCK = (WSABASEERR + 35) WSAEINPROGRESS = (WSABASEERR + 36) WSAEALREADY = (WSABASEERR + 37) WSAENOTSOCK = (WSABASEERR + 38) WSAEDESTADDRREQ = (WSABASEERR + 39) WSAEMSGSIZE = (WSABASEERR + 40) WSAEPROTOTYPE = (WSABASEERR + 41) WSAENOPROTOOPT = (WSABASEERR + 42) WSAEPROTONOSUPPORT = (WSABASEERR + 43) WSAESOCKTNOSUPPORT = (WSABASEERR + 44) WSAEOPNOTSUPP = (WSABASEERR + 45) WSAEPFNOSUPPORT = (WSABASEERR + 46) WSAEAFNOSUPPORT = (WSABASEERR + 47) WSAEADDRINUSE = (WSABASEERR + 48) WSAEADDRNOTAVAIL = (WSABASEERR + 49) WSAENETDOWN = (WSABASEERR + 50) WSAENETUNREACH = (WSABASEERR + 51) WSAENETRESET = (WSABASEERR + 52) WSAECONNABORTED = (WSABASEERR + 53) WSAECONNRESET = (WSABASEERR + 54) WSAENOBUFS = (WSABASEERR + 55) WSAEISCONN = (WSABASEERR + 56) WSAENOTCONN = (WSABASEERR + 57) WSAESHUTDOWN = (WSABASEERR + 58) WSAETOOMANYREFS = (WSABASEERR + 59) WSAETIMEDOUT = (WSABASEERR + 60) WSAECONNREFUSED = (WSABASEERR + 61) WSAELOOP = (WSABASEERR + 62) WSAENAMETOOLONG = (WSABASEERR + 63) WSAEHOSTDOWN = (WSABASEERR + 64) WSAEHOSTUNREACH = (WSABASEERR + 65) WSAENOTEMPTY = (WSABASEERR + 66) WSAEPROCLIM = (WSABASEERR + 67) WSAEUSERS = (WSABASEERR + 68) WSAEDQUOT = (WSABASEERR + 69) WSAESTALE = (WSABASEERR + 70) WSAEREMOTE = (WSABASEERR + 71) WSAEDISCON = (WSABASEERR + 101)End Enum Enum SockAddressFamilies 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_IPX = 6 'IPX and SPX AF_NS = 6 'XEROX NS protocols 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 addressesEnd Enum Type SOCKADDR sa_family As Integer sa_data As String * 14End Type Type IN_ADDR s_b1 As Byte s_b2 As Byte s_b3 As Byte s_b4 As Byte s_w1 As Integer s_w2 As IntegerEnd Type Type SOCKADDR_IN sin_family As Integer sin_port As Integer sin_addr As IN_ADDR sin_zero As String * 8End Type Type OVERLAPPED Internal As Long InternalHigh As Long Offset As Long OffsetHigh As Long hEvent As LongEnd Type Type CSADDR_INFO LocalAddr As Long RemoteAddr As Long iSocketType As Long iProtocol As SockProtocolsEnd Type Type HOSTENT h_name As Long 'official name of host h_aliases As Long 'alias list h_addrtype As Integer 'host address type h_length As Integer h_addr_list As Long 'list of addressesEnd Type Type PROTOENT p_name As String p_aliases(15) As String p_proto As IntegerEnd Type Type SERVENT s_name As String s_aliases(15) As String s_port As Integer s_proto As StringEnd Type Type SERVICE_ADDRESS dwAddressType As Long dwAddressFlags As Long dwAddressLength As Long dwPrincipalLength As Long lpAddress As Byte lpPrincipal As ByteEnd Type Type SERVICE_ADDRESSES dwAddressCount As Long Addresses(1) As SERVICE_ADDRESSEnd Type Type BLOB cbSize As Long pBlobData As ByteEnd Type Type SERVICE_INFO lpServiceType As Long lpServiceName As String lpComment As String lpLocale As String dwDisplayHint As Long dwVersion As Long dwTime As Long lpMachineName As String lpServiceAddress As SERVICE_ADDRESSES ServiceSpecificInfo As BLOBEnd Type Type NS_SERVICE_INFO dwNameSpace As Long ServiceInfo As SERVICE_INFOEnd Type Type WSADATA wversion As Integer wHighVersion As Integer szDescription(0 To WSADescription_Len) As Byte szSystemStatus(0 To WSASYS_Status_Len) As Byte iMaxSockets As Integer iMaxUdpDg As Integer lpszVendorInfo As LongEnd Type Type LARGE_INTEGER lowpart As Long highpart As LongEnd Type Type FD_SET fd_count As Long fd_array(FD_SETSIZE) As LongEnd Type Type TIMEVAL tv_sec As Long tv_usec As LongEnd Type Type TRANSMIT_FILE_BUFFERS Head As Long HeadLength As Long Tail As Long TailLength As LongEnd Type Type FLOWSPEC TokenRate As Long 'In Bytes/sec TokenBucketSize As Long 'In Bytes PeakBandwidth As Long 'In Bytes/sec Latency As Long 'In microseconds DelayVariation As Long 'In microseconds ServiceType As Integer 'Guaranteed, Predictive, 'Best Effort, etc. MaxSduSize As Long 'In Bytes MinimumPolicedSize As Long 'In BytesEnd Type Type PROTOCOL_INFO dwServiceFlags As Long iAddressFamily As Long iMaxSockAddr As Long iMinSockAddr As Long iSocketType As Long iProtocol As Long dwMessageSize As Long lpProtocol As LongEnd Type Declare Function accept Lib "ws2_32" (ByVal sck As Long, addr As SOCKADDR, AddrLen As Integer) As Long Declare Function AcceptEx Lib "ws2_32" (ByVal sListenSocket As Long, ByVal sAcceptSocket As Long, lpOutputBuffer As Any, ByVal dwReceiveDataLength As Long, ByVal dwLocalAddressLength As Long, ByVal dwRemoteAddressLength As Long, lpdwBytesReceived As Long, lpOverlapped As OVERLAPPED) As Long Declare Function bind Lib "ws2_32" (ByVal sck As Long, name As SOCKADDR, ByVal namelen As Long) As LongDeclare Function closesocket Lib "ws2_32" (ByVal sck As Long) As Long Declare Function Connect Lib "ws2_32" (ByVal sck As Long, ByVal SckName As String, ByVal namelen As Long) As LongDeclare Function EnumProtocols Lib "ws2_32" Alias "EnumProtocolsA" (ByVal lpiProtocols As SockProtocols, ByVal lpProtocolBuffer As PROTOCOL_INFO, ByVal lpdwBufferLength As Long) Declare Sub GetAcceptExSockaddrs Lib "ws2_32" (lpOutputBuffer As Any, ByVal dwReceiveDataLength As Long, ByVal dwLocalAddressLength As Long, ByVal dwRemoteAddressLength As Long, LocalSockaddr As Long, LocalSockaddrLength As Long, RemoteSockaddr As Long, RemoteSockaddrLength As Long) Declare Function GetAddressByName Lib "ws2_32" Alias "GetAddressByNameA" (ByVal dwNameSpace As Long, ByVal lpServiceType As Long, ByVal lpServiceName As Long, ByVal lpiProtocols As SockProtocols, ByVal dwResolution As Long, ByVal lpServiceAsyncInfo As Long, lpCsaddrBuffer As CSADDR_INFO, ByVal lpdwBufferLength As Long, ByVal lpAliasBuffer As Long, ByVal lpdwAliasBufferLength As Long) As Long Declare Function gethostbyaddr Lib "ws2_32" (ByVal addr As String, ByVal iaddrlen As Long, ByVal iaddrtype As Long) As HOSTENT Declare Function gethostbyname Lib "ws2_32" (ByVal hostname As String) As Long Declare Function gethostname Lib "ws2_32" (ByVal name As String, ByVal namelen As Long) As Long Declare Function GetNameByType Lib "ws2_32" Alias "GetNameByTypeA" (ByVal lpServiceType As Long, ByVal lpServiceName As String, ByVal dwNameLength As Long) As Long Declare Function getpeername Lib "ws2_32" (ByVal sck As Long, name As SOCKADDR, ByVal namelen As Long) As Long Declare Function getprotobyname Lib "ws2_32" (ByVal name As String) As PROTOENT Declare Function getprotobynumber Lib "ws2_32" (ByVal Number As Long) As PROTOENT Declare Function getservbyname Lib "ws2_32" (ByVal name As String, ByVal proto As String) As SERVENT Declare Function getservbyport Lib "ws2_32" (ByVal port As Integer, ByVal proto As String) As SERVENT Declare Function GetService Lib "ws2_32" Alias "GetServiceA" (ByVal dwNameSpace As Long, ByVal lpGuid As Long, ByVal lpServiceName As String, ByVal dwProperties As Long, lpBuffer As NS_SERVICE_INFO, ByVal lpdwBufferSize As Long, ByVal lpServiceAsyncInfo As Long) As Long Declare Function GetSockName Lib "ws2_32" Alias "GetSockNameA" (ByVal sck As Long, name As Long, ByVal namelen As Long) As Long Declare Function getsockopt Lib "ws2_32" (ByVal sck As Long, ByVal level As Long, ByVal optname As Long, ByVal optval As Long, optlen As Long) As Long Declare Function GetTypeByName Lib "ws2_32" Alias "GetTypeByNameA" () Declare Function htons Lib "ws2_32" (ByVal hostshort As Integer) As Integer Declare Function htonl Lib "ws2_32" (ByVal hostlong As Long) As Long Declare Function inet_addr Lib "ws2_32" (ByVal cp As String) As Long Declare Function inet_ntoa Lib "ws2_32" (pin As IN_ADDR) As Long Declare Function ioctlsocket Lib "ws2_32" (ByVal s As Long, ByVal cmd As Long, ByVal argp As Long) As Integer Declare Function listen Lib "ws2_32" (ByVal s As Long, ByVal backlog As Integer) As Integer Declare Function ntohl Lib "ws2_32" (ByVal netlong As Long) As Long Declare Function ntohs Lib "ws2_32" (ByVal netshort As Integer) As Integer Declare Function recv Lib "ws2_32" (ByVal s As Long, ByVal buf As String, ByVal BufLen As Integer, ByVal flags As Integer) As Integer Declare Function recvfrom Lib "ws2_32" (ByVal s As Long, ByVal buf As String, ByVal BufLen As Integer, ByVal flags As Integer, from As SOCKADDR, fromlen As Integer) As Integer Declare Function sockselect Lib "ws2_32" Alias "select" (ByVal nfds As Integer, readfds As FD_SET, writefds As FD_SET, exceptfds As FD_SET, timeout As TIMEVAL) As Integer Declare Function send Lib "ws2_32" (ByVal s As Long, ByVal buf As Long, ByVal BufLen As Integer, ByVal flags As Integer) As Integer Declare Function sendto Lib "ws2_32" (ByVal s As Long, ByVal buf As Long, ByVal BufLen As Integer, ByVal flags As Integer, sckto As SOCKADDR, ByVal tolen As Integer) As Integer Declare Function SetService Lib "ws2_32" Alias "SetServiceA" (ByVal dwNameSpace As Long, ByVal dwOperation As Long, ByVal dwFlags As Long, lpServiceInfo As SERVICE_INFO, ByVal lpServiceAsyncInfo As Long, ByVal lpdwStatusFlags As Long) As Long Declare Function setsockopt Lib "ws2_32" (ByVal s As Long, ByVal level As Integer, ByVal optname As Integer, ByVal optval As Long, ByVal optlen As Long) As Integer Declare Function shutdown Lib "ws2_32" (ByVal s As Long, ByVal how As Integer) As Integer Declare Function socket Lib "ws2_32" (ByVal iAddressFamily As Long, ByVal iType As Long, ByVal iProtocol As Long) As Long Declare Function TransmitFile Lib "ws2_32" (ByVal hSocket As Long, ByVal hFile As Long, ByVal nNumberOfBytesToWrite As Long, ByVal nNumberOfBytesPerSend As Long, ByVal lpOverlapped As OVERLAPPED, ByVal lpTransmitBuffers As TRANSMIT_FILE_BUFFERS, ByVal dwFlags As Long) As Boolean Const MAX_PROTOCOL_CHAIN = 7 Type WSAPROTOCOLCHAIN ChainLen As Integer 'the length of the chain, 'length = 0 means layered protocol, 'length = 1 means base protocol, 'length > 1 means protocol chain ChainEntries(MAX_PROTOCOL_CHAIN) As Long 'a list of dwCatalogEntryIdsEnd Type Const WSAPROTOCOL_LEN = 255 Type WSAPROTOCOL_INFO dwServiceFlags1 As Long dwServiceFlags2 As Long dwServiceFlags3 As Long dwServiceFlags4 As Long dwProviderFlags As Long ProviderId As CLSID dwCatalogEntryId As Long ProtocolChain As WSAPROTOCOLCHAIN iVersion As Integer iAddressFamily As Integer iMaxSockAddr As Integer iMinSockAddr As Integer iSocketType As Integer iProtocol As Integer iProtocolMaxOffset As Integer iNetworkByteOrder As Integer iSecurityScheme As Integer dwMessageSize As Integer dwProviderReserved As Integer szProtocol(WSAPROTOCOL_LEN + 1) As ByteEnd Type Declare Function WSAAccept Lib "ws2_32" (ByVal hSocket As Long, pSockAddr As SOCKADDR, ByVal AddrLen As Integer, ByVal lpfnCondition As Long, ByVal dwCallbackData As Long) As Long Declare Function WSAAddressToString Lib "ws2_32" Alias "WSAAddressToStringA" (lpsaAddress As SOCKADDR, ByVal dwAddressLength As Long, lpProtocolInfo As PROTOCOL_INFO, ByVal lpszAddressString As String, ByVal lpdwAddressStringLength As Long) As Long Declare Function WSAAsyncGetHostByAddr Lib "ws2_32" (ByVal hWnd As Long, ByVal wMsg As Integer, ByVal lpNetAddr As Long, ByVal AddrLen As Long, ByVal AddrType As Long, ByVal lpBuf As Long, ByVal BufLen As Long) As Long Declare Function WSAAsyncGetHostByName Lib "ws2_32" (ByVal hWnd As Long, ByVal wMsg As Integer, ByVal lpHostName As String, ByVal lpBuf As Long, ByVal BufLen As Long) As Long Declare Function WSAAsyncGetProtoByName Lib "ws2_32" (ByVal hWnd As Long, ByVal wMsg As Integer, ByVal lpHostName As String, ByVal lpBuf As Long, ByVal BufLen As Long) As Long Declare Function WSAAsyncGetProtoByNumber Lib "ws2_32" (ByVal hWnd As Long, ByVal wMsg As Integer, ByVal iNumer As Integer, ByVal lpBuf As Long, ByVal BufLen As Long) As Long Declare Function WSAAsyncGetServByName Lib "ws2_32" (ByVal hWnd As Long, ByVal wMsg As Integer, ByVal lpServiceName As String, ByVal lpProtocolName As String, ByVal lpBuf As Long, ByVal BufLen As Long) As Long Declare Function WSAAsyncGetServByPort Lib "ws2_32" (ByVal hWnd As Long, ByVal wMsg As Integer, ByVal iPort As Integer, ByVal lpProtocolName As String, ByVal lpBuf As Long, ByVal BufLen As Long) As Long Declare Function WSAAsyncSelect Lib "ws2_32" (ByVal hSocket As Long, ByVal hWnd As Long, ByVal wMsg As Integer, ByVal lEvent As Long) As Integer Declare Function WSACancelAsyncRequest Lib "ws2_32" (ByVal hAsyncTaskHandle As Long) As Integer Declare Function WSACleanup Lib "ws2_32" () As Integer Declare Function WSACloseEvent Lib "ws2_32" (ByVal hEvent As Long) As BooleanDeclare Function WSAConnect Lib "ws2_32" (ByVal hSocket As Long, lpSckName As SOCKADDR, ByVal iSckNameLen As Integer, ByVal lpCallerData As Long, lpCalleeData As Long, lpSQOS As FLOWSPEC, lpGQOS As FLOWSPEC) As Integer Declare Function WSACreateEvent Lib "ws2_32" () As Long Declare Function WSADuplicateSocket Lib "ws2_32" Alias "WSADuplicateSocketA" (ByVal hSocket As Long, ByVal dwProcessId As Long, lpProtocolInfo As WSAPROTOCOL_INFO) Type WSANAMESPACE_INFO NSProviderId As CLSID dwNameSpace As Long fActive As Boolean dwVersion As Long lpszIdentifier As LongEnd Type Declare Function WSAEnumNameSpaceProviders Lib "ws2_32" Alias "WSAEnumNameSpaceProvidersA" (lpdwBufferLength As Long, lpnspBuffer As Long) As Integer Type WSANETWORKEVENTS lNetworkEvents As Long iErrorCode(FD_MAX_EVENTS) As IntegerEnd Type Declare Function WSAEnumNetworkEvents Lib "ws2_32" (ByVal hSocket As Long, ByVal hEventObject As Long, lpNetworkEvents As WSANETWORKEVENTS) Declare Function WSAEnumProtocols Lib "ws2_32" Alias "WSAEnumProtocolsA" (ByVal lpiProtocols As Long, lpProtocolBuffer As Long, ByVal lpdwBufferLength As Long) As Integer Declare Function WSAEventSelect Lib "ws2_32" (ByVal hSocket As Long, ByVal hEventObject As Long, ByVal lNetworkEvents As Long) Declare Function WSAGetLastError Lib "ws2_32" () As Integer Type WSAOVERLAPPED Internal As Long InternalHigh As Long Offset As Long OffsetHigh As Long hEvent As LongEnd Type Declare Function WSAGetOverlappedResult Lib "ws2_32" (ByVal hSocket As Long, lpOverlapped As WSAOVERLAPPED, lpcbTransfer As Long, ByVal fWait As Boolean, ByVal lpdwFlags As Long) As Boolean Type WSABUF dwBufferLen As Long lpBuffer As LongEnd Type Type QUALITYOFSERVICE SendingFlowspec As FLOWSPEC ReceivingFlowspec As FLOWSPEC ProviderSpecific As WSABUFEnd Type Declare Function WSAGetQOSByName Lib "ws2_32" (ByVal hSocket As Long, lpQOSName As Long, lpQOS As QUALITYOFSERVICE) Declare Function WSAGetServiceClassInfo Lib "ws2_32" Alias "WSAGetServiceClassInfoA" (lpProviderId As CLSID, lpServiceClassId As CLSID, ByVal lpdwBufferLength As Long, ByVal lpServiceClassInfo As Long) As Integer Declare Function WSAGetServiceClassNameByClassId Lib "ws2_32" Alias "WSAGetServiceClassNameByClassIdA" (lpServiceClassId As CLSID, ByVal lpszServiceClassName As String, ByVal lpdwBufferLength As Integer) As Integer Declare Function WSAHtonl Lib "ws2_32" (ByVal hSocket As Long, ByVal dwHostLong As Long, dwNetLong As Long) As Integer Declare Function WSAHtons Lib "ws2_32" (ByVal hSocket As Long, ByVal iHostShort As Integer, lpNetShort As Integer) As Integer Type WSAServiceClassInfo lpServiceClassId As CLSID lpszServiceClassName As String dwCount As Long lpClassInfos As LongEnd Type Declare Function WSAInstallServiceClass Lib "ws2_32" Alias "WSAInstallServiceClassA" (lpServiceClassInfo As WSAServiceClassInfo) Declare Function WSAIoctl Lib "ws2_32" (ByVal hSocket As Long, ByVal dwIoControlCode As Long, ByVal lpvInBuffer As Long, ByVal cbInBuffer As Long, ByVal lpvOUTBuffer As Long, ByVal bOUTBuffer As Long, lpcbBytesReturned As Long, lpOverlapped As WSAOVERLAPPED, ByVal lpCompletionROUTINE As Long) Declare Function WSAJoinLeaf Lib "ws2_32" (ByVal hSocket As Long, lpSckName As SOCKADDR, ByVal iSckNameLen As Integer, lpCallerData As WSABUF, lpCalleeData As WSABUF, lpSQOS As FLOWSPEC, lpGQOS As FLOWSPEC, ByVal dwFlags As Long) As Long Enum WSAEcomparator COMP_EQUAL = 0 COMP_NOTLESS = 1End Enum Type WSAVersion dwVersion As Long ecHow As WSAEcomparatorEnd Type Type AFPROTOCOLS iAddressFamily As Integer iProtocol As IntegerEnd Type Type SOCKET_ADDRESS lpSockaddr As Long iSockaddrLength As LongEnd Type Type WSAQuerySet dwSize As Long lpszServiceInstanceName As String lpServiceClassId As CLSID lpVersion As WSAVersion lpszComment As String dwNameSpace As Long lpNSProviderId As CLSID lpszContext As String dwNumberOfProtocols As Long lpafpProtocols As Long lpszQueryString As String dwNumberOfCsAddrs As Long lpcsaBuffer As CSADDR_INFO dwOutputFlags As Long lpBlob As BLOBEnd Type Declare Function WSALookupServiceBegin Lib "ws2_32" Alias "WSALookupServiceBeginA" (ByVal lpqsRestrictions As WSAQuerySet, ByVal dwControlFlags As SearchControlFlags, lphLookup As Long) As Integer Declare Function WSALookupServiceEnd Lib "ws2_32" (ByVal hLookup As Long) As Integer Declare Function WSALookupServiceNext Lib "ws2_32" Alias "WSALookupServiceNextA" (ByVal hLookup As Long, ByVal dwControlFlags As SearchControlFlags, lpdwBufferLength As Long, lpqsResults As WSAQuerySet) As Integer Declare Function WSANtohl Lib "ws2_32" (ByVal hSocket As Long, ByVal lpNetLong As Long, lpHostLong As Long) As Integer Declare Function WSANtohs Lib "ws2_32" (ByVal hSocket As Long, ByVal lpNetShort As Integer, lpHostShort As Integer) As Integer Declare Function WSAProviderConfigChange Lib "ws2_32" (ByVal lpNotificationHandle As Long, lpOverlapped As WSAOVERLAPPED, ByVal lpCompletionROUTINE As Long) As Integer Declare Function WSARecvEx Lib "ws2_32" (ByVal hSocket As Long, ByVal lpBuffers As Long, ByVal dwBufferCount As Long, lpNumberOfBytesRecvd As Long, lpFlags As Long, lpOverlapped As WSAOVERLAPPED, ByVal lpCompletionROUTINE As Long) As Integer Declare Function WSARecvDisconnect Lib "ws2_32" (ByVal hSocket As Long, lpInboundDisconnectData As WSABUF) As Integer Declare Function WSARecvFrom Lib "ws2_32" (ByVal hSocket As Long, ByVal lpBuffers As Long, ByVal dwBufferCount As Long, lpNumberOfBytesRecvd As Long, lpFlags As Long, lpFrom As SOCKADDR, lpFromlen As Integer, lpOverlapped As WSAOVERLAPPED, ByVal lpCompletionROUTINE As Long) As Integer Declare Function WSARemoveServiceClass Lib "ws2_32" (lpServiceClassId As CLSID) As Integer Declare Function WSAResetEvent Lib "ws2_32" (ByVal hEvent As Long) As Boolean Declare Function WSASend Lib "ws2_32" (ByVal hSocket As Long, ByVal lpBuffers As Long, ByVal dwBufferCount As Long, lpNumberOfBytesSent As Long, ByVal dwFlags As Long, lpOverlapped As WSAOVERLAPPED, ByVal lpCompletionROUTINE As Long) As Integer Declare Function WSASendDisconnect Lib "ws2_32" (ByVal hSocket As Long, boundDisconnectData As WSABUF) As Integer Declare Function WSASendTo Lib "ws2_32" (ByVal hSocket As Long, ByVal lpBuffers As Long, ByVal dwBufferCount As Long, lpNumberOfBytesSent As Long, ByVal dwFlags As Long, lpTo As SOCKADDR, ByVal iToLen As Integer, lpOverlapped As WSAOVERLAPPED, ByVal lpCompletionROUTINE As Long) As Integer Declare Function WSASetEvent Lib "ws2_32" (ByVal hEvent As Long) As BooleanDeclare Sub WSASetLastError Lib "ws2_32" (ByVal iError As Integer) Enum WSAESETSERVICEOP RNRSERVICE_REGISTER = 0 RNRSERVICE_DEREGISTER = 1 RNRSERVICE_DELETE = 2End Enum Declare Function WSASetService Lib "ws2_32" Alias "WSASetServiceA" (lpqsRegInfo As WSAQuerySet, essOperation As WSAESETSERVICEOP, ByVal dwControlFlags As Long) As Integer Declare Function WSASocket Lib "ws2_32" Alias "WSASocketA" (ByVal iAddressFamily As Integer, ByVal iType As Integer, ByVal iProtocol As Integer, lpProtocolInfo As WSAPROTOCOL_INFO, ByVal lpGroup As Long, ByVal dwFlags As Long) As Long Declare Function WSAStartup Lib "ws2_32" (ByVal wVersionRequired As Long, lpWSAData As WSADATA) As Long Declare Function WSAStringToAddress Lib "ws2_32" (ByVal AddressString As String, ByVal AddressFamily As Integer, lpProtocolInfo As WSAPROTOCOL_INFO, lpAddress As SOCKADDR, lpAddressLength As Integer) As Integer Public SockLastError As Long Function sckhibyte(ByVal wParam As Integer) sckhibyte = (wParam \ &H100) And &HFF&End Function Function scklobyte(ByVal wParam As Integer) scklobyte = wParam And &HFF&End Function Property Get LocalHostName() As String Dim sStr As String * 256, lStr& Dim r& r = gethostname(sStr, 256) SockLastError = WSAGetLastError() LocalHostName = Trim(Replace(sStr, vbNullChar, vbNullString))End Property Property Get LocalHostIP() As String Dim sHostName$, pHostent& Dim pHost As HOSTENT Dim hIPAddress&, sIPAddress$ Dim abIPAddress() As Byte Dim i% sHostName = LocalHostName pHostent = gethostbyname(sHostName) SockLastError = WSAGetLastError() If pHostent = 0 Then Exit Property CopyMemory ByVal pHost, ByVal pHostent, ByVal LenB(pHost) CopyMemory hIPAddress, ByVal pHost.h_addr_list, ByVal 4& ReDim abIPAddress(1 To pHost.h_length) CopyMemory abIPAddress(1), ByVal hIPAddress, ByVal pHost.h_length For i = 1 To pHost.h_length sIPAddress = sIPAddress & abIPAddress(i) & "." Next LocalHostIP = Left$(sIPAddress, Len(sIPAddress) - 1) End Property Sub SocketsInitialize() Dim WSAD As WSADATA Dim iReturn As Integer Dim sLowByte As String, sHighByte As String, sMsg As String iReturn = WSAStartup(WS_VERSION_REQD, WSAD) SockLastError = WSAGetLastError() If iReturn <> 0 Then Exit Sub End If If LoByte(WSAD.wversion) < WS_VERSION_MAJOR Or _ (LoByte(WSAD.wversion) = WS_VERSION_MAJOR And _ HiByte(WSAD.wversion) < WS_VERSION_MINOR) Then Exit Sub End If If WSAD.iMaxSockets < MIN_SOCKETS_REQD Then Exit Sub End If End Sub Function SocketsCleanup() As Long SocketsCleanup = WSACleanup()End Function Function CreateSocket(ByVal SockType As SockTypes, Optional ByVal Protocol As SockProtocols = IPPROTO_TCP) As Long CreateSocket = socket(AF_NETBIOS, SockType, Protocol) SockLastError = WSAGetLastErrorEnd Function Function DestroySocket(hSocket As Long) As Boolean DestroySocket = (closesocket(hSocket) = 0) SockLastError = WSAGetLastErrorEnd Function Function GetSckName(hSocket As Long) As String Dim sName$ Dim pSckAdd As SOCKADDR, lpAdd& Dim r& r = GetSockNameA(hSocket, lpAdd, LenB(pSckAdd)) SockLastError = WSAGetLastError CopyMemory ByVal pSckAdd, ByVal lpAdd, ByVal LenB(pSckAdd) GetSckName = Trim(Replace(pSckAdd.sa_data, vbNullChar, vbNullString)) End Function Ojala les guste chao.
Cyclop:
Yo encontre uno mejor, trabaja con los apis pero te crea un control personalizado (usercontrol) con el WinSock.Ocx, maneja los mismos metodos y eventos que el .OCX. despues lo subo.
Salu2
Cyclopz
RadicalEd:
--- Cita de: "Cyclop" --- Yo encontre uno mejor, trabaja con los apis pero te crea un control personalizado (usercontrol) con el WinSock.Ocx, maneja los mismos metodos y eventos que el .OCX. despues lo subo.
Salu2
Cyclopz
--- Fin de la cita ---
Pero es que lo bueno es no cargar controles, para hacer un poquito mas portable el programa.
Kev:
Bueno yo pienso que mas que armar controles, o hacer mas portable el programa esta el performance de la aplicacion porque por ejemplo el control Winsock es pesado por tal motivo la mayoria de la gente recurre a usar su API y asi trabajar a mas bajo nivel y hacer mas eficiente un programa, por ejemplo hacer correr unos... 4 o mas winsocks y veran lo que les digo.
Hay mucho codigo disponible en la red para trabajar con sockets a bajo nivel y superar las funciones del winsock, aca les paso una pagina que tiene bastante info al respecto
VB y sockets
En este aspecto .NET tiene unas clases bastante trabajadas y ya no es necesario batirse con tanto codigo, es una maravilla y es muy eficiente.
Salu2
:comp: :hola:
Navegación
Ir a la versión completa