2014-01-29 43 views
0

我是iOS编程的新手,我试图做一个简单的程序来演示如何进行套接字连接。我正在关注的教程如下:http://www.devx.com/wireless/Article/43551iOS 7套接字连接拒绝错误61

我想在localhost:8080上建立套接字连接。该应用程序有一个文本视图,应该显示我传递的数据,这只是我输入的一个随机常量字符串。我得到的问题是NSLog中的一条错误消息(两次),当尝试连接时,表示The operation couldn’t be completed. Connection refused (Code = 61),可能一次用于输入,一次用于输出。我关闭了运行Mavericks(Mac OS X 10.9.1)的Mac上的防火墙。我不知道还有什么办法可以使连接不被拒绝。任何帮助不胜感激。

下面是我使用的代码(这是我在的iOS程序的第一次尝试,所以它可能是很丑陋):

#import "OXCTextAreaViewController.h" 
#import <Foundation/Foundation.h> 

@interface OXCTextAreaViewController() 
@property (weak, nonatomic) IBOutlet UITextView *textArea; 
@end 

NSInputStream *inputStream; 
NSOutputStream *outputStream; 
NSMutableData *data; 

@implementation OXCTextAreaViewController 
@synthesize textArea; 

- (void)connectSockets 
{ 
    CFReadStreamRef readStream; 
    CFWriteStreamRef writeStream; 
    CFStreamCreatePairWithSocketToHost(NULL, 
             (CFStringRef) @"localhost", 
             8080, 
             &readStream, 
             &writeStream); 
    inputStream = (__bridge NSInputStream *) readStream; 
    outputStream = (__bridge NSOutputStream *) writeStream; 
    [inputStream setDelegate:self]; 
    [outputStream setDelegate:self]; 

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

    [outputStream open]; 
    [inputStream open]; 
} 

-(void) writeToServer:(const uint8_t *) buf { 
    [outputStream write:buf maxLength:strlen((char*)buf)]; 
} 


- (void)stream:(NSStream *)stream handleEvent:(NSStreamEvent)eventCode { 

    switch(eventCode) { 
     case NSStreamEventOpenCompleted: 
     { 
      NSLog(@"NSStreamEventOpenCompleted"); 
      break; 
     } 

     case NSStreamEventEndEncountered: 
     { 
      NSLog(@"NSStreamEventEndEncountered"); 
      break; 
     } 

     case NSStreamEventHasSpaceAvailable: 
     { 
      NSLog(@"NSStreamEventHasSpaceAvailable"); 
      break; 
     } 

     case NSStreamEventNone: 
     { 
      NSLog(@"NSStreamEventNone"); 
      break; 
     } 

     case NSStreamEventErrorOccurred: 
     { 
      NSError* error = [stream streamError]; 
      NSString* errorMessage = 
       [NSString stringWithFormat:@"%@ (Code = %d)", 
       [error localizedDescription], 
       [error code]];    
      NSLog(errorMessage); 
      break; 
     } 

     case NSStreamEventHasBytesAvailable: 
     { 
      NSLog(@"NSStreamEventHasBytesAvailable"); 
      if (data == nil) { 
       data = [[NSMutableData alloc] init]; 
      } 
      uint8_t buf[1024]; 
      unsigned int len = 0; 
      len = [(NSInputStream *)stream read:buf maxLength:1024]; 
      if(len) { 
       [data appendBytes:(const void *)buf length:len]; 
       int bytesRead = 0; 
       bytesRead += len; 
      } else { 
       NSLog(@"No data."); 
      } 

      NSString *str = 
       [[NSString alloc] initWithData:data 
             encoding:NSUTF8StringEncoding]; 
      NSLog(str); 
      UIAlertView *alert = 
       [[UIAlertView alloc] initWithTitle:@"From server" 
              message:str 
              delegate:self 
           cancelButtonTitle:@"OK" 
           otherButtonTitles:nil]; 
      [alert show]; 

      data = nil; 
     } break; 
    } 
} 


-(void) disconnect { 
    [inputStream close]; 
    [outputStream close]; 
} 



- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    if (self) { 
     // Custom initialization 
    } 
    return self; 
} 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view. 
    [self connectSockets]; 
    const uint8_t *str = 
    (uint8_t *) [@"alsdkjflsdfjlasdfjldskfsdlafdsak" UTF8String]; 
    [self writeToServer:str]; 
} 

- (void)didReceiveMemoryWarning 
{ 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 

@end 

回答