Dovrei consentire a tutti i Pc che eseguono il mio programma di scambiarsi Messaggi di testo ed eventualmente di inviare file tra di loro, ho trovato questa classe, che per la parte di scambio dati di testo
funziona(l'invio dei file non l'ho testato ancora):

codice:
Public Class Msg
    Dim myUdpServer As UdpClient
    Dim myUdpClient As UdpClient
    Dim _ThreadReceive As Thread

    Public Event NewMessageIn(ByVal Str As String)

    Public Sub New()
        StartReceivingMsg()
    End Sub

    Private Sub StartReceivingMsg()
        Dim ipE As IPHostEntry = Dns.GetHostEntry(System.Net.Dns.GetHostName)
        Dim IpA() As IPAddress = ipE.AddressList
        myUdpServer = New UdpClient(IpA(0).ToString, 12345)
        myUdpClient = New UdpClient(12345)

        'AddHandler Me.NewMessageIn, AddressOf NewMessagesComeIn

        _ThreadReceive = New Thread(AddressOf ReceiveMsg)
        _ThreadReceive.Start()
    End Sub

    Public Sub StopReceivingMsg()
        _ThreadReceive.Abort()
        myUdpClient.Close()
        myUdpServer.Close()
        myUdpClient = Nothing
        myUdpServer = Nothing
    End Sub

    Public Sub SendMsg(ByVal Message As String)
        Dim dataSend() As Byte
        dataSend = Encoding.Unicode.GetBytes(Message)
        myUdpServer.Send(dataSend, dataSend.Length)
        'myUdpServer.Close()
    End Sub

    Public Sub ReceiveMsg()
        Dim strdataAccept As String = ""
        Dim ipE As IPHostEntry = Dns.GetHostEntry(System.Net.Dns.GetHostName)
        Dim IpA() As IPAddress = ipE.AddressList

        Dim myEndPoint As New IPEndPoint(IPAddress.Parse(IpA(0).ToString), 12345)
        Dim myByte(36000) As Byte

        myByte = myUdpClient.Receive(myEndPoint)

        'If mByte = "spegni" Then
        'esci dal programma e spegni computer
        'End If

        strdataAccept = Encoding.Unicode.GetString(myByte)

        RaiseEvent NewMessageIn(strdataAccept)

        'Console.WriteLine(strdataAccept)
        'myUdpClient.Close()

        _ThreadReceive = New Thread(AddressOf ReceiveMsg)
        _ThreadReceive.Start()
    End Sub

    'Public Sub NewMessagesComeIn(ByVal Str As String)

    '   MsgBox(Str)
    'End Sub

    Public Sub SendFile()
        Dim dataSend() As Byte
        'Dim ipE As IPHostEntry = Dns.GetHostEntry(System.Net.Dns.GetHostName)
        'Dim IpA() As IPAddress = ipE.AddressList
        'Dim myUdpClient As UdpClient = New UdpClient(IpA(1).ToString, 12345)
        Dim myFilestream As FileStream
        myFilestream = New FileStream("c:\HotKey.txt", FileMode.Open, FileAccess.Read)
        ReDim dataSend(myFilestream.Length)
        myFilestream.Read(dataSend, 0, myFilestream.Length)
        myUdpClient.Send(dataSend, dataSend.Length)
        myFilestream.Close()
        myUdpClient.Close()
    End Sub

    Private Sub ReceiveFile()
        'Dim bteDataAccept() As Byte
        Dim strdataAccept As String = ""
        Dim ipE As IPHostEntry = Dns.GetHostEntry(System.Net.Dns.GetHostName)
        Dim IpA() As IPAddress = ipE.AddressList
        Dim myEndPoint As New IPEndPoint(IPAddress.Parse(IpA(1).ToString), 12345)
        Dim myByte(36000) As Byte

        'Dim myUdpClient As UdpClient = New UdpClient(12345)
        myByte = myUdpClient.Receive(Nothing)

        Dim myFileStream As FileStream = New FileStream("c:\provas.txt", FileMode.Create, FileAccess.Write)
        myFileStream.Write(myByte, 0, myByte.Length)

        myFileStream.Close()
        myUdpClient.Close()
    End Sub
End Class
Questa classe funge da Server e da Client, solo che se invio un secondo messaggio mi dice che non è possibile creare più connessioni per lo stesso IP e la stessa porta. Quindi pensavo, dovrei creare una
classe che funga da Server in ascolto, su una determinata porta, dei messaggi in ingresso, e tutte le volte che devo inviare un messaggio o un file creo un Client che poi distruggo anche.

Mi sapreste dire se procedo bene?