[GUIDA] Connessioni tcp

« Older   Newer »
  Share  
xdmisterx
CAT_IMG Posted on 26/12/2009, 20:47     +1   -1




-Prefazione:
In questa guida spiegherò il concetto base per la creazione di un client e server. Prima di leggere questa guida consiglio di conoscere abbastanza bene i concetti di base.

-Introduzione:
Le connessioni in tcp si basano su due concetti fondamentali:
-la creazione dei socket di connessione;
-la trasmissione e ricezione di stringhe.
Prima di iniziare qualsiasi script, bisogna ricordarsi di utilizzare la funzione TCPStartup() all'inizio dello script, altrimenti tutte le funzioni non funzioneranno correttamente.

-I comandi:
-TCPStartup: avvia il servizio tcp;
-TCPConnect: si connette al server desiderato;
-TCPListen: avvia il socket per la ricezione;
-TCPAccept: accetta una connessione in entrata
-TCPSend: invia una stringa al client o server;
-TCPRecv: riceve le stringhe;
-TCPCloseSocket: chiude la connessione;
-TCPShutdown: arresta il servizio;
Per spiegare il funzionamento delle funzioni, creeremo una piccola e semplice chat.

-Connessione:
-Client:
CODICE
TCPStartup()        ;avviamo il servizio TCP

$ip=InputBox("Chat","Inserisci l'ip:",@IPAddress1,"",50,50)        ;richiesta dell'ip
If $ip="" Then Exit
$porta=1234        ;porta di connessione

$socket=TCPConnect($ip,$porta)        ;si connette al server specificato
If $socket=-1 Then        ;se non si riesce a collegare ritorna un errore esce
       MsgBox(16,"errore","errore nella connessione",5)
       Exit
Else
       MsgBox(0,"chat","Connesso con successo.")
       Exit
EndIf


-Server:
CODICE
TCPStartup()        ;avviamo il servizio TCP
$listen=TCPListen(@IPAddress1,1234)        ;si mette in ascolto sull'ip locale e la porta 1234
While 1
       $socket=TCPAccept($listen)
       If $socket <> -1 Then ExitLoop
WEnd
MsgBox(0,"server","connesso")


Vediamo di spiegare come funzionano questi due script.
-Server: dopo aver avviato il servizio tcp, il server crea una connessione tramite la funzione TCPListen sull'ip locale, definito dalla macro @ipaddress1, e la porta 1234. A questo punto si mette in un ciclo infinito in cui controlla continuamente se è avvenuta una connessione, ovvero il valore di $socket sia diverso da -1, cioè errore. Quando $socket non risulta come errore, significa che la connessione è avvenuta con successo e continua lo script.
-Client: dopo aver avviato il servizio TCP, richiede all'utente l'indirizzo a cui collegarsi(se siete in locale lasciate così). La funzione TCPConnect provvederà a connettersi con il server sulla porta 1234. Se la connessione non è avvenuta, il valore di $socket risulterà -1 e quindi lo script uscirà.
N.B.: Ricordatevi che bisogna avviare prima il server e poi il client, altrimenti non funzionerà.

-Invio e ricezione dei dati:
Per concludere vediamo come inviare dei messaggi:
-Client:
CODICE
;client
TCPStartup()        ;avviamo il servizio TCP
#include <GuiConstants.au3>
#include <GuiEdit.au3>

$ip=InputBox("Chat","Inserisci l'ip:",@IPAddress1,"",50,50)        ;richiesta dell'ip
If $ip="" Then Exit
$porta=1234        ;porta di connessione

$socket=TCPConnect($ip,$porta)        ;si connette al server specificato
If $socket=-1 Then        ;se non si riesce a collegare ritorna un errore esce
       MsgBox(16,"errore","errore nella connessione",5)
       Exit
EndIf
;altrimenti crea una gui

GUICreate("Chat",300,240)
$edit=GUICtrlCreateEdit("",0,0,300,200)
$msg=GUICtrlCreateInput("",10,210,200,20)
$send=GUICtrlCreateButton("Invia",215,210,80,20)

GUISetState()

While 1
       ;controllo della gui
       Switch GUIGetMsg()
       Case $gui_event_close
               Exit
       Case $send
               $msg1=GUICtrlRead($msg)
               TCPSend($socket,$msg1)
               GUICtrlSetData($msg,"")
       EndSwitch
       
       $recv=TCPRecv($socket,2048)        ;attende una stringa
       If $recv <> "" Then        ;se riceve una stringa allora scrive nell'edit
               _GUICtrlEdit_AppendText($edit,$recv & @CRLF)
       EndIf
WEnd


-Server:
CODICE
;server
TCPStartup()        ;avviamo il servizio TCP
#include <GuiConstants.au3>
#include <GuiEdit.au3>

$listen=TCPListen(@IPAddress1,1234)        ;si mette in ascolto sull'ip locale e la porta 1234
While 1
       $socket=TCPAccept($listen)
       If $socket <> -1 Then ExitLoop
WEnd

GUICreate("Chat",300,240)
$edit=GUICtrlCreateEdit("",0,0,300,200)
$msg=GUICtrlCreateInput("",10,210,200,20)
$send=GUICtrlCreateButton("Invia",215,210,80,20)

GUISetState()

While 1
       ;controllo della gui
       Switch GUIGetMsg()
       Case $gui_event_close
               Exit
       Case $send
               $msg1=GUICtrlRead($msg)
               TCPSend($socket,$msg1)
               GUICtrlSetData($msg,"")
       EndSwitch
       
       $recv=TCPRecv($socket,2048)        ;attende una stringa
       If $recv <> "" Then        ;se riceve una stringa allora scrive nell'edit
               _GUICtrlEdit_AppendText($edit,$recv & @CRLF)
       EndIf
WEnd


Una volta che si sono connessi, il client e il server creano la gui per la chat con un edit per la ricezione dei messaggi e un'input per l'invio.
-Invio: quando si clicca sul pulsante "Invia", il programma legge l'input e invia la stringa tramite la funzione TCPSend, che richiede come parametri il socket di connessione relativo alla funzione TCPConnect(nel nostro caso $socket), e la stringa da inviare, che nel nostro caso è l'input.
-Ricezione: il programma riceve continuamente i dati dal socket attraverso la funzione TCPRecv. Nel caso ricevesse una stringa non vuota, va a scrivere nell'edit. I parametri richiesti dalla funzione sono il socket di connessione(nel nostro caso $socket, ovvero quello relativo alla funzione TCPAccept) e il numero massimo di caratteri, che nel nostro caso sono 2048. Questo serve a impostare il limite massimo di caratteri.


Copyright by Misterx
 
Top
nicofossa96
CAT_IMG Posted on 27/12/2009, 14:09     +1   -1




Grazie, finalmente una guida che spiega come creare un server!!!
:P :D :lol:
 
Top
MHack
CAT_IMG Posted on 27/12/2009, 14:32     +1   -1




Infatti,la cercavo da tempo.Grazie xdmisterx
 
Top
xdmisterx
CAT_IMG Posted on 27/12/2009, 14:49     +1   -1




CITAZIONE (MHack @ 27/12/2009, 14:32)
Infatti,la cercavo da tempo.Grazie xdmisterx

E avresti cercato invano...difatti non ne ho mai trovata una in giro, per questo l'ho fatta :D
comunque grazie :)
p.s.:chiamatemi Misterx, xdmisterx l'ho messo solo perchè era già occupato :)
 
Top
MatteoJug
CAT_IMG Posted on 27/12/2009, 15:50     +1   -1




Davvero un bel lavoro! :D
 
Top
idona
CAT_IMG Posted on 27/12/2009, 19:56     +1   -1




wow in poche semplice parole hai spiegato come creare un server ed un client...davvero fantastico!!! complimenti :lol:
 
Top
lollofieretto
CAT_IMG Posted on 13/2/2010, 09:34     +1   -1




complimenti veramente... finalmente una guida per creare un server... grande
 
Top
bub
CAT_IMG Posted on 13/3/2010, 23:59     +1   -1




CITAZIONE
TCPStartup() ;avviamo il servizio TCP

$ip=InputBox("Chat","Inserisci l'ip:",@IPAddress1,"",50,50) ;richiesta dell'ip
If $ip="" Then Exit
$porta=1234 ;porta di connessione

$socket=TCPConnect($ip,$porta) ;si connette al server specificato
If $socket=-1 Then ;se non si riesce a collegare ritorna un errore esce
MsgBox(16,"errore","errore nella connessione",5)
Exit
Else
MsgBox(0,"chat","Connesso con successo.")
Exit
EndIf

mi sbaglierò ma secondo me quel exit non ci và
 
Top
Lahace
CAT_IMG Posted on 14/3/2010, 09:51     +1   -1




è solo per testare la connessione...poi il programma esce
 
Top
anpoz
CAT_IMG Posted on 14/5/2010, 17:07     +1   -1




Grande ;) bella guida.
Pero quacuno mi spiega come si usa "StringInStr" ? nell'help non ho capito niente...
 
Top
-Anubi-
CAT_IMG Posted on 14/5/2010, 17:32     +1   -1




-.-" complimenti, necropostaggio più sezione sbagiata
 
Top
anpoz
CAT_IMG Posted on 14/5/2010, 18:50     +1   -1




Puoi spiegarmi quello che hai scritto =_=
 
Top
-Anubi-
CAT_IMG Posted on 14/5/2010, 19:01     +1   -1




Hai scritto in un post mooooooooooolto vecchio e in più hai sbagliato sezione ! Maledetti n00b
 
Top
Sbarabau
CAT_IMG Posted on 14/5/2010, 19:01     +1   -1




Ha scritto che non si uppano topic vecchi -.-'
 
Top
anpoz
CAT_IMG Posted on 14/5/2010, 19:04     +1   -1




vabbe avrò anche riuppato un post (non ho guardato la data...) pero non capisco perchè ho sbagliato sezione..dove devo scriverlo nella sezione C/C++ =_=
 
Top
32 replies since 26/12/2009, 20:47   2231 views
  Share