Hallo zusammen!
Bräuchte eure Hilfe bei oben erwähnter Funktion. Im Grunde geht's darum das ich über IPhone mittels Socketverbindung auf einen Server zugreife und von dort Daten abhole.
Wenn Daten ankommen werden diese mit NSStreamEventHasBytesAvailable in einer While Schleife eingelesen.
Mein Problem ist jetzt, dass längere Datenstreams (oder auch kürzere bei langsameren Verbindungen) nicht als ganzes abgearbeitet werden, was bedeutet das die Whileschleife fertig ist, bevor das letzte Byte übertragen wurde.
Momentan helfe ich mir damit, dass ich mittels "Sleep" Befehl das Einlesen künstlich hinauszögere um den ganzen Stream zu erhalten. Abfragen ob das "End of Stream" Zeichen angekommen ist kann ich in diesem Fall auch nicht da ich die zu übertragenden Daten verschlüsselt habe und dieses Zeichen erst nach dem Entschlüsseln als dieses erkannt wird.
Alles anzeigen
hat jemand eine Idee?
Bräuchte eure Hilfe bei oben erwähnter Funktion. Im Grunde geht's darum das ich über IPhone mittels Socketverbindung auf einen Server zugreife und von dort Daten abhole.
Wenn Daten ankommen werden diese mit NSStreamEventHasBytesAvailable in einer While Schleife eingelesen.
Mein Problem ist jetzt, dass längere Datenstreams (oder auch kürzere bei langsameren Verbindungen) nicht als ganzes abgearbeitet werden, was bedeutet das die Whileschleife fertig ist, bevor das letzte Byte übertragen wurde.
Momentan helfe ich mir damit, dass ich mittels "Sleep" Befehl das Einlesen künstlich hinauszögere um den ganzen Stream zu erhalten. Abfragen ob das "End of Stream" Zeichen angekommen ist kann ich in diesem Fall auch nicht da ich die zu übertragenden Daten verschlüsselt habe und dieses Zeichen erst nach dem Entschlüsseln als dieses erkannt wird.
Quellcode
- case NSStreamEventHasBytesAvailable:
- if (theStream == inputStream) {
- uint8_t buffer[16384];
- int len;
- sleep(wartezeit1);
- while ([inputStream hasBytesAvailable]) {
- len = [inputStream read:buffer maxLength:sizeof(buffer)];
- if (len > 0) {
- NSString *output = [[[NSString alloc] initWithBytes:buffer length:len encoding:NSASCIIStringEncoding]autorelease];
- if (nil != output) {[self messageReceived:output];}
- }
- }
- }
- break;
hat jemand eine Idee?