你可以在iOS上使用localhost设置监听器套接字吗?

时间:2015-07-16 11:53:43

标签: ios sockets

我正在尝试使用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"
    }
}

1 个答案:

答案 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上创建服务器。