Newsgroup: it.comp.lang.visual-basic
Titolo: Winsock

Ciao, qualcuno mi puo' mandare un codice di esempio per scambiarsi
informazioni tra 2 PC con TCP utilizzando Winsock.dll
Grazie siete molto gentili
Passo

...


Farebbe piacere anche a me .... 8-)
Ciao
Giampy
gpa...@com-e.com


Per imparare ad usare il controllo winsock.ocx basta dare un'occhiata agli
esempi che ci sono sul cd MSDN, basta un pomeriggio credimi.
Praticamente fa tutto lui.

Il codice va suddiviso in due parti ben distinte: la parte del server (che ascolta e invia le risposte) e la parte del
client (che invia le domande e riceve le risposte). Il protocollo che utilizzo è il TCP, che permette una comunicazione
più "convenzionale".
Ognuna delle due parti si struttura a sua volta nei vari eventi che il controllo Winsock genera.
————————————————————————————
[1] Parte SERVER
(-) Nel form principale aggiungere un controllo Winsock (che io chiamerò WSCK)
e impostarne la proprità Index a 0. Questo serve per poter inizializzare
l'istanza del controllo... fidatevi!
(-) Decidere quale porta volete utilizzare. Per trovare una porta libera, consultate il file
C:\WINDOWS\Services. Supponiamo che io utilizzi la porta 1000.
(-) Creare la funzione che attiva il thread di ascolto del controllo.
Private Sub Listen(ByVal sockID)
    On Error Resume Next
    Load WSCK(sockID)
    WSCK(sockID).LocalPort = 1000
    WSCK(sockID).Listen    'mette in ascolto il controllo
End Sub
(-) Nel Form_Main inserite il codice Listen 1
    A questo punto, il server ha attivato un processo di ascolto sulla porta 1000.
(-) Eventi di gestione del controllo:
    1 - ConnectionRequest: il server riceve una richiesta di comunicazione da un client
    Private Sub WSCK_ConnectionRequest(Index As Integer, ByVal requestID As Long)
        WSCK(Index).Close                       'chiude il processo di ascolto
        WSCK(Index).Accept requestID    'accetta la richiesta di comunicazione
    End Sub
    2 - DataArrival: il server riceve un messaggio. Qui dovete inserire le operazioni
         di risposta alla richiesta del client
    Private Sub WSCK_DataArrival(Index As Integer, ByVal bytesTotal As Long)
        Dim MSG$
        'Scarica il messaggio dal buffer
        WSCK(Index).GetData MSG, vbString
        'Se dovete rispondere al client fate così:
        WSCK(Index).SendData "Qualsiasi cosa vogliate trasmettere in formato stringa"
        'Se volete anche chiudere la comunicazione fate così:
        WSCK(Index).Close    'l'evento Close (sotto) riattiverà l'ascolto automaticamente
    End Sub
    3 - Close: il processo è chiuso per un qualsiasi motivo
    Private Sub WSCK_Close(Index As Integer)
        WSCK(Index).Close      'per sicurezza chiude il processo di comunicazione
        Listen Index                     'riapre il processo di ascolto
    End Sub
————————————————————————————
[1] Parte CLIENT
La parte client è un po' più semplice: dovete solo gestire la chiamata, l'invio dei dati e la ricezione delle risposte.
(-) Nel form principale aggiungere un controllo Winsock (che io chiamerò WSCK)
e impostarne la proprità Index a 0. Questo serve per poter inizializzare
l'istanza del controllo... fidatevi! (fate come per il server).
(-) Nel Form_Main scrivete questa istruzione: Load WSCK(1)
(-) Quando volete chiamare il server usate questa funzione
    Private Sub Call_Server()
        Unload WSCK(1)
        Load WSCK(1)        'con queste due istruzioni si resetta il controllo
        NetWorkAddress = "200.200.200.1"     'indirizzo di rete del server in ascolto
        Port = 1000                                                'Porta su cui il server è in ascolto
        WSCK(1).Connect NetworkAddress, Port
    End Sub
(-) Quando la connessione è stabilita (l'evento Connect del Winsock ve lo dice) potete inviare la richiesta al server
con l'istruzione: WSCK(1).SendData "messaggio"
(-) Eventi di gestione del controllo:
    DataArrival: il server ha ricevuto il messaggio e ha risposto
    Private Sub WSCK_DataArrival(Index As Integer, ByVal bytesTotal As Long)
        Dim msg$
        WSCK(1).GetData msg, vbString
End Sub
————————————————————————————
Il succo della gestione è tutto qui. In fondo si tratta di deciedere che porta usare e su che indirizzo di rete lavora
il server che ascolta.
Potete aggiungere nell'evento Error del Winsock una gestione per i problemi di
comunicazione (io personalmente la sfrutto per usare un range di n porte e per contare quelle occupate) ma la parte
centrale è questa.
Buon lavoro



e per chi non ha il cd MSDN come noi poveri studenti? sarei
interessato anch'io al winsock, sopratutto perche' stavo pensando di
scrivere un mailer e non so da che parte iniziare per la gestione
della trasmissione/ricezione dei messaggi
Aranar
http://www.nettaxi.com/citizens/Aranar/
   (above all VgaPlanets)
http://www.tempolibero.com/user/aranar
    (sopratutto VgaPlanets)


-----------
Ciao Raffaele!
Perché non fai un bel progettino di esempio e lo invii al Sito Comune?
Marco Minerva
http://www.geocities.com/SiliconValley/Foothills/7260/
http://www.armaditaggia.com/marco

 
c'è un ottimo help per il comando winsock mswinsck.ocx, a meno che tu non
voglia usare direttamente le API sulla dll...