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

[0] Índice de Mensajes

Ir a la versión completa