0

我试图在同一个 GCDAsyncSocket 对象上“发送到”和“”接收,但它Attempting to accept while connected or accepting connections. Disconnect first.在尝试初始化对象时返回错误。

我的代码:

-(instancetype)initWithHost:(NSString *)host port:(NSInteger)port userData:(NSDictionary *)userData delegate:(id<AKSenderSocketDelegate>)delegate
{
  self = [super init];
  if (self)
  {
     self.delegate = delegate;
     self.senderSocket = [[GCDAsyncSocket alloc] initWithDelegate:self delegateQueue:dispatch_get_main_queue()];
     self.senderSocket.userData = userData;

    NSError *err = nil;

    //---- Sender
    if (![self.senderSocket connectToHost:host onPort:port error:&err])
    {
        NSLog(@"Failed to connect: %@", err);
    }
    else
    {
        NSLog(@"Connected to :%@:%ld",host,(long)port);
    }

    //---- Listener
    if (![self.senderSocket acceptOnPort:0 error:&err])
    {
        NSLog(@"Failed to open lintening port. :%@",err.localizedDescription);
    }
    else
    {
        NSLog(@"Listening to port :%hu and host :%@",self.senderSocket.localPort,self.senderSocket.localHost);
    }
  }
   return self;
}

请帮忙!!

4

1 回答 1

0

你把布丁煮过头了(笑)。连接后,您就可以开始通信了。不需要接受消息。

connectToHost:onPort:error:就像打一个电话:你打电话,对方接听(因为对方已经让自己可用acceptOnPort:error:或等效)。建立连接后,您可以通过同一个套接字读取和写入数据;套接字是双向的。

因此,如果您想“拨打电话”,请使用connectToHost:onPort:error:. 相反,如果您想等待对方拨打电话,请使用acceptOnPort:error:。无论对话的哪一方是“连接者”或“接受者”,对话双方都可以发送(写)和收听(读)。

于 2018-04-02T23:27:55.433 回答