Laden...

Socket Timeout wenn IP nicht existiert

Erstellt von Ploetzi vor 12 Jahren Letzter Beitrag vor 12 Jahren 872 Views
Ploetzi Themenstarter:in
313 Beiträge seit 2006
vor 12 Jahren
Socket Timeout wenn IP nicht existiert

Hallo,
wenn die IP adresse nicht erreichbar ist, sollte eine Exception geworfen werden.
Wird aber nicht. Zumindest nicht in der Entwicklungsumgebung Mono. In VS habe ich das nicht getestet.

Aber es ist ansich C#, vl. einfach einen Fehler gemacht?

		 string checkphweb(string ipadresse,int port)
		{
		
			string getString = "GET /Serverstatus.ashx HTTP/1.1\r\nHost: www.mysite.mobi\r\nConnection: Close\r\n\r\n";
			Encoding ASCII = Encoding.ASCII;
			Byte[] Byteofstring = ASCII.GetBytes (getString);
			Byte[] Empfangsbyte = new Byte[256];
			Socket socket = null;
			String ergebnis = null;
			bool connectworked=false;
			bool errorreceive=false;
			try 			{
				IPEndPoint ip = new IPEndPoint (IPAddress.Parse (ipadresse), port);
				socket = new Socket (ip.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
			socket.ReceiveTimeout=100;
			socket.SendTimeout=100;
				socket.Connect (ip);
				connectworked=true;
			} catch (SocketException ex) {
				Console.WriteLine ("Source:" + ex.Source);
				Console.WriteLine ("Message:" + ex.Message);
			}
			Int32 bytes= new Int32();
			try{
			socket.Send (Byteofstring, Byteofstring.Length, 0);
			 bytes = socket.Receive (Empfangsbyte, Empfangsbyte.Length, 0);
			ergebnis = ergebnis + ASCII.GetString (Empfangsbyte, 0, bytes);
			}catch{
				errorreceive=true;
			};
			try{
			while (bytes > 0) {
				bytes = socket.Receive (Empfangsbyte, Empfangsbyte.Length, 0);
				ergebnis = ergebnis + ASCII.GetString (Empfangsbyte, 0, bytes);
			}
			}catch{};try{
			socket.Close ();}catch{};
			if(connectworked==true &&errorreceive==true)
				ergebnis="error on receive";
			if(connectworked==false)
				ergebnis="Wrong";
			System.Diagnostics.Debug.WriteLine("string:"+ergebnis);
			
			return ergebnis;
		}

2.891 Beiträge seit 2004
vor 12 Jahren

Könntest du dir mal bitte angewöhnen, deine Fragen ordentlich zu stellen und uns nicht immer nur solch Brocken hinzuwerfen? Du hast jetzt schon knapp 300 Beiträge, allerdings schreibst du deine Fragen wie ein Forenneuling und es hat den Anschein, als hättest du noch nie was von [Hinweis] Wie poste ich richtig? gehört...

Was erwartest du, was die Methode macht? Was macht sie stattdessen?
Da wird schon eine Exception geworfen, allerdings fängst du die ja alle wieder ab. Was also erwartest du genau bei "sollte eine Exception geworfen werden"?

156 Beiträge seit 2010
vor 12 Jahren

Moin,

nicht nachvollziehbar

Fehlermeldung:
Source:System
Message:Operation on non-blocking socket would block

MonoDevelop 2.4 & Mono 2.6.7 ... außerdem ... enn es keinen besonderen Grund gibt das HTTP-Protokoll von Hand nach zu basteln, nimm den WebClient

noch was

            }catch{
                errorreceive=true;
            };
            try{
            while (bytes > 0) {
                bytes = socket.Receive (Empfangsbyte, Empfangsbyte.Length, 0);
                ergebnis = ergebnis + ASCII.GetString (Empfangsbyte, 0, bytes);
            }
            }catch{};try{
            socket.Close ();}catch{};

ich sehe 3 catch die Dir keine einzige Exception ausgeben ... das macht sich für Fehlersuche nicht wirklich super

hand, mogel

Ploetzi Themenstarter:in
313 Beiträge seit 2006
vor 12 Jahren

Hallo,
danke erstmal für die Antwort.
Den Grund gibt es leider doch. Weil parallel ein System abgregriffen wird, bei welchem kein normaler Webserver läuft.

Der Fehler tritt offensichtl. nur unter MonoTouch auf.

@Forenposter davor, ich bemühe mich ab nun !