Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    [Vb.Net] - Problema con MultiThreading

    Allora Salve.....

    Durante la programmazione di un server capace di dialogare con piu client contemporaneamente è sorto un "piccolo" problema....

    Penso che i thread facciano confusione tra di loro!

    Sono passato da poco al .net....comunque....

    Il codice agisce in questo modo...

    Avvia il server creando due nuovi oggetti Server(tcpListener) e Client(tcpClient)

    codice:
        Public Sub AvviaServer()
    
            Server = New TcpListener(System.Net.IPAddress.Any, _ServerInfo.Port)
            Client = New TcpClient
    
            Server.Start()
    
            _StatoServer = StatoServer.sON
    
        End Sub
    Poi Attendende una connessione

    codice:
        Public Sub AttendiConnessione()
    
    
                If Server.Pending = True Then
    
                    Client = Server.AcceptTcpClient
                    StartNewThread()
    
                End If
    
        End Sub
    StartNewThread() crea un nuovo Thread in questo modo:

    codice:
        Public Sub StartNewThread()
    
            _Thread = New Thread(AddressOf Me.GetData)
            _Thread.Name = CType(ct, String)
            _Thread.Start()
    
        End Sub
    Listato di GetData

    codice:
        Public Sub GetData()
    
    
            While 0 < 1
    
                Thread.Sleep(1000)
    
    
                Dim _NetworkStream As NetworkStream = Client.GetStream
                Dim _Byte(Client.ReceiveBufferSize) As Byte
    
    
    
                _NetworkStream.Read(_Byte, 0, CType(Client.ReceiveBufferSize, Integer))
    
                Dim _Data As String = Encoding.ASCII.GetString(_Byte)
    
                If _Byte(0) <> 0 Then
    
    
                    MsgBox(_Data, , Thread.CurrentThread.Name)
                    MsgBox("mmm")
                    Generale.Writelog(_Data, Color.Black, Priorità.alta)
    
                End If
    
            End While
    
    
        End Sub
    Per provarlo ho creato un piccolo client che si collega al server e invia a comando una stringa...

    Cosa succede?Il client si connette ed invia normalmente la stringa...ma al collegarsi di un'altro client, il client precedente invia stringhe per un'altra volta e poi non succede piu nulla, come se nn inviasse nulla!mentre il client collegato per ultimo funziona normalmente finche non si collega un altro client!

    Mi è sembrato l'approccio piu logico ma evidentemente non è corretto se potete aiutarmi....

    Buona serata.

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Beh ... ma Client e' sempre lo stesso oggetto?

    Quando ricevi una connessione, devi creare un nuovo oggetto Client che accetta la connessione e passare l'istanza creata al nuovo thread ...

  3. #3
    Originariamente inviato da oregon
    Beh ... ma Client e' sempre lo stesso oggetto?

    Quando ricevi una connessione, devi creare un nuovo oggetto Client che accetta la connessione e passare l'istanza creata al nuovo thread ...
    Mi faresti un'esempio concreto?

    Cioe prima di accettare il nuovo client devo creare un nuovo oggetto client per fare questo utilizzo una matrice di tcpClient?Come faccio a passarlo al nuovo thread?

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Leggi questo articolo ...

    http://www.visual-basic.it/articoli/agNTServ2.htm

    Anche se fa riferimento al .NET 2003 va bene lo stesso il principio ...

    (ci sono i sorgenti)

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.