소켓 기반 iOS 프로그래밍
자세한 내용은 아래 내용을 참고해야겠지만 iOS에서 소켓으로 통신을 할 경우 참조할만한 URL이 있다.
검색을 하다 보니 꽤 비슷한 내용의 글들이 많이 있다. 외국원서를 번역해서 넣어 둔 것 같은데 대략 훓어 보니 어렵지 않게 이해를 할 수 있었다. 다만, 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");
}
}
'프로그래밍 > Xcode-iOS' 카테고리의 다른 글
UIColor+Hexcode (0) | 2018.09.13 |
---|---|
CBPeripheral advertismentData 값 파싱 코드 예제 (0) | 2018.07.11 |
diff: /Podfile.lock: No such file or directory (0) | 2018.05.02 |
금액 한글 변환 소스(objective-c, iOS, 아이폰) (0) | 2018.04.20 |
Objective-C 블록구문 (0) | 2017.11.03 |