Ciao a tutti.
Dato che è il mio primo messaggio ne approfitto per complimentarmi con tutti quelli che contribuiscono a questo forum e spero di diventare anche io uno di voi.
Vi spiego la mia questione:
devo scrivere un programma che consenta a due computer di inviare e ricevere messaggi di testo (tipo chat). Dato che sono nuovo alla programmazione di rete, mi sono studiato un pò un manuale (Network programming in .NET) e ho pensato di realizzare l'applicazione usando degli udpclient.
Il mio problema è questo: un computer si connette ad internet con un router senza dhcp, mentre sull'altro ho il dhcp e ho impostato il port forwarding.
nel programma che ho scritto, il computer in dhcp avvia la connessione con l'altro (e fin qui va bene, perchè conosce quale porta sfruttare), e il messaggio viene ricevuto...ora come faccio dall'altra parte a rispondere?
ho pensato (erroneamente, perchè non funge ) di sfruttare l'udpClient che uso per ricevere anche per spedire, solo che nel momento in cui provo a spedire mi dice che l'udpclient non è connesso...non so se mi sono spiegato...
non c'è un modo per sincronizzare i due udpclient in modo che venga creato un "canale" di comunicazione tra i due computer?
un'altra cosa che non ho capito: ma la connessione che stabilisco con il metodo udpclient.connect(...) resta aperta finchè non la chiudo o finchè non termina la sub in cui è stata invocata?
si accettano anche soluzioni alternative...
Grazie mille!
@nessuno, ecco il codice
parte x il computer senza il dhcp
Public Class form1
Public myUdpClient As New UdpClient(8081)
'Parte delegata alla ricezione di dati
Public Sub myServerSub()
Dim remoteIpEndPoint As New IPEndPoint(IPAddress.Any, 0)
Dim receiveBytes As Byte()
Dim rIPad As String
receiveBytes = myUdpClient.Receive(remoteIpEndPoint)
Dim returnData As String = Encoding.ASCII.GetString(receiveBytes)
rIPad = remoteIpEndPoint.Address.ToString()
rIPad = rIPad + ":" + " "
ListaRicevuti.Items.Add(rIPad + returnData.ToString())
End Sub
'Funzione che inizializza la connessione udp
Private Sub udpConBut_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles udpConBut.Click
connettiUdp()
End Sub
Private Sub connettiUdp()
Dim sendbytes As Byte()
Dim iEr As Integer = 0
'Provo a stabilire la connessione
Try
myUdpClient.Connect(IPtb.Text, 1234)
Catch e As Exception
iEr = 1
End Try
If iEr = 0 Then
sendbytes = Encoding.ASCII.GetBytes("Hello")
myUdpClient.Send(sendbytes, sendbytes.Length)
'Avvio la routine del server per mettermi in ascolto
myServerSub()
End If
End Sub
[\code]
già così (cioé scambiando solo due messaggi) non funziona...il primo arriva, mentre il secondo mi dice di non essere connesso
parte per il computer con dhcp
Public Class Form1
Dim uClient As New UdpClient(8081)
Private Sub spedisciUDP(ByVal messaggio As String)
Dim sendbytes As Byte()
sendbytes = Encoding.ASCII.GetBytes(messaggio)
uClient.Send(sendbytes, sendbytes.Length)
End Sub
Public Sub serverThread()
Dim remoteIpEndPoint As New IPEndPoint(IPAddress.Any, 0)
Dim receiveBytes As Byte()
Dim rIPad As String
receiveBytes = uClient.Receive(remoteIpEndPoint)
Dim returnData As String = _
Encoding.ASCII.GetString(receiveBytes)
lbRicev.Items.Add(" ")
rIPad = remoteIpEndPoint.Address.ToString()
rIPad = rIPad + ":" + " "
lbRicev.Items.Add(rIPad + returnData.ToString())
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim thUdpServer As New Thread(New ThreadStart(AddressOf serverThread))
thUdpServer.Start()
End Sub
Private Sub btnIstInv_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnIstInv.Click
spedisciUDP(tbIstr.Text)
End Sub
End Class
[\code]
sono codici molto standard...nel primo ho preferito non mettere thread perchè è lui a connettersi...non dovrebbe passare molto tempo in attesa di una risposta...grazie per eventuali consigli!
Ultima modifica effettuata da peppuce il 16/12/2011 alle 9:40 |