Re: System.Net.Sockets.SocketException -UDP
- From: "Torben Schulz" <grimwulf[ENTF]@gmx.net>
- Date: Thu, 6 Oct 2005 13:37:59 +0200
Hallo Robert,
> Du musst auf Sockets zurückgreifen.
Das habe ich gemacht, aber leider noch immer Probleme. Das Senden klappt
prima, der ListenerThread eigentlich auch, aber ich bekomme nur
Gateway-Antworten, wenn ich auf just jenen Port sniffe, an den ich gesendet
habe. Die Gateways antworten auf einem beliebigen Port und deren Antwort
bekomme ich nicht mit, obgleich sie ordentlich senden (Netzwerksniffer
besagt das zumindest), z.B.
//senden von meinem PC
UDP: Source Port: 1631 Dest.Port: 19000
//Antwort von Gateway
UDP: Source Port: 19000 Dest.Port: 1631
Ich weiß also nicht, auf welchem Port die Nachricht ankommt (gut, sie auf
demselben Port an, von dem ich gesendet habe, aber das ist nicht nutzbar)
So höre ich den Netzverkehr ab (sicherlich nicht ganz sauber):
while ( true )
{
// Console.WriteLine ("Outer Loop" );
try
{
IPHostEntry hostEntry = Dns.Resolve(Dns.GetHostName());
IPEndPoint endPoint = new IPEndPoint(hostEntry.AddressList[0],0);
//hier lausche ich doch alle UDPs ab, oder?
IPEndPoint sender ;
EndPoint senderRemote;
_socket = new Socket(endPoint.Address.AddressFamily, SocketType.Dgram,
ProtocolType.Udp );
_socket.Bind(endPoint);
byte[] msg = new Byte[1000];
while ( true )
{
// Console.WriteLine ("Inner Loop" );
sender = new IPEndPoint(IPAddress.Any,0 );
senderRemote = (EndPoint)sender;
// Console.WriteLine ("Waiting to receive datagrams from client on
port" );
try
{
_socket.ReceiveFrom(msg, 0, msg.Length, SocketFlags.None, ref
senderRemote);
//s.Receive(msg);
// Console.WriteLine( Encoding.ASCII.GetString( msg ) );
_listenerEvents.Enqueue( Encoding.ASCII.GetString( msg ) );
}
catch (Exception ex)
{
Console.WriteLine ( ex.Message );
}
}
}
catch( ThreadAbortException )
{
throw;
}
catch( Exception ex )
{
Console.WriteLine ("Expection --> Message: {0}\r\nStackStrace: {1}",
ex.Message, ex.StackTrace );
}
Weiß jemand, warum ich keine Antwort bekomme?
Grüße,
Torben
"Robert Jordan" <robertj@xxxxxxx> schrieb im Newsbeitrag
news:di03fm$5k5$03$1@xxxxxxxxxxxxxxxxxxxx
> Torben Schulz wrote:
>> Hallo Thomas,
>>
>>
>>>gib beim UdpClient-Konstruktor die (Empfangs-) Port-Nummer an, etwas wie:
>>>
>>> // hier zB 11000 als lokalen Port binden
>>> UdpClient udpClient = new UdpClient( 11000,
>>>AddressFamily.InterNetwork );
>>> IPEndPoint remoteIPEndPoint = new IPEndPoint( IPAddress.Any, 0 );
>>> byte[] receivedBytes = udpClient.Receive( ref remoteIPEndPoint );
>>
>>
>>
>> Das hat in meinem Falle auch nicht so recht geholfen, auch wenn der
>> Fehler
>> woanders liegen mag.
>> Ich möchte folgendes erreichen:
>> Wir haben im Netz mehrere Gateways, die auf Port 19000 auf ein UDP
>> lauschen
>> und nach Erhalt ein Protokoll mit z.B. Speicherdaten zurücksenden. Die
>> IPs
>> der Gateways sowie deren Anzahl kann variieren.
>> Mein Ansatz war, den Request erst einmal pauschal an alle Teilnehmer im
>> Netz
>> zu schicken:
>>
>> Byte[] sendBytes = Encoding.ASCII.GetBytes("SEARCH_REQUEST\r\n\r\n");
>> UdpClient udpClient = new UdpClient();
>> IPEndPoint remoteIpEndPoint = new IPEndPoint(IPAddress.Broadcast , 0);
>> udpClient.Send(sendBytes, sendBytes.Length, remoteIpEndPoint);
>
> Du möchtest also Broadcasts senden. Dafür muss der Socket
> vorbereitet werden, ungefähr so:
>
> socket.SetSocketOption(SocketOptionLevel.Socket,
> SocketOptionName.Broadcast, 1);
>
> Da jedoch UdpClient keinen Zugriff auf den Socket anbietet,
> ist er schlicht nicht brauchbar für das was du vorhast.
> Du musst auf Sockets zurückgreifen.
>
> ciao
> Robert
.
- Follow-Ups:
- Re: System.Net.Sockets.SocketException -UDP
- From: Robert Jordan
- Re: System.Net.Sockets.SocketException -UDP
- References:
- System.Net.Sockets.SocketException -UDP
- From: Torben Schulz
- Re: System.Net.Sockets.SocketException -UDP
- From: Thomas Scheidegger [MVP]
- Re: System.Net.Sockets.SocketException -UDP
- From: Torben Schulz
- Re: System.Net.Sockets.SocketException -UDP
- From: Robert Jordan
- System.Net.Sockets.SocketException -UDP
- Prev by Date: Emergente Softwareentwicklungsprozesse
- Next by Date: Re: Emergente Softwareentwicklungsprozesse
- Previous by thread: Re: System.Net.Sockets.SocketException -UDP
- Next by thread: Re: System.Net.Sockets.SocketException -UDP
- Index(es):
Relevant Pages
|