Ciao a tutti, uso questo sistema dove posto il codice per parlare in chat nella stessa rete tra client e server, vorrei se possibile usare un multi-client e rispondere sempre con il server, ovvero:
client 1 scrive a Server
client 2 scrive a server
client 3 scrive a server
Server risponde a client 1 o 2 o 3 in base alle esigenze…. questo è quello che vorrei fare.
Codice per SERVER:
Imports System.IO
Imports System.Net.Sockets
Imports System.Text.UTF8Encoding
Public Class Form1
Dim listener As TcpListener
Dim client As TcpClient
Dim stream As NetworkStream
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
listener = New TcpListener(25565)
listener.Start()
Timer1.Start()
End Sub
Private Sub Timer2_Tick(sender As Object, e As EventArgs) Handles Timer2.Tick
If client.Available > 0 Then
Dim x(client.Available - 1) As Byte
stream.Read(x, 0, x.Length)
Dim text As String = UTF8.GetString(x)
TBricevi.Text = TBricevi.Text & text & vbCrLf
End If
End Sub
Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
If listener.Pending = True Then 'se l'ascoltatore è in ascolto
Timer1.Stop()
client = listener.AcceptTcpClient 'accetta la connessione del TcpClient
listener.Stop() 'smette di ascoltare
stream = client.GetStream 'ottiene il flusso di dati
Timer2.Start() 'avvia il timer2 che legge il flusso dati e lo converte in testo
TBricevi.Text = TBricevi.Text & "Connessione effettuata" & vbCrLf
End If
End Sub
Private Sub BTNinvia_Click(sender As Object, e As EventArgs) Handles BTNinvia.Click
Dim y() As Byte = UTF8.GetBytes("<SERVER>: " & TBInvio.Text) 'il Tag SERVER serve per sapere chi scrive
stream.Write(y, 0, y.Length)
TBricevi.Text = TBricevi.Text & TBInvio.Text & vbCrLf
TBInvio.Clear()
End Sub
End Class
Codice per Client:
Imports System.Net.Sockets
Imports System.Text.UTF8Encoding
Public Class Form1
Dim client As TcpClient
Dim stream As NetworkStream
Private Sub BTNconnetti_Click(sender As Object, e As EventArgs) Handles BTNconnetti.Click
Dim address As Net.IPAddress
Net.IPAddress.TryParse(TBip.Text, address)
client = New TcpClient
client.Connect(address, 25565)
If client.Connected Then
stream = client.GetStream
Timer1.Start()
TBricevi.Text = TBricevi.Text & "Connessione Effettuata" & vbCrLf
Else
TBricevi.Text = TBricevi.Text & "Non Connesso" & vbCrLf
End If
End Sub
Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
If client.Available > 0 Then
Dim x(client.Available - 1) As Byte
stream.Read(x, 0, x.Length)
Dim text As String = UTF8.GetString(x) 'trasforma da Byte a testo
TBricevi.Text = TBricevi.Text & text & vbCrLf
End If
End Sub
Private Sub BTNinvia_Click(sender As Object, e As EventArgs) Handles BTNinvia.Click
Dim y() As Byte = UTF8.GetBytes("<CLIENT>: " & TBinvia.Text) 'trasforma da testo a Byte e il Tag CLIENT specifica chi scrive
stream.Write(y, 0, y.Length)
TBricevi.Text = TBricevi.Text & TBinvia.Text & vbCrLf
TBinvia.Clear()
End Sub
End Class
Secondo voi, come potrei gestire le connessioni in entrata se apro una nuova chat? ho provato creando un nuovo client e chiudendo il Client ma ovviamente così non è e credo di dover chiudere anche nel server.
Potete indicarmi qualcosa?
Grazie