Laden...
J
jov97 myCSharp.de - Member
C:\Users Dabei seit 01.10.2011
Benutzerbeschreibung

Forenbeiträge von jov97 Ingesamt 13 Beiträge

02.06.2013 - 16:03 Uhr

Ähm - ich weiß nicht, woher du wissen willst, dass der Code - wenn auch recht simpel - kopiert ist. Da muss deine Glaskugel wohl einen Sprung haben.
Mit HTTP und TCP kenne ich mich aus, genau deshalb kann ich mir dieses Verhalten auch überhaupt nicht erklären. Die Anfrage wird anscheinend nicht vollständig abgeschickt o.ä. Deshalb wird sie auch nicht von Wireshark mitgeschnitten. Das ergäbe aber keinen Sinn, denn die Antwort kommt an.

Eine using-Anweisung macht doch hier in meinen Augen gar keinen Sinn, HttpWebRequest ist nicht IDisposable. Oder was meinst du damit genau? Außerdem verstehe ich auch nicht, was die CachePolicy mit meinem Problem zu tun haben soll.

Entschuldige bitte meinen Ton, ich weiß, du bist hier Moderator. Aber versuche es doch bitte nicht gleich mit Noob-Bashing. Dieses Von-oben-herab-Tipps-geben bringt mich auf die Palme, es hilft einfach nicht weiter.

02.06.2013 - 00:08 Uhr

Moin,

Folgendes Problem: ich sende eine GET-Request an den Server, bekomme auch eine Antwort. Jedoch loggt Wireshark ab dem 2. oder 3. Mal diese Request garnicht mehr mit, nur die Antwort dazu, und der Server meldet mir, dass ich x mal verbunden bin. Ich nehme daher an, dass die Verbindung nicht geschlossen wird (?!) und Wireshark erst dann loggen würde (kenne mich mit WS nicht so gut aus, gibt es da eine Möglichkeit, auch noch offene Verbindungen anzusehen?)

Quelltext meiner Request-Funktion:

public string SendGetRequest(string uri)
        {
            HttpWebRequest req = (HttpWebRequest)WebRequest.Create(uri);
            req.Method = "GET";
            req.UserAgent = "Mozilla/10.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.94 Safari/537.36";
            req.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/asterisk;q=0.8";
            req.CookieContainer = cookies; //vordefinierter Container
            HttpWebResponse response = (HttpWebResponse)req.GetResponse();
            cookies.Add(response.Cookies);
            Stream st = response.GetResponseStream();
            StreamReader sr = new StreamReader(st);
            string buffer = sr.ReadToEnd(); //alles wird gelesen
            st.Close(); //stream wird geschlossen
            response.Close(); //antwort auch
            pagelist.Items.Add(uri); //unwichtig
            return buffer;
        }

Hab ich irgendwas vergessen? Eigentlich habe ich doch alles an der Verbindung geschlossen.

Besten Dank im Voraus!

02.12.2012 - 13:55 Uhr

Im Moment funktioniert das ganze über den Browser.
Ich hab mir auch überlegt, eine App dafür zu entwickeln. Allerdings möchte ich für Apple schon alleine deshalb nichts entwickeln, weil eine Lizenz um die 100€ kostet und man (soweit ich weiß) dafür einen Mac benötigt.
Mal sehen, vielleicht bringt der Weihnachtsmann ja einen Androiden vorbei. Da stellt sich mir allerdings die Frage, ob es wirklich noch andere Hardcore-Crossover-Freaks außer mir gibt, die iTunes auf ihrem Windows-PC mit einem Andriod-Gerät steuern wollen. Aber wenn es diesbezüglich Interesse gibt, kann ich mir das ja vielleicht mal ansehen.

28.11.2012 - 19:21 Uhr

Ah alles klar, jetzt gehts. Danke nochmal für den Hinweis chilic!

Vorher muss per netsh die URL (der Port) reserviert werden. Hatte ich das gemacht, bekam ich bis jetzt immer einfach nur "503 - Service unavailable" zurück.
Der Fehler war, dass ich im Präfix des HttpListeners und bei netsh ein * statt einem + verwendet habe, also "http://*:5050/".

Funktionieren tut das Ganze dann aber mit "http://+:5050/"

Besten Dank!

28.11.2012 - 18:24 Uhr

Alles klar, vielen Dank! Dann muss ich das wohl so machen.

Administratorrechte brauche ich, weil ich Netzwerkzugriff (HttpListener) benötige.
Funktioniert bei mir nur als Admin, ohne bekomme ich "Zugriff verweigert" zurück. Liegt das an meiner ungeschickten Portwahl (5050)?

Ich baue mir gerade eine kleine "Fernbedienung" übers WLAN-Netz, um die Musikwiedergabe von überall in der Wohnung mit dem Handy zu steuern.

Vielen Dank!

28.11.2012 - 17:45 Uhr

Hallo!

Folgendes Problem:
Ich will iTunes über meine eigene Form ansteuern können.
Klappt auch sehr gut via COM-Zugriff. Allerdings gibt es das Problem, dass meine Anwendung Administratorrechte benötigt. Dadurch ist jedoch der Zugriff auf iTunes, welches nicht mit Adminrechten arbeitet, nicht mehr möglich.

Weiß jemand Abhilfe?

Danke im Voraus!

09.10.2012 - 00:20 Uhr

War am Ende doch simpler als vermutet.

Als Content-Type ist application/x-www-form-urlencoded;charset=UTF-8 gefragt, die Werte müssen noch per encodeURIComponent encodiert werden.

Nachzulesen hier: Ajax und Umlaute – Das ewig währende UTF-8 Problem und seine Lösung

Vielen Dank für Eure Bemühungen!

03.10.2012 - 00:03 Uhr

Hmmm bei mir funktioniert es trotz festgelegtem Encoding nicht.

Mein Code:


<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
[...]
<form action="sendMessage.do" method="POST" id="msgShortForm" class="skinny" onsubmit="msgShortButton.disabled=true;">
  <input type="hidden" name="r" value="/?p=conversation&with=pipapo">
  <input type="hidden" id="msgShortRec" name="receivers" value="nr1;nr2;nr3">
  <table>
    <tr><td>
      <textarea name="message" id="msgShortText" placeholder="Nachrichtentext" rows="1">
      </textarea>
    </td><td>
      <input type="button" value="Senden" id="msgShortButton" onClick="postSendMessage()" />
    </td></tr>
  </table>
</form>
[...]

Das Formular soll also an sendMessage.do abgeschickt werden.

Vermeintliches Equivalent in Javascript:


function getRequest()
{
  r = null;
   
    if(window.XMLHttpRequest)
    {
      r = new XMLHttpRequest();
    }
    else if(window.ActiveXObject)
    {
      try
      {
        r = new ActiveXObject('Msxml2.XMLHTTP');
      }
      catch(e1)
      {
        try
        {
          r = new ActiveXObject('Microsoft.XMLHTTP');
        }
        catch(e2)
        {
          alert("Request nicht möglich.");
        }
      }		
    }
    return r;
}

function postSendMessage()
{		
	// Browserkompatible Request erzeugen:
	r = getRequest();
 
		r.open('POST', 'sendMessage.do', true);
		r.setRequestHeader('Content-Type', 'text/html; charset=ISO-8859-1');
//Auch hier habe ich versucht, das Encoding umzustellen - ohne Erfolg
		//r.setRequestHeader('Cookie', document.cookie);
		r.send('receivers=' + $('msgShortRec').value + '&message=' + $('msgShortText').value);
		
		r.onreadystatechange = function() {
        if(r.readyState != 4) {
            $('msgShortButton').value = 'Senden...';
        }
        if(r.readyState == 4 && r.status == 200) {
            //location.reload();
        }
    }
}

Die Chrome-Toolbox zeigt mir aber trotzdem UTF-8 an (siehe Anhang). Auch der Nachrichtentext, eigentlich "hallöchen", ist verkrüppelt.

Trotzdem vielen Dank!
jov97

EDIT: Anhang vergessen

02.10.2012 - 22:21 Uhr

Moin!

Stehe gerade ein wenig auf dem Schlauch:

In einem HTML-Formular habe ich zwei Eingabefelder, per sumbit-Button wird das dann abgeschickt. Soweit so gut, auch Sonderzeichen werden korrekt übermittelt.

Jetzt hab' ich mir gedacht, mach' ich das ganze mal einen Tick moderner und poste mittels Javascript, damit die Seite nicht jedes Mal neu geladen werden muss. Jedoch wird das Formular jetzt in UTF-8 übermittelt, auch charset=ISO-8859-1 hilft da nicht weiter.

Hat jemand eine Idee, wie man das ganz elegant lösen könnte?
Eine Idee (von der ich aber nicht sonderlich begeistert bin) war, ein zweites Serverscript zu schreiben, das den UTF8-POST encodet.
Ich hoffe mal, dass das nicht der einzige Lösungsweg ist.

Besten Dank!
jov97

23.08.2012 - 19:12 Uhr

Joa, das stimmt... Ich werde die request ab einer bestimmten Größe einfach ablehnen. Geht ja schließlich nur um ein Bild.

23.08.2012 - 15:17 Uhr

Vielen Dank!!!

LJ jov97

22.08.2012 - 23:34 Uhr

Ah sorry. Ganz vergessen. Ich mache es ganz ählich wie der Herr bei stackoverflow:

HttpListenerContext context = Listener.GetContext();
HttpListenerRequest request = context.Request;

HttpListenerResponse response = context.Response;

Stream output = response.OutputStream;

byte[] buffer = new byte[request.ContentLength64];

request.InputStream.Read(buffer, 0, buffer.Length);

request.InputStream.Close();

Soviel zum Code. Wenn ich mir jetzt 'buffer' ausgeben lasse, sehe ich, dass ab ca 50KB nurnoch 0 steht (also Byte 0). Daraus schließe ich, dass der Buffer nicht bis zum Ende gefüllt wurde, also der OutputStream nicht vollständig übertragen wurde.
Liege ich da richtig? Und wenn ja, wie kann ich das verhindern?

Besten Dank!

22.08.2012 - 18:05 Uhr

Moin,

ich habe ein kleine Webseite in C# geschrieben, ohne ASP.NET.

Nun lasse ich den Benutzer über ein normales HTML-Formular (POST, multipart/form-data) ein Bild hochladen. Dieses wird dann über den HTTP-Body zu mir geschickt.
Bis zu einer Bildgröße von etwa 50KB klappt das auch noch ganz gut, darüber allerdings wird der Dateitransfer einfach abgebrochen.

content-length stimmt, ich lese die Daten über den InputStream in einen Buffer. Der HttpListener scheint den Transfer aber schon vorzeitig abzubrechen.

Hat jemand eine Idee, woran das liegen könnte?

Beste Grüße!
jov97