UDP & mode asynchrone en .net

irchk Messages postés 11 Date d'inscription mardi 7 janvier 2003 Statut Membre Dernière intervention 12 mars 2004 - 12 mars 2004 à 09:27
psycho81 Messages postés 84 Date d'inscription mardi 4 mai 2004 Statut Membre Dernière intervention 17 février 2008 - 14 mars 2006 à 13:28
Bonjour,

je suis a la recherche d'info, voir meme un exemple, sur la programmation asynchrone pour un dialogue distant en UDP. Beaucoup de chose existe pour le protocole Tcp\Ip...mais rien voir peu en udp...

Je veux utiliser la classe socket et non UDPclient(trop contraignante), le mode est asynchrone donc necessite un callback sur les méthodes beginSendTo et BeginReceiveFrom...
Vla j'y suis presque mais ca bloque a qq endroits....

Merci @+

3 réponses

psycho81 Messages postés 84 Date d'inscription mardi 4 mai 2004 Statut Membre Dernière intervention 17 février 2008
14 mars 2006 à 13:24
Bon moi aussi j'ai quelque ennuis (je cherche à faire un p2p privé)

Voilà un bout de code source un peu pompé d'lphant (remanié a ma sauce) fais sous vs2005.


Public
Class Sniffer



Private m_UDPListenerSocket
As System.Net.Sockets.Socket



Private m_UDPSendPacket()
As
Byte



Private m_UDPReceivePacket()
As
Byte



Private m_RemoteIPEndPoint
As System.Net.IPEndPoint



Private m_RemoteEndPoint
As System.Net.EndPoint



Private m_PortIsAccesible
As
Boolean



Public
Sub
New()


snif()



End
Sub



Protected
Overrides
Sub Finalize()



MyBase.Finalize()



End
Sub



Private
Sub snif()


m_PortIsAccesible =
False



ReDim m_UDPSendPacket(4999)



ReDim m_UDPReceivePacket(4999)


m_UDPListenerSocket =
New System.Net.Sockets.Socket(System.Net.Sockets.AddressFamily.InterNetwork, System.Net.Sockets.SocketType.Dgram, System.Net.Sockets.ProtocolType.Udp)



Dim ep
As
New System.Net.IPEndPoint(System.Net.IPAddress.Any, 8007)


m_UDPListenerSocket.Bind(ep)


m_ReceivePacket()


System.Threading.Thread.Sleep(5000)



Dim hostRemote
As
New System.Net.IPEndPoint(System.Net.IPAddress.Parse(
"82.125.29.65"), 8007)


m_UDPListenerSocket.SendTo(System.Text.ASCIIEncoding.Default.GetBytes(
"Connexion", 0, 9), hostRemote)


Console.WriteLine(
"paquet envoyé")



End
Sub



Private
Sub m_ReceivePacket()


m_RemoteIPEndPoint =
New System.Net.IPEndPoint(System.Net.IPAddress.Any, 0)


m_RemoteEndPoint = m_RemoteIPEndPoint



Try


Console.WriteLine(
"On attends un paquet sur " & m_RemoteIPEndPoint.ToString)


m_UDPListenerSocket.BeginReceiveFrom(m_UDPReceivePacket, 0, 5000, System.Net.Sockets.SocketFlags.None, m_RemoteEndPoint,
New AsyncCallback(
AddressOf m_OnUDPPacketReceived),
Nothing)


Console.WriteLine(
"On a recu un paquet0")



Catch ex
As Exception



If IsNothing(m_UDPReceivePacket)
Then



ReDim m_UDPReceivePacket(4999)



End
If



If
Not IsNothing(m_UDPListenerSocket)
Then


m_ReceivePacket()



End
If



End
Try



End
Sub



Private
Sub m_OnUDPPacketReceived(
ByVal ar
As IAsyncResult)


Console.WriteLine(
"On a recu un paquet")



Dim nbytesRecibidos
As
Integer = 0



Try


Console.WriteLine(
"On a recu un paquet")


nbytesRecibidos = m_UDPListenerSocket.EndReceiveFrom(ar, m_RemoteEndPoint)



Catch ex
As Exception


Console.WriteLine(ex.ToString)



End
Try



If nbytesRecibidos > 0
Then



Dim buffer
As
New System.IO.MemoryStream(m_UDPReceivePacket, 0, nbytesRecibidos)



Dim bytes(buffer.Length - 1)
As
Byte


buffer.Read(bytes, 0, buffer.Length)


Console.WriteLine(
"recu : " & System.Text.ASCIIEncoding.Default.GetString(bytes))



End
If



End
Sub


End
Class

Si tu trouve un myen de renifler des paquet qui apse apr la apsserelle, fais le moi savoir ... Je glère depuis longtmeps sur ca
L'homme était,est et sera un éternel apprenti
0
psycho81 Messages postés 84 Date d'inscription mardi 4 mai 2004 Statut Membre Dernière intervention 17 février 2008
14 mars 2006 à 13:25
Au fait ... je n'obient jamais mes apquet en aspsant par l'IP web ... peut etre sur le serveur on les prends mais là ... je peux pas encore tester. je te tien au courant ...
L'homme était,est et sera un éternel apprenti
0
psycho81 Messages postés 84 Date d'inscription mardi 4 mai 2004 Statut Membre Dernière intervention 17 février 2008
14 mars 2006 à 13:28
Bon moi le code ne marche que sur la passerelle web ... Si tu savais comment résoudre mon problème ... Je serai le plus heureux des hommes :)

L'homme était,est et sera un éternel apprenti
0
Rejoignez-nous