2

私はソケットプログラミングが初めてで、http://www.raywenderlich.com/3932/how-to-create-a-socket-based-iphone-app-and-serverを参照してそれを行いました。サーバー、私が直面している問題は、ソケットを使用してメッセージを送受信できることですが、受信したメッセージは次のように壊れます"そしてしばらくして" abcd ". メッセージを受信するために次のコードを使用しています。

- (void)stream:(NSStream *)theStream handleEvent:(NSStreamEvent)streamEvent {


    switch (streamEvent) {

        case NSStreamEventNone:
        NSLog(@"Stream event none");
            break;

        case NSStreamEventOpenCompleted:
            NSLog(@"Stream opened");
            break;
        case NSStreamEventHasBytesAvailable:


        if (theStream == inputStream) {

                int len=0;
                uint8_t *buffer = (uint8_t *)calloc(1, (16*1024));

                while ([inputStream hasBytesAvailable]) {
                    len = [inputStream read:buffer maxLength:sizeof(buffer)];


                   NSLog(@"byte available %d",len);

                    if (len > 0) {
                        NSMutableData* data=[[NSMutableData alloc] initWithLength:0];
                        //
                        [data appendBytes:(const void *)buffer length:len];


//                        NSString *s = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];
//                                        NSLog(@"rs %@",s);

                        NSString *output = [[NSString alloc] initWithBytes:buffer length:len encoding:NSASCIIStringEncoding];


                        if (nil != output) {
                            NSLog(@"server said: %@", output);
                            [self messageReceived:output];

                        }
                    }
                }

            }



            break;

        case NSStreamEventHasSpaceAvailable:
            NSLog(@"event space available");

            break;

        case NSStreamEventErrorOccurred:

            NSLog(@"Can not connect to the host!");
            break;

        case NSStreamEventEndEncountered:
            NSLog(@"end");
            [theStream close];
            [theStream removeFromRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
            [theStream release];
            theStream = nil;

            break;


        default:
            NSLog(@"Unknown event");
    }

}
4

1 に答える 1