StreamSocket : datareader.LoadAsync wartet infinte auch wenn die Daten avaialbe

Ich habe folgenden code in meine Windows phone 8 app.

//connection code, done during app start
socket = new StreamSocket();
await socket.ConnectAsync(serverHostName, serviceName);
dataReader = new DataReader(socket.InputStream);
dataReader.InputStreamOptions = InputStreamOptions.Partial;
dataWriter = new DataWriter(socket.OutputStream);

Nachdem die Verbindung hergestellt wurde, habe ich einen anderen thread, prüft auf eintreffende Netzwerk-Pakete

await dataReader.LoadAsync(2048);
dataReader.ReadBytes(buffer);
----------

Workflow ist wie folgt

  • Telefon eine Verbindung zum server über socket.ConnectAsync
  • Server antwortet mit der ersten Nachricht (Handy erhält, diese richtig im dataReader.LoadAsync Funktion)
  • Telefon sendet nun das 'fachliche' Anfrage
  • Server antwortet mit 'fachliche' Antwort (Problem liegt hier. Handy nicht den Empfang der Antwort vom server an einige der Zeit).

Es ist kein Szenario Unterschied zwischen arbeitenden Staat' und 'nicht-arbeiten-Staat".

Also habe ich versucht zu Debuggen. Ich setzen Sie einen Haltepunkt für den dataReader.LoadAsync und sah, dass die Ausführung wartet unendlich auf den Anruf.

Sicherstellen, dass der server Daten sendet, richtig, ich lief die app im Windows phone-emulator und lief die WireShark network analyzer in den PC. Ich konnte sehen, dass Pakete empfangen werden, die für die IP-Adresse des Telefons.

Jemand irgendwelche Hinweise, warum der dataReader.LoadAsync Funktion rufen nicht zurück, wenn es Daten fertig zu werden, Lesen Sie in der Steckdose?

  • Es wird warten, bis 2048 bytes zur Verfügung stehen. Nicht weniger.
  • ich habe InputStreamOption Teilweise, was bedeutet, LoadAsync wird zurückkehren, sobald das erste byte verfügbar ist.
  • My bad, ich war mit einem winzigen smartphone, jetzt sehe ich es.
  • Wie groß ist die ersten Puffer, die Sie übergeben, um ReadBytes? Sind Sie sicher, dass es nicht mehr dataReader.unconsumedBufferLength verfügbar?
  • Ja, ich bin sicher, dass die UnconsumbedBufferLength null ist. Ich tun, verbrauchen alle gelesenen bytes in der erste Anruf mit der Funktion ReadBytes. Halten Sie den code einfach & übersichtlich, ich konnte nicht den gesamten code hier.
  • Ich hatte genau dasselbe problem, aber ich war mit der SerialDevice Klasse " stream mit mein DataReader. Ich denke mehr und mehr, dass dies entweder ein bug oder eine falsche Dokumentation der Funktionalität.

InformationsquelleAutor Curious | 2014-08-18
Schreibe einen Kommentar