2014-01-29 1 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 (OS X 10.9.1)를 실행하는 Mac에서 방화벽을 끕니다. 연결을 거부하지 않으려면 어떻게해야할지 모르겠습니다. 어떤 도움이라도 대단히 감사합니다. 다음은

(이것은 아이폰 OS 프로그램에서 내 첫 번째 시도, 그래서 아마 꽤 추한) 내가 사용하고 코드입니다 : 나는이 작품을 만들 수 없습니다

#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 

답변

관련 문제