본문 바로가기
프로그래밍/Xcode-iOS

소켓 기반 iOS 프로그래밍

by Mr-후 2018. 5. 15.
반응형


소켓 기반  iOS 프로그래밍


자세한 내용은 아래 내용을 참고해야겠지만 iOS에서 소켓으로 통신을 할 경우 참조할만한 URL이 있다. 

http://hamait.tistory.com/702

검색을 하다 보니 꽤 비슷한 내용의 글들이 많이 있다. 외국원서를 번역해서 넣어 둔 것 같은데 대략 훓어 보니 어렵지 않게 이해를 할 수 있었다. 다만, GCDAsyncSoket 이라는 소켓소스를 사용하고 있기 때문에 아래 소스를 사용할 일은 없을 듯하다. GCDAsyncSoket은 cocoapods을 통해 설치 할 수 있다. 





NSInputStream *inputStream; NSOutputStream *outputStream;

- (void)initNetworkCommunication

{

CFReadStreamRef readStream; CFWriteStreamRef writeStream;

CFStreamCreatePairWithSocketToHost(NULL, (CFStringRef)@"localhost",80, &readStream, &writeStream);

inputStream = (NSInputStream *)readStream; 

outputStream = (NSOutputStream *)writeStream;

[inputStream setDelegate:self]; [outputStream setDelegate:self];

[inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];

[out putStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];

[inputStream open]; [outputStream open];

}


- (IBAction)joinChat:(id)sender

{

    NSString *res = [NSString stringWithFormat:@"iam:%@", inputNameField.text];

    NSData *dt = [[NSData alloc] initWithData:[res dataUsingEncoding:NSASCIIStringEncoding]];

    [outputStream write:[data bytes] maxLength:[dt length]];

}


  • - (IBAction)sendMessage:(id)sender

    {

        NSString *res = [NSString stringWithFormat:@"msg:%@", inputMessageField.text];

        NSData *dt = [[NSData alloc] initWithData:[res dataUsingEncoding:NSASCIIStringEncoding]];

        [outputStream write:[data bytes] maxLength:[dt length]];

    }


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

    {

        NSLog(@"stream event %i", streamEvent);

        switch (streamEvent)

        {

        case NSStreamEventOpenCompleted:

            NSLog(@"Stream opened");

            break;

        case NSStreamEventHasBytesAvailable: // fundamental to receive messages

            if (theStream == 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(@"server said: %@", output);

                        }

                    }

                }

            }

            break;

        case NSStreamEventErrorOccurred:

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

            break;

        case NSStreamEventEndEncountered:

            [theStream close];

            [theStream removeFromRunLoop:[NSRunLoop currentRunLoop]

                forMode:NSDefaultRunLoopMode];

            [theStream release];

            theStream = nil;

            break;

        default:

            NSLog(@"Unknown event");

        }

    }



  • 반응형