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?