Objective - C Lesen vom Inputstream
in einer iPhone-app, die ich senden einige Daten zu einem server via socket. Sollte die app das empfangen einer Antwort von dem server (das problem ist nicht auf der server-Seite). Das ist mein code:
-(void)sendLocation {
NSLog(@"sendLocation %@, %@", lat, lon);
NSString *imei = @"12345484654";
NSDictionary *sendData = [NSDictionary dictionaryWithObjectsAndKeys:
@"0", @"type",
imei, @"imei",
lat, @"lat",
lon, @"lon",
nil];
NSLog (@"JSON: %@", (NSString*)sendData);
NSString *outJSON = [sendData JSONRepresentation];
CFReadStreamRef readStream;
CFWriteStreamRef writeStream;
//CFStreamCreatePairWithSocketToHost(NULL, (CFStringRef)@"192.168.0.36", 12390, NULL, &writeStream);
CFStreamCreatePairWithSocketToHost(NULL, (CFStringRef)@"192.168.0.36", 12390, &readStream, &writeStream);
inputStream = (NSInputStream *)readStream;
outputStream = (NSOutputStream *)writeStream;
[inputStream setDelegate:self];
[outputStream setDelegate:self];
[inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[outputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[inputStream open];
[outputStream open];
NSData *data = [[NSData alloc] initWithData:[outJSON dataUsingEncoding:NSASCIIStringEncoding]];
NSString *end = @"\n###";
NSData *endData = [[NSData alloc] initWithData:[end dataUsingEncoding:NSASCIIStringEncoding]];
[outputStream write:[data bytes] maxLength:[data length]];
[outputStream write:[endData bytes] maxLength:[endData length]];
[outputStream close];
[outputStream removeFromRunLoop:[NSRunLoop currentRunLoop]
forMode:NSDefaultRunLoopMode];
[outputStream release];
}
- (void)stream:(NSStream *)aStream handleEvent:(NSStreamEvent)eventCode {
NSLog(@"got an event");
switch (eventCode) {
case NSStreamEventHasSpaceAvailable:
NSLog(@"None!");
break;
case NSStreamEventOpenCompleted:
NSLog(@"Stream opened");
break;
case NSStreamEventHasBytesAvailable:
if (aStream == inputStream) {
uint8_t buffer[1024];
int len;
while ([inputStream hasBytesAvailable]) {
len = [inputStream read:buffer maxLength:sizeof(buffer)];
if (len > 0) {
NSString *output = [[NSString alloc] initWithBytes:buffer length:len encoding:NSASCIIStringEncoding];
if (nil != output) {
NSLog(@"%@",output);
}
}
}
}
[inputStream close];
[inputStream removeFromRunLoop:[NSRunLoop currentRunLoop]forMode:NSDefaultRunLoopMode];
[inputStream release];
break;
case NSStreamEventErrorOccurred:
NSLog(@"CONNECTION ERROR: Connection to the host failed!");
break;
case NSStreamEventEndEncountered:
NSLog(@"Stream Closed");
break;
default:
break;
}
}
Log gibt mir:
2012-08-22 14:58:52.117 Second[1272:11603] got an event
2012-08-22 14:58:52.117 Second[1272:11603] Stream opened
2012-08-22 14:58:52.117 Second[1272:11603] got an event
2012-08-22 14:58:52.117 Second[1272:11603] None!
so etwas passiert den Inputstream richtig? Aber es gibt nie anygthing erhalten. Ich bin auch unsicher, wo Sie in der Nähe & release den Inputstream.
Einen Hinweis darauf, was ist Los mit diesem würde geschätzt 🙂
Ich kann nicht empfehlen Ihnen genug GCDAsyncSocket
wie zu Lesen bestimmter Byte-Bereich mit Eingabe-stream(Datei, auf die über das Internet) bedeutet von 0 auf 1000 bytes, die in einem thread, 1001 bis 2000 in einem anderen thread und kombinieren Sie zu einer Datei?
wie zu Lesen bestimmter Byte-Bereich mit Eingabe-stream(Datei, auf die über das Internet) bedeutet von 0 auf 1000 bytes, die in einem thread, 1001 bis 2000 in einem anderen thread und kombinieren Sie zu einer Datei?
InformationsquelleAutor asco | 2012-08-22
Du musst angemeldet sein, um einen Kommentar abzugeben.
ich denke mal dein code ist nicht das senden der Daten zum server einwandfrei. es wird zunächst versucht, das senden von Daten an server, da lassen Sie den Ausgabestrom es nicht mehr funktioniert. dies ist der code, den ich schrieb, bevor für diese Veranstaltung.
kann ich Ratschläge, die Sie zu demselben Ort ;
dieser Ort ist für die Kommunikation mit tcp-server.
dieser Ort ist für das senden und empfangen mit nsstream
und meine schließlich, ich Ratschläge, die Sie verwenden NSJSONSerialization spielen mit json-Objekten.
InformationsquelleAutor meth