我使用以下代码来创建UDP数据包。我使用bindToPort来设置源端口。
[asyncUdpSocket bindToPort:7701
error:&socketError])
然而,!发现只有我第一次通过这些代码才能获得正确的源端口。休息时间,他们都错了!我对端口的绑定应该是 7701 。
GCDAsyncUdpSocket *asyncUdpSocket;
asyncUdpSocket = [[GCDAsyncUdpSocket alloc] initWithDelegate:self
delegateQueue:dispatch_get_main_queue()];
[asyncUdpSocket setPreferIPv4];
if ([asyncUdpSocket bindToPort:7701
error:&socketError]){
NSLog(@"Bind to Port fail");
}
[asyncUdpSocket enableBroadcast:NO error:&socketError];
[asyncUdpSocket sendData:data
toHost:@"192.168.16.77"
port:7701
withTimeout:-1
tag:0];
答案 0 :(得分:0)
可变端口号的原因是我正在使用ARC。下次分配和初始化时,实例可能不会被释放。
每次调用此部分代码时,我都会创建一个新的GCDAsyncUdpSocket对象,然后尝试绑定端口然后发送消息。这些对象仅在我使用ARC时才被释放。所以,实际上我试图多次绑定到端口,这是不可能的。一旦绑定了端口,我就不能再绑定它了。