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

Salve a tutti,
 guardando vario codice VB trovato in rete, ho visto che spesso, per
creare un server che gestisca piu' connessioni client utilizzando il
controllo winsock, si usa un array di controlli winsock e si pone
quello avente indice 0 in ascolto su una determinata porta
(specificata da codice).
Quando un client chiede la connessione, si associa ad esso un nuovo
socket avente un indice (dell'array) corrispondente al primo non
ancora assegnato (a partire da 1).
E la porta ad ogni client chi la assegna ? Il sistema operativo ?
Grazie a chiunque mi risponda.

"Workobbit" ha scritto nel messaggio

"Eredita" la porta assegnata al primo elemento della matrice,
se è questo che intendi.
Bye, G.
--
Le risposte alle tue domande sono sul Sito Comune
di questo NewsGroup: 
http://it-lang-vb.net/
... e nell'help in linea !

se è questo che intendi.
Cioe' ?
Se il primo elemento della matrice (indice 0) e' sulla porta 1001
anche tutti gli altri client andranno sulla 1001 ?
Possibile ? Se avro' 100 client collegati saranno tutti sulla stessa
porta ?
Mi sa che non ho capito quello che intendi...
potresti chiarirmi le idee ?
Grazie.
P.S. Per non postare linee di codice inutili, l'esempio di riferimento
puo' essere anche quello presente nell MSDN.

 Grazie.
non ho capito scusa. Hai n winsock che usi come server, ognuno su una 
porta. Il client si connette alla remoteport che il winsock server gli 
offre. Non mi pare sia possibile avere più servizi aperti sulla stessa 
porta lato server. Solo 1 servizio in ascolto per porta.
Quindi 100 client si possono connettere tutti alla stessa porta. Questo 
accade per es con i server web. 1 servizio in ascolto sulla 80, n client 
che vi si connettono. Sarà poi compito del server di gestire le n 
connessioni con gli n client.
Magari non ho capito cosa intendevi..
ciao.

Magari non ho capito cosa intendevi..
Forse con del codice riesco a spiegarmi meglio (esempio di MSDN).
Consideriamo il server (che dovrebbe gestire varie connessioni):
(sckServer e' un controllo winsock con Index 0)
Private intMax As Long
Private Sub Form_Load()
   intMax = 0
   sckServer(0).LocalPort = 1001  
   sckServer(0).Listen
End Sub
Private Sub sckServer_ConnectionRequest _
(Index As Integer, ByVal requestID As Long)
   If Index = 0 Then
      intMax = intMax + 1
      Load sckServer(intMax)
      sckServer(intMax).LocalPort = 0  ' ???
      sckServer(intMax).Accept requestID
      Load txtData(intMax)
   End If
End Sub
Da quello che ho capito, il server, ad ogni richiesta che arriva
(sulla 1001) aggiunge un nuovo socket all'array.
E quindi se avro' 50 client in connessione, che porte saranno
utilizzate ?
Cioe': la porta 1001 serve solo ad ascoltare eventuali richieste di
connessione ?
E quando una connessione e' effettuata su che porta viaggia ?
Grazie ancora.

 E quando una connessione e' effettuata su che porta viaggia ?
Dall'F1 di .LocalPort
*****************
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.
Osservazioni:
La porta 0 viene in genere utilizzata per stabilire una connessione
dinamica tra i computer. La porta 0 puņ essere utilizzata, ad esempio,
da un client che desidera essere richiamato da un server per disporre
di un nuovo numero di porta casuale da fornire al computer remoto.
*****************
Se non ricordo male VB assegna le porte dalla 1024 in poi, dato che le
precedenti sono da evitare se non si vuole incappare in conflitti con
servizi standard che di solito utilizzano quelle porte (le cosiddette
well-known port, trovi l'elenco in rete).
Ciao, Silv:o)