C# Global Weather WebserviceX.net

06/08/2013 16:07 RedJ0hn#1
Hallo,

ich habe gerade eine Klassen Arbeit über ein Programm geschrieben, dass per TCP eine Verbindung zu [Only registered and activated users can see links. Click Here To Register...] aufbaut und dann dort per HTTP GET Wetter Daten abfragt.

Es geht um folgendes ich baue per TCPCLient eine Verbindung mit dem PORT 80 auf. Dies klappt soweit, dann schicke ich per StreamWriter zwei Befehle, die ich von folgender Seite habe: [Only registered and activated users can see links. Click Here To Register...]

Code:
GET /globalweather.asmx/GetWeather?CityName=string&CountryName=string HTTP/1.1
Host: www.webservicex.net
Dies sende ich, wie gesagt per Streamwriter, danach eine Leerzeile und dann warte ich auf die Antwort (StreamReader und speichere diese in einer Variablen, welche er in eine Datei schreiben soll). Leider erhalte ich keine Daten.

Hat dies vllt. schonmal Jemand versucht von euch?

MfG
06/08/2013 16:31 tolio#2
ich würds so machen:

(ausm kopf)

wandle den verbundenen tcpclient in einen networkstream um
networkstream ns = tcpclient.getstream
ns.write([anfrage])

while not ns.DataAvailable
loopen, timeout einbauen nicht vergessen
end while

solange daten lesen wie welche vorhanden sind mit
ns.read

dann noch die gelesenen bytes mit der gewünschten codierung in nen string verwandeln und freuen


jedoch gibts in .net die webrequest klasse die für sowas viel besser geeignet ist


wenn du weiterhin probleme hast solltest du deinen code posten, sonst ist helfen immer schwer
06/08/2013 16:54 RedJ0hn#3
Erstmal danke für die rasche Antwort.

Dennoch würde ich es ganz gerne auf die StreamWriter und Reader Art versuchen, da ich gerne probieren möchte, ob mein Ansatz aus der Arbeit funktionieren kann.

Folgender Code:

Code:
  private void senden() {

                sw.WriteLine("GET globalweather.asmx/GetWeather?CityName=Frankfurt&CountryName=Ger HTTP/1.1");
                sw.WriteLine("Host: www.webservicex.net");
                sw.WriteLine(""); 
        }
Code:
 private void empfangen() {

            string pfad = "F:/Antwort.txt";
            FileInfo info = new FileInfo(pfad);
            bool isEmpty = info.Length == 0;
            
            
            

            while (sr.EndOfStream == false) // da bin ich mir nicht sicher, ob das funktionieren kann ... 
            {
                try
                {
                    antwort = sr.ReadLine();
                }

                catch
                {

                    throw new Exception("Keine Antwort:/!");

                }

                c_textdatei.WriteFile(@pfad, antwort);
                break;
            }
            if (File.Exists(pfad))
            {
                if (!isEmpty)
                {

                    MessageBox.Show("Erfolgreich!");
                }
                else {


                    MessageBox.Show("Die Datei existiert ist aber Leer!");
                
                }

            }
            else {

                MessageBox.Show("Nicht mal die Datei exisiert xD");
            
            }
            
            
            
        
        }
06/08/2013 17:04 tolio#4
erstmal noch, man kann solchen sach eig immer super debuggen indem man an jedem punkt schaut wie sich die verbindung verhält (offen, wartend, etc)

das mit dem in eine datei schreiben würd ich erstmal wieder auskommentieren und nur das lesen der antwort in den string bewerkstelligen, wenn das klappt kannst du es auch wieder in eine datei schreiben, ich würds wie gesagt einfach mal debuggen und schauen was passiert

auch exceptionhandler würd ich erstmal wieder rausnehmen,

antwort = sr.ReadLine();
hierbei bin ich mir auch nicht sicher weil du willst ja nicht nur bis zum nächsten zeilenumbruch lesen sondern alles