저는 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에서 방화벽을 끕니다. 연결을 거부하지 않으려면 어떻게해야할지 모르겠습니다. 어떤 도움이라도 대단히 감사합니다. 다음은
#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