Objective C TCP 通讯实例

来源:互联网 发布:jstor数据库中文版 编辑:程序博客网 时间:2024/06/05 17:37

TCP通讯实例

Communicator.h 
#import <Foundation/Foundation.h> @interface Communicator : NSObject <NSStreamDelegate> {@publicNSString *host;int port;} - (void)setup;- (void)open;- (void)close;- (void)stream:(NSStream *)stream handleEvent:(NSStreamEvent)event;- (void)readIn:(NSString *)s;- (void)writeOut:(NSString *)s; @end

Communicator.m
#import "Communicator.h" CFReadStreamRef readStream;CFWriteStreamRef writeStream; NSInputStream *inputStream;NSOutputStream *outputStream; @implementation Communicator - (void)setup {NSURL *url = [NSURL URLWithString:host];NSLog(@"Setting up connection to %@ : %i", [url absoluteString], port);CFStreamCreatePairWithSocketToHost(kCFAllocatorDefault, (CFStringRef)[url host], port, &readStream, &writeStream);if(!CFWriteStreamOpen(writeStream)) {NSLog(@"Error, writeStream not open");return;}[self open]; NSLog(@"Status of outputStream: %i", [outputStream streamStatus]);return;} - (void)open {NSLog(@"Opening streams.");inputStream = (NSInputStream *)readStream;outputStream = (NSOutputStream *)writeStream;[inputStream retain];[outputStream retain];[inputStream setDelegate:self];[outputStream setDelegate:self];[inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];[outputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];[inputStream open];[outputStream open];} - (void)close {NSLog(@"Closing streams.");[inputStream close];[outputStream close];[inputStream removeFromRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];[outputStream removeFromRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];[inputStream setDelegate:nil];[outputStream setDelegate:nil];[inputStream release];[outputStream release];inputStream = nil;outputStream = nil;} - (void)stream:(NSStream *)stream handleEvent:(NSStreamEvent)event {NSLog(@"Stream triggered.");switch(event) {case NSStreamEventHasSpaceAvailable: {if(stream == outputStream) {NSLog(@"outputStream is ready."); }break;}case NSStreamEventHasBytesAvailable: {if(stream == inputStream) {NSLog(@"inputStream is ready."); uint8_t buf[1024];unsigned int len = 0;len = [inputStream read:buf maxLength:1024];if(len > 0) {NSMutableData* data=[[NSMutableData alloc] initWithLength:0];[data appendBytes: (const void *)buf length:len];NSString *s = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];[self readIn:s];[data release];}} break;}default: {NSLog(@"Stream is sending an Event: %i", event);break;}}} - (void)readIn:(NSString *)s {NSLog(@"Reading in the following:");NSLog(@"%@", s);} - (void)writeOut:(NSString *)s {uint8_t *buf = (uint8_t *)[s UTF8String];[outputStream write:buf maxLength:strlen((char *)buf)];NSLog(@"Writing out the following:");NSLog(@"%@", s);} @end

StreamExample.m
#import <Foundation/Foundation.h> #import "Communicator.h" int main (int argc, const char * argv[]) {NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; Communicator *c = [[Communicator alloc] init];c->host = @"http://127.0.0.1";c->port = 6789;[c setup];[c open];[pool drain];return 0;}
原创粉丝点击