Re: System.Net.Sockets.SocketException -UDP

Tech-Archive recommends: Repair Windows Errors & Optimize Windows Performance



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


.



Relevant Pages

  • Re: System.Net.Sockets.SocketException -UDP
    ... > an einen bestimmten wellknown Port geht. ... > IPEndPoint endPoint = new IPEndPoint ... Stimmt, die Gateways senden nnicht über einen bestimmten Port, nur der ... Next by Date: ...
    (microsoft.public.de.german.entwickler.dotnet.csharp)
  • Re: [fw-wiz] Application Intelligent vs ALG
    ... protocol detection heuristics like IDS do, ... protocols to port numbers, i.e. if someone is running ICQ or HTTP over ... > old technology, stateful inspection is the next generation of firewall ... > gateways, and why is it better than Sidewinder, Firebox, Raptor, ...
    (Firewall-Wizards)
  • Re: Default Gateway Setting not set after Reboot
    ... It is the second port on the dual port card that is exposing this ... All other "gateways" are just that,...gateways..(not ...
    (microsoft.public.win2000.networking)
  • Re: Bug with W2K3, SP1, Windows Firewall and FTP
    ... add program not add port. ... I'm confuse as well:) between the advanced tab and exception tab. ... port in the Exceptions and checking the FTP Server in the Advanced ... I decided to try adding a port 21 in the firewall exception list just to ...
    (microsoft.public.inetserver.iis.ftp)
  • Re: Login failed for user x, Error: 18456
    ... string returnValue = string.Empty; ... catch (Exception ex) ... Make sure that account that is running the asp.net account has a sql server ... The port could be "moving" on you. ...
    (microsoft.public.sqlserver.programming)