gpt4 book ai didi

Cocoa AsyncUDPSocket 框架,(长)标签变量解释和我的委托(delegate)有时会被调用

转载 作者:行者123 更新时间:2023-12-03 17:00:22 25 4
gpt4 key购买 nike

我的第一篇文章,也是我的第一个问题。我目前正在研究基于 UDP 的 Artnet protokoll。尝试开发一个读取 Artnet 数据的 Cocoa 应用程序。我决定使用AsyncUDPSocket Cocoa 框架并让它以某种方式工作..所以当我尝试使用

将数据包发送到我的监听端口时
nc -u localhost 6454

我的代表接到电话。如果我用另一个 Artnet 应用程序尝试此操作,我的代表永远不会被回调,但我可以在数据包分析器中看到数据包..

我怀疑这一定是“标签”引起的。有人可以解释一下(长)标签变量吗,因为我找不到关于这个值的文档,而且我在网上找不到答案。另外我可能会补充一点,我对 cocoa 开发相对较新,所以也许这是一个非常基本的错误..

下面是我的套接字初始化代码:

 listenSocket_unicast = [[AsyncUdpSocket alloc] initWithDelegate:self];  // This one is not added to the Autorelease pool, so cocoa doesnt delete my socket object.
listenSocket_broadcast = [[AsyncUdpSocket alloc] initWithDelegate:self]; // This one is not added to the Autorelease pool, so cocoa doesnt delete my socket object.

// Bind unicast socket..if adress is not the loopback device

if (![SocketAddress isEqualToString:@LOOPBACK])
if ([listenSocket_unicast bindToAddress:SocketAddress port:ARTNET_PORT error:nil] == NO)
{
NSLog (@"Could not bind unicast socket on Adress %@ and port %i",SocketAddress, ARTNET_PORT);
return NO;
}
else NSLog (@"Unicast Socket bind to on Adress %@ and port %i",SocketAddress, ARTNET_PORT);
// Bind broadcast socket..
if ([listenSocket_broadcast bindToAddress:SocketBroadcastAdress port:ARTNET_PORT error:nil] == NO)
{
NSLog (@"Could not bind broadcast socket on Adress %@ and port %i",SocketBroadcastAdress, ARTNET_PORT);
return NO;
}
else
NSLog (@"Broadcast Socket bind to on Adress %@ and port %i",SocketBroadcastAdress, ARTNET_PORT);




[listenSocket_unicast receiveWithTimeout:-1 tag:0];
[listenSocket_broadcast receiveWithTimeout:-1 tag:0];

[listenSocket_broadcast enableBroadcast:YES error:nil];

以及我当前尝试运行的代码:

    -(BOOL)onUdpSocket:(AsyncUdpSocket *)sock didReceiveData:(NSData *)data withTag:(long)tag fromHost:(NSString *)host port:(UInt16)port
{
[sock receiveWithTimeout:-1 tag:0];
NSLog (@"UDP Delegate executed");
return YES;
}

提前致谢,

马蒂亚斯

最佳答案

很高兴您发现了问题,但要真正回答有关标签变量的问题,这只是跟踪消息的一种方法。该标签不会随消息一起发送,但当收到响应时,将具有相同的标签,因此您可以组织它们。如果你不需要做这样的事情,只需将 tag 保留为 0 即可忽略它。

关于Cocoa AsyncUDPSocket 框架,(长)标签变量解释和我的委托(delegate)有时会被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2243773/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com