ios - 您可以使用 iOS 在本地主机上设置监听器套接字吗?

标签 ios sockets

我正在尝试为 iOS 设备使用 GCDAsyncSocketlocalhost 上设置一个 listenerSocket。

socketDidDisconnect 委托(delegate)中,我要么得到错误 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"
    }
}

最佳答案

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

关于ios - 您可以使用 iOS 在本地主机上设置监听器套接字吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31453411/

相关文章:

ios - 画中画后如何恢复全屏视频播放器

java - 如何监听套接字输入而不阻塞其他请求

c++ - tcp 客户端可以使用相同的端口连接到不同的服务器吗?

c - 使用套接字发送/接收字符串

Perl TCP 服务器和每次写入后刷新

macos - 无法使用应用 Proxifier : protocol wrong type for socket 监听 macOS Big Sur 上的任何 TCP 端口

ios - 配置文件与包标识符不匹配

ios - 从 PhoneGap iOS 应用程序中删除文本选择

ios - swift : Extra argument 'error' in call

objective-c - 如何在控制设备方向的同时控制设备状态栏的方向?