Obj-C:如何在GCDAsyncUdpSocket中使UDP数据包的源端口一致?源端口总是改变

时间:2013-07-26 01:55:58

标签: ios objective-c gcdasyncsocket

我使用以下代码来创建UDP数据包。我使用bindToPort来设置源端口。

[asyncUdpSocket bindToPort:7701
                     error:&socketError])  

然而,!发现只有我第一次通过这些代码才能获得正确的源端口。休息时间,他们都错了!我对端口的绑定应该是 7701

Image captured by Wireshark

 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];

问题:

如何在GCDAsyncUdpSocket中使UDP数据包的源端口一致?

1 个答案:

答案 0 :(得分:0)

可变端口号的原因是我正在使用ARC。下次分配和初始化时,实例可能不会被释放。

每次调用此部分代码时,我都会创建一个新的GCDAsyncUdpSocket对象,然后尝试绑定端口然后发送消息。这些对象仅在我使用ARC时才被释放。所以,实际上我试图多次绑定到端口,这是不可能的。一旦绑定了端口,我就不能再绑定它了。