1

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

[asyncUdpSocket bindToPort:7701
                     error:&socketError])  

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

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 数据包的源端口一致?

4

1 回答 1

0

可变端口号的原因是我使用的是 ARC。实例可能不会在下次 alloc 和 init 时释放。

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

于 2013-08-20T07:13:43.567 回答