程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> Objective C TCP 通訊實例

Objective C TCP 通訊實例

編輯:C++入門知識

TCP通訊實例 Communicator.h  [cpp]  #import <Foundation/Foundation.h>       @interface Communicator : NSObject <NSStreamDelegate> {       @public              NSString *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 [cpp]   #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 [cpp]   #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;   }  

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved