我正在尝试使用GCDAsyncSocket
为iOS设备在 localhost 上设置listenerSocket。
在socketDidDisconnect
委托中我遇到错误 Code = 49 尝试使用端口0(我希望找到第一个可用的空闲端口)。
或者如果我使用端口号,那么我尝试连接localhost
时会收到错误 Code = 61 。
- (IBAction)start:(id)sender {
asyncSocket = [[GCDAsyncSocket alloc] initWithDelegate:self delegateQueue:dispatch_get_main_queue()];
NSError *err = nil;
if(![asyncSocket connectToHost:@"localhost" onPort:0 error:&err])
{
NSLog(@"Connect Error: %@", err);
}
}
#pragma mark – delegate
-(void)socketDidDisconnect:(GCDAsyncSocket *)sock withError:(NSError *)err
{
NSLog(@"socketDidDisconnect");
if (err) {
NSLog(@"Socket Error: %@", err);
// Error in connect function:
// NSPOSIXErrorDomain Code=49 "Can't assign requested address" - onPort:0
// NSPOSIXErrorDomain Code=61 "Connection refused" - connectToHost:@"localhost"
}
}
答案 0 :(得分:1)
connectToHost
将充当连接的客户端。您想阅读help page的编写服务器部分:
listenSocket = [[GCDAsyncSocket alloc] initWithDelegate:self delegateQueue:dispatch_get_main_queue()];
NSError *error = nil;
if (![listenSocket acceptOnPort:port error:&error])
{
NSLog(@"I goofed: %@", error);
}
- (void)socket:(GCDAsyncSocket *)sender didAcceptNewSocket:(GCDAsyncSocket *)newSocket
{
// The "sender" parameter is the listenSocket we created.
// The "newSocket" is a new instance of GCDAsyncSocket.
// It represents the accepted incoming client connection.
// Do server stuff with newSocket...
}
但是,您需要知道要使用的端口(如果您让系统决定使用哪个端口,那么客户端应该知道如何连接到服务器?)。此外,端口几乎肯定需要> 1024
(在保留端口范围之外)。但是,我从未试图在iOS上创建服务器。