菜鸟教程小白 发表于 2022-12-12 12:04:56

ios - GCDAsyncUdpSocket, "Cannot bind socket more than once"


                                            <p><p>我正在使用 GCDAsyncUdpSocket 在 iphone 和远程 udp 服务器之间获取 udp 广播。
我正在特定端口上向“255.255.255.255”广播地址发送一个小的“hello”。</p>

<p>然后服务器回复,让我发现它的 IP 地址。</p>

<p>一切正常,尤其是使用模拟器,除了如果我在 iphone 上运行一次,
当我尝试停止应用程序并立即运行它时,我收到“无法多次绑定(bind)套接字”错误。当我在 xcode 中单击停止或在 IOS 中终止应用程序时会发生这种情况。</p>

<p>这是我的代码示例:</p>

<pre><code>#import &#34;GCDAsyncUdpSocket.h&#34;

- (void)viewDidLoad
{
    ;

    if (udpSocket == nil)
    {
      ;
    }
}

- (void)setupSocket
{

    udpSocket = [ initWithDelegate:self delegateQueue:dispatch_get_main_queue()];
    ;


    NSData *data = [@&#34;hello&#34; dataUsingEncoding:NSUTF8StringEncoding];
    ;

    NSError *error = nil;

    if (!)
    {
      ;
      return;
    }
    if (!)
    {
      ;
      return;
    }
}

- (void)udpSocket:(GCDAsyncUdpSocket *)sock didReceiveData:(NSData *)data
      fromAddress:(NSData *)address
withFilterContext:(id)filterContext
{
    NSString *msg = [ initWithData:data encoding:NSUTF8StringEncoding];
    if (msg)
    {
      ;
    }
    else
    {
      NSString *host = nil;
      uint16_t port = 0;
      ;

      ;
    }
    ;
    udpSocket = NIL;

}
</code></pre>

<p>实际上,套接字引用似乎仍然被绑定(bind),忽略关闭操作并设置为零。</p>

<p>欢迎任何建议,
感谢阅读。</p>

<p>FKY</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>当您调用 send 时,套接字会自动绑定(bind)。所以之后再尝试绑定(bind)它为时已晚。通常,您根本不需要投标 UDP 套接字,除非您有固定的端口号要求,而这里没有。只需将其删除。</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - GCDAsyncUdpSocket,&#34;Cannot bind socket more than once&#34;,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/17381636/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/17381636/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - GCDAsyncUdpSocket, &#34;Cannot bind socket more than once&#34;