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 "GCDAsyncUdpSocket.h"
- (void)viewDidLoad
{
;
if (udpSocket == nil)
{
;
}
}
- (void)setupSocket
{
udpSocket = [ initWithDelegate:self delegateQueue:dispatch_get_main_queue()];
;
NSData *data = [@"hello" 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,"Cannot bind socket more than once",我们在Stack Overflow上找到一个类似的问题:
<a href="https://stackoverflow.com/questions/17381636/" rel="noreferrer noopener nofollow" style="color: red;">
https://stackoverflow.com/questions/17381636/
</a>
</p>
页:
[1]