Newsgroup: it.comp.lang.visual-basic
Titolo: [?] Un WinSock alternativo, chi mi aiuta?

Salve a tutti ragassi
Dal momento che non sopporto gli OCX (ohč, č piů forte di me) e tantomeno il
WinSock OCX di M$ distribuito col VB, sto realizzando un modulo BAS con
tutte le chiamate.
Per le chiamate non ho problemi, ho trovato le dichiarazioni...
Il fatto č che non so 'sostituirle' all'OCX.
Ovvero,
quando io scrivo Winsock1.Connect "Mio server", "Mia porta" (per esempio) a
quale delle mie chiamate API equivale?
Se posto il materiale che ho, chi mi aiuta? Non dovrebbe durare molto questo
lavoro....
Thanks to everyone.....!
--
Umberto 'Ubi 1k' Meroni, Software Development
Come contattarmi: 
http://www.idealia.net/ubi1k/contacts.html
Webmaster di: 
http://www.idealia.net/ubi1k


Eccomi qui, sempre pronto a combattere contro l'infestazione di OCX
"evitabili"!
Anche se non ho molto tempo, ti do volentieri una mano (cosi' ne approfitto
per affrontare un argomento per me nuovo, il winsock!)
--
Roal Zanazzi
z...@iol.it

per affrontare un argomento per me nuovo, il winsock!)
Anch'io sono massimamente interessato:
l'OCX si appoggia su WinSck.Dll.
Tempo fa c'era qualcuno che cercava documentazione su quella DLL: trovando la documentazione.....
Il problema è trovarla (poi anche usare le funzioni, ma visto il funzionamento dell'OCX, spero non sia troppo complesso,
anche se spero sempre di trovar documentazione [illusione mode ON])
Ciao,
Moreno
#sirri#@
tin.it
(togliete "#" dall'indirizzo)
---------------------------------------------------------------------------
Le risposte alle tue domande le trovi sul Sito Comune di questo NewsGroup:
 
http://www.murialdo.it/it_lang_vb
---------------------------------------------------------------------------

la documentazione.....
Beh, la documentazione e' l'help delle API WinSock... se non la trovate da
altre parti, io ho quello distribuito con Delphi o C++Builder.
Forse piu' che altro, servirebbe della documentazione descrittiva sul
sistema e la logica di funzionamento dei sockets.
--
Roal Zanazzi
z...@iol.it

sistema e la logica di funzionamento dei sockets.
mmm, chiediamo troppo? In teoria credo di no, ma in pratica temo di sì... :-((



C'è un modulo bas che si chiama winsock.bas. Se lo vuoi te lo mando.

>C'è un modulo bas che si chiama winsock.bas. Se lo vuoi te lo mando.
Ehm, la prima risposta che mi è venuta in mente è: "perché non lo posti sul Sito Comune?" ma poi, ripensandoci......
Sì, se me lo mandi mi fai un favore, grazie! ^___^



Mah, non credo sia impossibile, ma ci vuole tempo per provare... e io di
tempo non ne ho.
--
Roal Zanazzi
z...@iol.it

it.binari.vb... non ho mai postato su un NG moderato =°:-(
Manda una mail al moderatore (
bina...@hotmail.com
) e richiedi l'autorizzazione, poi posta....
P.S.
Leggi il manivesto del Newsgroup prima di postare ^____^ (mo s'incazza!!!! ^___^)



Non mi ricordo quale.. ma c'è un modo per postare nei NG moderati senza
l'approvazione del moderatore :)))
Ciao

 wrote in message
7koasn$lc2$6...@fe1.cs.interbusiness.it...

Meimi, sempre a trafficare con telnet su porte _non_ telnet !!!!  ;-)
Comunque preferisco fare le cose come si deve (anche perche' non ho voglia
di smanettare con telnet in questo periodo :-)
--
Roal Zanazzi
z...@iol.it

Delphi ci ho messo 1 minuto!)
Io avevo usato questo codice (da inserire in un modulo BAS), che penso di
aver preso da VBNET (
http://www.mvps.org/vbnet/
).
Quello che ti interessa viene fatto dalla Function GetIPAddress, che ti
restituisce una stringa contenente l'IP corrente.
---------------------------------------------
Option Explicit
Public Const MAX_WSADescription = 256
Public Const MAX_WSASYSStatus = 128
Public Const ERROR_SUCCESS       As Long = 0
Public Const WS_VERSION_REQD     As Long = &H101
Public Const WS_VERSION_MAJOR    As Long = WS_VERSION_REQD \ &H100 And &HFF&
Public Const WS_VERSION_MINOR    As Long = WS_VERSION_REQD And &HFF&
Public Const MIN_SOCKETS_REQD    As Long = 1
Public Const SOCKET_ERROR        As Long = -1
Public Type HOSTENT
   hName      As Long
   hAliases   As Long
   hAddrType  As Integer
   hLen       As Integer
   hAddrList  As Long
End Type
Public Type WSADATA
   wVersion      As Integer
   wHighVersion  As Integer
   szDescription(0 To MAX_WSADescription)   As Byte
   szSystemStatus(0 To MAX_WSASYSStatus)    As Byte
   wMaxSockets   As Integer
   wMaxUDPDG     As Integer
   dwVendorInfo  As Long
End Type
Public Declare Function WSAGetLastError Lib "WSOCK32.DLL" () As Long
Public Declare Function WSAStartup Lib "WSOCK32.DLL" (ByVal wVersionRequired
As Long, lpWSADATA As WSADATA) As Long
Public Declare Function WSACleanup Lib "WSOCK32.DLL" () As Long
Public Declare Function gethostname Lib "WSOCK32.DLL" (ByVal szHost As
String, ByVal dwHostLen As Long) As Long
Public Declare Function gethostbyname Lib "WSOCK32.DLL" (ByVal szHost As
String) As Long
Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (hpvDest
As Any, ByVal hpvSource As Long, ByVal cbCopy As Long)
Public Function GetIPAddress() As String
Dim sHostName As String * 256
Dim lpHost As Long
Dim HOST As HOSTENT
Dim dwIPAddr As Long
Dim tmpIPAddr() As Byte
Dim i As Integer
Dim sIPAddr  As String
If Not SocketsInitialize() Then
    GetIPAddress = ""
    Exit Function
End If
'gethostname returns the name of the local host into
  'the buffer specified by the name parameter. The host
  'name is returned as a null-terminated string. The
  'form of the host name is dependent on the Windows
  'Sockets provider - it can be a simple host name, or
  'it can be a fully qualified domain name. However, it
  'is guaranteed that the name returned will be successfully
  'parsed by gethostbyname and WSAAsyncGetHostByName.
  'In actual application, if no local host name has been
  'configured, gethostname must succeed and return a token
  'host name that gethostbyname or WSAAsyncGetHostByName  'can resolve.
If gethostname(sHostName, 256) = SOCKET_ERROR Then
    GetIPAddress = ""
    MsgBox "Windows Sockets error " & Str$(WSAGetLastError()) & " has
occurred. Unable to successfully get Host Name."
    SocketsCleanup
    Exit Function
End If
  'gethostbyname returns a pointer to a HOSTENT structure
  '- a structure allocated by Windows Sockets. The HOSTENT
  'structure contains the results of a successful search
  'for the host specified in the name parameter.
  'The application must never attempt to modify this
  'structure or to free any of its components. Furthermore,
  'only one copy of this structure is allocated per thread,
  'so the application should copy any information it needs
  'before issuing any other Windows Sockets function calls.
  'gethostbyname function cannot resolve IP address strings
  'passed to it. Such a request is treated exactly as if an
  'unknown host name were passed. Use inet_addr to convert
  'an IP address string the string to an actual IP address,
  'then use another function, gethostbyaddr, to obtain the
  'contents of the HOSTENT structure.
sHostName = Trim$(sHostName)
lpHost = gethostbyname(sHostName)
If lpHost = 0 Then
    GetIPAddress = ""
    MsgBox "Windows Sockets are not responding. " & "Unable to successfully
get Host Name."
    SocketsCleanup
    Exit Function
End If
  'to extract the returned IP address, we have to copy
  'the HOST structure and its members
CopyMemory HOST, lpHost, Len(HOST)
CopyMemory dwIPAddr, HOST.hAddrList, 4
  'create an array to hold the result
ReDim tmpIPAddr(1 To HOST.hLen)
CopyMemory tmpIPAddr(1), dwIPAddr, HOST.hLen
  'and with the array, build the actual address,
  'appending a period between members
For i = 1 To HOST.hLen
sIPAddr = sIPAddr & tmpIPAddr(i) & "."
Next
  'the routine adds a period to the end of the  'string, so remove it here
GetIPAddress = Mid$(sIPAddr, 1, Len(sIPAddr) - 1)
SocketsCleanup
End Function
Public Function GetIPHostName() As String
Dim sHostName As String * 256
If Not SocketsInitialize() Then
    GetIPHostName = ""
    Exit Function
End If
If gethostname(sHostName, 256) = SOCKET_ERROR Then
    GetIPHostName = ""
    MsgBox "Windows Sockets error " & Str$(WSAGetLastError()) & " has
occurred.  Unable to successfully get Host Name."
    SocketsCleanup
    Exit Function
End If
GetIPHostName = Left$(sHostName, InStr(sHostName, Chr(0)) - 1)
SocketsCleanup
End Function
Public Function HiByte(ByVal wParam As Integer)
HiByte = wParam \ &H100 And &HFF&
End Function
Public Function LoByte(ByVal wParam As Integer)
LoByte = wParam And &HFF&
End Function
Public Sub SocketsCleanup()
If WSACleanup() <> ERROR_SUCCESS Then
    MsgBox "Socket error occurred in Cleanup."
End If
End Sub
Public Function SocketsInitialize() As Boolean
Dim WSAD As WSADATA
Dim sLoByte As String
Dim sHiByte As String
If WSAStartup(WS_VERSION_REQD, WSAD) <> ERROR_SUCCESS Then
    MsgBox "The 32-bit Windows Socket is not responding."
    SocketsInitialize = False
    Exit Function
End If
If WSAD.wMaxSockets < MIN_SOCKETS_REQD Then
    MsgBox "This application requires a minimum of " &
CStr(MIN_SOCKETS_REQD) & " supported sockets."
    SocketsInitialize = False
    Exit Function
End If
If LoByte(WSAD.wVersion) < WS_VERSION_MAJOR Or (LoByte(WSAD.wVersion) =
WS_VERSION_MAJOR And HiByte(WSAD.wVersion) < WS_VERSION_MINOR) Then
    sHiByte = CStr(HiByte(WSAD.wVersion))
    sLoByte = CStr(LoByte(WSAD.wVersion))
    MsgBox "Sockets version " & sLoByte & "." & sHiByte & " is not supported
by 32-bit Windows Sockets."
    SocketsInitialize = False
    Exit Function
End If
  'must be OK, so lets do it
SocketsInitialize = True
End Function
--------------------------------------
Ciao,
   <--< Nik >-->
P.S. Non mi sono dimenticato della storia della criptazione, solo che non ho
più avuto tempo da dedicarci. Può darsi che tra poco mi serva un tuo piccolo
aiuto... :-)
Per rispondermi in E-Mail togliere "deleteme" dall'indirizzo.
To reply me by E-Mail remove "deleteme" from my address.

Thanks to everyone, ora mi metto sotto e vedo cosa posso fare...!!
--
Umberto 'Ubi 1k' Meroni, Software Development
Visual Basic at Ubi 1k Headquarters: 
http://www.idealia.net/ubi1k
Sito Comune VB: 
http://www.murialdo.it/it_lang_vb
--

 di smanettare con telnet in questo periodo :-)
Veramente è una modifica da fare nel registro :)) non mi ricordo se si
devono scrivere messaggi modificando anche  gli header.. l'articolo mi
sembra l'avesse scritto sempre Master... ma non mi ricordo dove ;_;
Quindi anche tu trafficavi con le porte... l'ho sempre pensato, non so
perché!
Ciao