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):
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 unacodice: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
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?

Rispondi quotando