Newsgroup: it.comp.lang.visual-basic
Titolo: VB5 Connessione TCP

Ho due applicazioni su 2 pc diversi
voglio stabilire una connessione usandop il controllo winsocl tramite TCP
ipotizziamo che sul server sia in ascolto sulla porta 1001, dal client mi
connetto a tale porta, funziona e il server apre la 1002 per permettere ad
altri di connettersi
se io da un secondo client tento di connettermi al server sulla porta 1001
non mi viene dato nessun errore!! come faccio quindi a dirgli:  "Se la porta
x è occupata prova a connetterti a x+1?"
inoltre, se con server chiuso lancio una connessione sulla dal client 1001 ,
aspetto un po' poi apro il server e apro la 1001 la connessione è ancora lì
che aspetta e si attiva!!!
Concludendo avrei bisogno di sapere se l'ip e la porta a cui tento di
connettermi:
- non esistono
- sono occupati
- sono liberi
Sicuramente la soluzione è stupida ma non so proprio che genere di errore
cercare
Grazie
Rivi

Antonio Donatiello

ALTRO controllo Winsock.
Credo proprio di non aver capito, se io ho stabilito una connessione sulla
1001 con il controllo N. 1 se mi metto in ascolto sulla 1001 con il
controllo N. 2 non appena arriva un altra richiesta sulla 1001 posso
accettarla sulla 1001??
Mi sembra molto strano, non mi pare possibile stabbilire ed utilizzare più
di una connessione sulla stessa porta, come faccio , per esempio, a sapere
quali stringhe sono indirizzate al controllo 1 e al controllo 2?
Ritengo che questo sia il principio su cui si basa no gli sniffer, il prog
in listen sulla 1001 usata da un altro legge tutto quello che passa per
essa.....
Non posso utilizzare la stessa porta x più di una connessione no? e non
posso altresì accettarla su un altra portà giacchè la porta a cui è stata
rivolta la richiesta è la 100 no?
Giusto o sbagliato?
Grazie della pazienza


Sbagliato la prima, giusta la seconda! Se no come funzionerebbero i
server WWW (che utilizzano la porta implicita 80)? Se mi collego a
www.tin.it
 quando e' collegata un altra persona dovrei o aspettare che
questa si scolleghi o ridigitare 
www.tin.it:81
, www.tin.it:82.....
Allego un pezzetto di codice per chiarire meglio, a livello
esemplificativo (non l'ho provato, ma l'ho prelevato da un programma
testato). La particolarita' e' che non utilizza array di Winsock
WS[1], WS[2], WS[3].... Questa ultima pratica sembra infatti mostrare
diversi bug (vedi msg passati sull'argomento WINSOCK), bugs invece da
me non riscontrati implementando in DELPHI.
Ciao
<------------------------------------------------------------
Form1 contiene un controllo Winsock di nome MASTER
Form2 contiene un controllo Winsock di nome WS
-------------------CODICE DI FORM1
Private Sub Form_Load()
'imposta la connessione
 Master.LocalPort = 80 
 Master.Listen
End Sub
Private Sub master_ConnectionRequest(ByVal requestID As Long)
'arriva una richiesta di connessione
Dim servWin As New Form2
servWin.Show 'opzionale, tanto per vedere se si apre....
'accetta la connessione sul WS della nuova form creata.
servWin.ws.Accept requestID
End Sub
-------------------CODICE DI FORM2
Private Sub Ws_DataArrival(ByVal bytesTotal As Long)
 dim packet as string
 ws.GetData Packet, vbString
 'rispondi con senddata()
 ws.SendData QuelloCheTiPare
End Sub
Private Sub WS_Close()
 ws.Close
 Unload Me
End Sub
Private Sub WS_Error(ByVal Number As Integer, Description As String,
ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String,
ByVal HelpContext As Long, CancelDisplay As Boolean)
If Number = sckConnectionReset Then
'la connessione e' stata chiusa dal computer remoto
ws.Close
Unload Me
End If
End Sub
Private Sub WS_SendComplete()
'a trasmissione completata, resetta la connessione
 ws.Close
 Unload Me
End Sub

Ti ringrazio fei consigli, solo che purtroppo non posso adottare una
soluzione di questo tipo x i controlli winsock in quanto devo arrivare a
gestire fino a 15-20 connessioni in contemporanea.....
sai se ci sono dei rallentamenti ad usare la sessa porta in tanti piuttosto
che porte diverse?
Grazie ancora
RIMUO...@rocketmail.com
P.S. A proposito degli sniffer dovrei averne un paio da qualche parte, non
appena li trovo te lo dico

appena li trovo te lo dico
Magari, ti ringrazio!
Ciao
Roberto