我正在尝试为 iOS 设备使用 GCDAsyncSocket
在 localhost 上设置一个 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/