Newsgroup: it.comp.lang.visual-basic
Titolo: logicamente è giusto ma...

Perchè questo programma non funziona come vorrei?Ho creato un'applicazione
client e una server, ma ci sono delle cose che non mi tornano: perchè non
riesco a connettermi con + di un client allo stesso server
contemporaneamente?Eppure dovrebbe funzionare!
Qui di seguito vi faccio vedere il codice del programma server e poi del
client. Premetto che ho usato un controllo Winsock (mswinsck.ocx versione
6):
SERVER
Private Sub Form_Load()
Server.LocalPort = 2302
Server.Listen
End Sub
Private Sub Server_ConnectionRequest(ByVal requestID As Long)
If Server.State <> sckClosed Then Server.Close
Server.Accept (requestID)
NomeHost = Server.LocalHostName
NumeroIP = Server.LocalIP
Server.SendData NomeHost: Server.SendData " " + NumeroIP
End Sub
CLIENT
Private Sub Client_DataArrival(ByVal bytesTotal As Long)
Dim primo As String
Dim secondo As String
Client.GetData primo
IP.Caption = primo
End Sub
Private Sub Connetti_Click()
Client.Connect
End Sub
Private Sub Form_Load()
Client.RemoteHost = "127.0.0.1"
Client.RemotePort = 2302
End Sub
Spero che potrete aiutarmi ragazzi! Vi ringrazio ragazzi.
Il Conte

Beh...secondo me non lo è :-)
Ti dovresti creare una matrice di Winsock indicizzati nella parte Server ed
ogni volta che arriva una Connection Request dovresti farla accettare dal
primo controllo libero che trova. Però soltanto il primo controllo deve
stare in modo LISTEN.
Se non ci riesci chiedi che ti dò un'esempio
Gianni Moretti

 contemporaneamente?Eppure dovrebbe funzionare!
[...]

 ha scritto nel messaggio
news:9617oo$k33$1...@nreadA.inwind.it...


Ti posto un pezzo di un mio progetto:
'Sock sono una serie di controlli winsock indicizzati
Private Sub Sock_ConnectionRequest(Index As Integer, ByVal requestID As
Long)
        CurSock = Find_Free_Sock 'Find_Free_Sock è una funzione che
restituisce il primo Sock libero
        If Index = 0 And CurSock <> -1 Then 'Accetta la connessione solo se
è il primo Sock...gli altri non sono autorizzati
           Closing(Index) = 0 'serve alla routine che chiude i socket non
piu' in uso
           frmMain.Sock(CurSock).LocalPort = 0
           frmMain.Sock(CurSock).Accept requestID
           frmMain.note(CurSock).Caption = "From " +
frmMain.Sock(CurSock).RemoteHostIP
        End If
End Sub
Private Sub Sock_DataArrival(Index As Integer, ByVal bytesTotal As Long)
           'be tutto questo mi serviva a me...tu ci metti quello che serve a
te
            lng = Sock(Index).BytesReceived
            If lng < 23 Then Exit Sub
            Sock(Index).PeekData head$, vbByte, 23
            lung_body = Dec(Mid$(head$, 9, 2))
            lung_ae = Dec(Mid$(head$, 11, 2))
            lng = lung_body + lung_ae + 23
            If lng > Sock(Index).BytesReceived Then Exit Sub
            Sock(Index).GetData dati$, vbByte, lng
            id_transazione$ = Mid$(head$, 13, 8)
            SockTran$(Index) = Mid$(id_transazione$, 1, 7)
            Call Write_Message(id_transazione$, dati$)
End Sub
Private Sub tmrAnswer_Timer()
            Check_Answer
End Sub
Private Sub tmrStatus_Timer()
        For c = 1 To MaxSock
            sta = Sock(c - 1).state
            If sta = 9 And Closing(c - 1) = 0 Then note(c - 1).Caption = "":
Closing(c - 1) = 1: Sock(c - 1).Close
            state(c - 1).Caption = SState$(sta)
        Next c
End Sub
Vedi un pò se questo ti chiarisce un pò di cose
Gianni Moretti

 Private Sub Sock_ConnectionRequest(Index As Integer, ByVal requestID As
[...]

Beh,
non si dovrebbe perdere niente...per quanto riguarda il Lavora
Bene...dipende...tu quante connessioni avevi in mente di farci?
Sinceramente comunque non ti dò dire...non ho provato con quantità elevate
di client collegati...anche se il progetto che avevo fatto sulla carta ne
supportava quanti volevi.
Gianni Moretti