1

私の最初の投稿と私の最初の質問。私は現在、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;
}

前もって感謝します、

マティアス

4

2 に答える 2

3

問題を見つけてよかったですが、タグ変数に関する質問に実際に答えるには、それは単にメッセージを追跡する方法です。タグはメッセージと一緒に送信されませんが、応答が来ると同じタグが付けられるので、タグを整理できます。そのようなことをする必要がない場合は、タグを0のままにしておくと、無視できます。

于 2010-10-01T18:32:17.153 に答える
0

問題は、最初はReadメソッドを呼び出さなかったため、読み取りが開始されなかったことです。

于 2010-02-19T13:16:41.597 に答える