ePerTutti


Appunti, Tesina di, appunto informatica

Controlli WinSock



ricerca 1
ricerca 2

Controlli WinSock


- WinSock


WinSock è un controllo OCX che permette di stabilire una comunicazione tra due computer connessi a una rete (locale o mondiale) sfruttando l'architettura Client/Server e il protocollo TCP o UDP.

Per ottenere una connessione tra Client e Server occorre conoscere l'indirizzo IP (indirizzo univoco) del Server, formato da 4 numeri compresi tra o e 255 separati da un punto. Quindi ad un indirizzo IP corrisponde uno e un solo computer connesso alla rete.

L'indirizzo IP, nella maggior parte dei computer, cambia ogni volta che ci si connette alla rete, quindi quando il Client si connette al Server deve conoscere il suo IP in quel preciso momento. Quando un computer è OffLine, (non collegato alla rete), l'indirizzo standard che identifica il proprio PC, indipendentemente dall'effettivo indirizzo di rete, è 127.0.0.1.

Il protocollo TCP (Transfer Control Protocol) consente di creare e mantenere una connessione con un computer remoto. Utilizzando la connessione, entrambi i computer possono inviare e ricevere dati. Il protocollo TCP è un protocollo basato sulla connessione, in quanto l'utente deve stabilire una connessione prima di poter procedere.



Il protocollo UDP (User Datagram Protocol) è un protocollo senza connessione. A differenza del TCP, non viene stabilita alcuna connessione tra i computer e la transazione tra due computer è analoga al passaggio di un messaggio che viene inviato da un computer all'altro senza che venga stabilita una connessione esplicita tra i due computer. La dimensione massima dei dati che è possibile inviare in ciascuna trasmissione dipende della rete.


In particolare, prendendo TCP come protocollo di riferimento, nel momento in cui i due computer sono in comunicazione, essi ricoprono dei ruoli ben definiti.

Il computer Server invia i dati a chi ne fa richiesta utilizzando la porta specificata mentre il computer Client esegue tale richiesta. L'operazione che avviene tra Client e Server è riassumibile in cinque punti fondamentali:

Il computer Server è in attesa di richieste di comunicazione sulla porta indicata.

Il computer Client richiede al Server l'autorizzazione ad iniziare una comunicazione.

Una volta accettata la richiesta del Client, il computer Server invia i dati.

Terminato lo scambio di dati la comunicazione viene chiusa.

Il computer Server torna in uno stato d'attesa d'eventuali richieste di comunicazione sulla porta indicata.


Proprietà, metodi ed eventi di MsWinsock

Questo è l'elenco delle proprietà:

Proprietà BytesReceived corrisponde al numero di byte scambiati nell'operazione di comunicazione Client/Server. Rappresenta dunque le dimensioni dei pacchetti di dati scambiati. Tale proprietà è associata al metodo GetData. TIPO DI DATO: LONG

Proprietà LocalHostName : corrisponde al nome del computer sul quale opera l'applicazione contenente il controllo Winsock. TIPO DI DATO: STRING

Proprietà LocalIP corrisponde all'indirizzo del computer sul quale opera l'applicazione contenente il controllo Winsock.

TIPO DI DATO: STRING

Proprietà LocalPort è il numero che identifica la porta attraverso la quale verrà effettuata la comunicazione Client/Server. E' una proprietà di lettura e scrittura anche in fase di esecuzione. In particolare:

- Per il client, questa proprietà definisce la porta locale dalla quale vengono inviati i dati; se l'applicazione non richiede una determinata porta, specificare la porta 0. Il controllo effettuerà la selezione casuale di una porta. Dopo aver stabilito la connessione, la porta locale verrà utilizzata per la connessione TCP.

- Per il server, questa proprietà definisce la porta locale di attesa. Se viene specificata la porta 0, verrà utilizzata una porta casuale. Dopo aver richiamato il metodo Listen, la proprietà conterrà la porta selezionata.

TIPO DI DATO: LONG

Proprietà Protocol è il tipo di protocollo che verrà utilizzato. La scelta è tra TCP ed UDP. Prima di reimpostare questa proprietà è necessario chiudere il controllo utilizzando il metodo Close.

Le impostazioni di Protocol possono essere:

sckTCPProtocol caratterizzato dalla costante 0 che indica l'utilizzo (predefinito) del protocollo TCP

sckUDPProtoco,l caratterizzato dalla costante 1 che indica l'utilizzo del protocollo UDP

TIPO DI DATO val/cost

Proprietà RemoteHost è il nome del computer al quale ci si connette per la richiesta di scambio dati.

TIPO DI DATO: STRING

Proprietà RemoteHostIP è l'indirizzo IP del computer al quale ci si connette per la richiesta di scambio dati.

TIPO DI DATO: STRING

Proprietà RemotePort rappresenta la porta alla quale connettersi per richiedere i dati. Quando viene impostata la proprietà Protocol, la proprietà RemotePort viene automaticamente impostata sulla porta predefinita appropriata di ciascun protocollo, ossia:

Porta 80 -> HTTP, utilizzata comunemente per le connessioni al World Wide Web

Porta 21 -> FTP



TIPO DI DATO: LONG

Proprietà SocketHandle è un valore corrispondente all'handle di socket utilizzato dal controllo per comunicare con il livello Winsock. E' una proprietà di sola lettura e non disponibile in fase di progettazione.

Tale proprietà sarà utilizzata per essere passata alle API Winsock.

TIPO DI DATO: LONG

Proprietà State restituisce lo stato del controllo Winsock nel momento in cui ne è richiesta la verifica. I tipi di stato sono:

sckClosed: corrispondente al valore 0. E' l'impostazione predefinita che corrisponde allo stato

'chiuso' del controllo;

sckOpen: corrispondente al valore 1 ed indica lo stato 'aperto' del controllo;

sckListening: corrispondente al valore 2 ed indica lo stato 'in attesa di comunicazione' del controllo;

sckConnectionPending: corrispondente al valore 3 ed indica lo stato 'comunicazione in corso' del controllo;

sckResolvingHost: corrispondente al valore 4 ed indica lo stato 'risoluzione dell'host in corso' del controllo;

sckHostResolved: corrispondente al valore 5 ed indica lo stato 'host risolto' del controllo;

sckConnecting: corrispondente al valore 6 ed indica lo stato 'aperto' del controllo;

sckConnected: corrispondente al valore 7 ed indica lo stato 'connesso' del controllo;

sckClosing: corrispondente al valore 8 ed indica che il client sta chiudendo la comunicazione;

sckError: corrispondente al valore 9 ed indica un errore in un'operazione eseguita da Winsock;

TIPO DI DATO: LONG



Questo è l'elenco dei metodi:

Metodo BytesReceived consente di accettare una richiesta di comunicazione da parte del client. Generalmente il metodo Accept viene utilizzato nell'evento ConnectionRequest ed in una nuova istanza del controllo Winsock anziché nel controllo in attesa.

Metodo Bind specifica la porta locale e l'IP locale da utilizzare per le connessioni TCP. La sintassi è la seguente:

Winsock.Bind PortaLocale, IPLocale

dove PortaLocale è la porta utilizzata per effettuare la connessione e IPLocale è l'indirizzo IP locale utilizzato per effettuare la connessione.

Metodo Close chiude la comunicazione TCP o una socket in attesa per entrambe le applicazioni client e server.

Metodo Connect invia una richiesta di connessione ad un computer remoto. La sintassi è la seguente:

Winsock.Connect HostRemoto, PortaRemota

dove HostRemoto è il nome del computer server al quale ci si connette e PortaRemota è la porta utilizzata.

Metodo GetData recupera il blocco di dati corrente e lo memorizza in una variabile di tipo Variant. La sintassi è la seguente:

oggetto.GetData dati, [tipo,] [lunMax]

dove dati memorizza i dati recuperati dopo l'esecuzione del metodo. Se i dati non sono sufficienti per il tipo di richiesta, la variabile verrà impostata su Empty. Tipo è invece il tipo di dati da recuperare. Il metodo GetData viene in genere utilizzato con l'evento DataArrival contenente l'argomento totalBytes. Se il valore di lunMax è minore del valore dell'argomento totalBytes, verrà visualizzato il messaggio di avviso 10040 in cui viene comunicato che i byte rimanenti andranno perduti. Le possibili impostazioni di tipo sono le seguenti:


vbByte Byte

vbInteger Integer

vbLong Long

vbSingle Single

vbDouble Double

vbCurrency Currency

vbDate Date

vbBoolean Boolean

vbError SCODE



vbString String

vbArray + vbByte Byte Array


lunMax specifica la dimensione desiderata della matrice Byte o della stringa da ricevere. Se non viene specificata alcuna matrice Byte o stringa in questo argomento, verranno recuperati tutti i dati disponibili. Se viene specificato un tipo di dati diverso da una matrice Byte o una stringa, l'argomento verrà ignorato.


Metodo Listen crea una socket e la imposta in modalità di attesa. Questo metodo può essere utilizzato solo per le connessioni TCP.

Metodo PeekData a differenza di GetData, il metodo PeekData non rimuove i dati dalla coda di input. Questo metodo può essere utilizzato solo per le connessioni TCP e ha una sintassi praticamente simile a quella di GetData, vale a dire:

Winsock.PeekData dati, [tipo,] [lunMax]

Metodo SendData invia i dati al computer remoto. La sintassi è del tipo:

Winsock.SendData dati

dove dati rappresenta il gruppo di dati da inviare. Per i dati binari, è necessario utilizzare una matrice Byte. Quando viene passata una stringa UNICODE, la stringa viene convertita in stringa ANSI prima di essere inviata dalla rete.


- I Socket


Un socket è un oggetto attraverso il quale un'applicazione che ne fa uso in modo specifico, invia o riceve dati attraverso la rete con altri socket che fanno uso dell'IPS (Internet Protocol Suite). I socket sono bidirezionali, ossia consentono allo stesso momento un flusso di dati sia in entrata che in uscita. Esistono due tipi di socket:

Stream sockets, che consentono un flusso di dati continuo ed illimitato con la garanzia di evitare duplicazione di dati inviati.

Datagram sockets, i quali non garantiscono che l'ordine di ricezione dei dati sia lo stesso di quello di invio, col rischio di non poter evitare duplicazione di dati (cioè stessi pacchetti di dati possono arrivare a destinazione più volte).


Questo è l'elenco degli eventi:


Evento Close viene generato quando il computer remoto interrompe la connessione.

Evento Connect viene generato nel momento in cui la connessione è stata stabilita con successo.

Evento ConnectionRequest : viene generato nel momento in cui un computer client invia una richiesta di connessione. Il server può quindi decidere se accettare o meno la comunicazione. In caso di rifiuto, il client riceverà l'evento Close.

Evento DataArrival viene generato nel momento in cui un computer client riceve dei dati. L'evento viene generato nel caso in cui tutti i nuovi dati inviati col metodo GetData siano recuperati con successo. Per evitare duplicazione di pacchetti di dati, solamente i nuovi dati saranno considerati. La sintassi è la seguente:

Winsock.DataArrival (BytesTotali As Long)

dove BytesTotali rappresenta il numero di dati che possono essere recuperati.

Evento Error viene generato nel caso in cui si verifichi un errore qualsiasi nel procedimento di connessione, di invio, di richiesta o di chiusura della connessione. La sintassi è la seguente:

Winsock.Error Numero As Integer,

Descrizione As String,

Scode As Long,

Origine As String,

HelpFile as String,

HelpContext As Long,

CancelDisplay As Boolean)

dove Numero indica il codice dell'errore, Descrizione la descrizione dell'errore, Scode è un valore di tipo Long SCODE, Origine descrive l'origine dell'errore, HelpFile è una stringa contenente il nome del file della Guida in linea, HelpContext è il contesto della Guida in linea e CancelDisplay indica l'annullamento della visualizzazione. L'impostazione predefinita (CancelDisplay = False) permette la visualizzazione di una finestra di messaggio di errore predefinita.

Di seguito sono elencati i codici degli errori:


sckOutOfMemory: corrispondente al valore 7. Descrive un errore causato dall'esaurimento della memoria.



sckInvalidPropertyValue: corrisponde al valore 380 e descrive un valore della proprietà non valido.

sckGetNotSupported: corrispondente al valore 394. Descrive un errore causato dall'impossibilità di leggere la proprietà.

sckSetNotSupported: corrispondente al valore 383. Descrive un errore causato dall'impostazione di una proprietà che è di sola lettura.

sckBadState: corrispondente al valore 40006. Protocollo o stato della connessione errato per la transazione o la richiesta.

sckInvalidArg: corrispondente al valore 40014. L'argomento passato ad una funzione è in un formato errato o non è compreso nell'intervallo specificato.

sckSuccess: corrispondente al valore 40017. Connessione completata.

sckUnsupported: corrispondente al valore 40018. Indica un valore di tipo Variant non supportato.

sckInvalidOp: corrispondente al valore 40020. Indica un'operazione non valida.

sckOutOfRange: corrispondente al valore 40021. Indica un argomento non compreso nell'intervallo.

sckWrongProtocol: corrispondente al valore 40026. Indica che è stato usato un protocollo per il quale non è consentita l'operazione che si è tentato di compiere.

sckOpCanceled: corrispondente al valore 1004. L'operazione è stata annullata.

sckInvalidArgument: corrispondente al valore 10014. Indica che il flag non è stato impostato.

sckWouldBlock: corrispondente al valore 10035. Indica che non è possibile bloccare il socket sebbene ne sia stato specificato il blocco.

sckInProgress: corrispondente al valore 10036. Indica che è in corso un'operazione Winsock di blocco.

sckAlreadyComplete: corrispondente al valore 10037. Indica che l'operazione richiesta è già stata eseguita.

sckNotSocked: corrispondente al valore 10038. Indica che non si fa riferimento ad un socket.

sckMsgTooBig: corrispondente al valore 10040. Indica un datagramma troppo grosso per essere inserito nel buffer.

sckPortNotSupported: corrispondente al valore 10043. Indica che la porta specificata non può essere utilizzata per l'operazione indicata.

sckAddressInUs: corrispondente al valore 10048. Indica un indirizzo già in uso.

sckAddressNotAvailable: corrispondente al valore 10049. Indica che l'indirizzo indicato del computer locale non è valido.

sckNetworkSubsystemFailed: corrispondente al valore 10050. Indica un errore nel sottosistema di rete.

sckNetworkUnreachable: corrispondente al valore 10051. Indica che l'host non è in grado di raggiungere la rete.

sckNetReset: corrispondente al valore 10052. Indica che la connessione è stata interrotta quando è stato impostato SO_KEEPALIVE.

sckConnectAborted: corrispondente al valore 10053. Indica una connessione fallita a causa di un timeout (tempo massimo d'attesa superato) o di un altro errore.

sckConnectionReset: corrispondente al valore 10054. Indica che la connessione è stata reinviata dal computer remoto.

sckNoBufferSpace: corrispondente al valore 10055. Indica che lo spazio nel buffer è esaurito.

sckAlreadyConnected: corrispondente al valore 10056. Indica che la connessione è già stata stabilita.

sckSocketShutdown: corrispondente al valore 10058. Indica che la connessione è già stata chiusa.

sckTimedout: corrispondente al valore 10068. Indica che la connessione è stata chiusa.

sckConnectionRefused: corrispondente al valore 10061. Indica che la connessione è stata rifiutata dal computer server.

sckNotInitalized: corrispondente al valore 10093. Indica che è necessario richiamare WinsockInit per primo.

sckHostNotFound: corrispondente al valore 11001. Indica che è impossibile trovare l'host in modo definitivo.

sckInvalidArgument: corrispondente al valore 11002. Indica che è impossibile trovare l'host.

sckNotRecoverableError: corrispondente al valore 11003. Indica un errore non riconoscibile.

sckNoData: corrispondente al valore 11004. Indica che non è possibile ricevere nessun dato del tipo richiesto (quando si fa uso della specifica Winsock.GetData (tipo).

Evento SendComplete viene generato quando tutti i dati sono stati inviati con successo.

Evento SendProgress viene generato quando il processo di invio dei dati è ancora in corso.








Privacy

© ePerTutti.com : tutti i diritti riservati
:::::
Condizioni Generali - Invia - Contatta