私の最初の投稿と私の最初の質問。私は現在、UDP に基づく Artnet プロトコルをいじっています。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;
}
前もって感謝します、
マティアス