我的第一篇文章也是我的第一个问题。我目前正在使用基于UDP的Artnet protokoll。试图开发一个读取Artnet数据的Cocoa应用程序。我决定使用AsyncUDPSocket Cocoa框架并让它以某种方式工作..所以当我尝试使用
将数据包发送到我的监听端口时nc -u localhost 6454
我的委托被召唤。如果我尝试使用另一个Artnet应用程序,我的委托永远不会被回调,但我可以看到数据包分析器中的数据包..
我怀疑它必须是由“标签”引起的。有人可以解释(长)标签变量,因为我找不到有关此值的文档,我在网上找不到答案。另外我可能会补充一点,我对可可开发相对较新,所以这可能是一个非常基本的错误..
下面的是套接字的初始化代码:
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;
}
提前致谢,
的Matthias
答案 0 :(得分:3)
很高兴您发现了问题,但要真正回答有关标记变量的问题,它只是一种跟踪消息的方法。标签不会随消息一起发送,但是当响应发出时,它将具有相同的标记,因此您可以组织它们。如果你不需要做那种事情,只需将标记保留为0,你就可以忽略它。
答案 1 :(得分:0)
问题是我最初没有调用Read方法..因此读数从未开始。