10

シミュレーターでiPhone用のプログラムを実行しようとしています。私の問題は、UDP データの受信にあります。私はasyncUdpSocketを使用しています。ソケットを作成して使用するsendData:(NSData) toHost:と、...うまく機能します。

私が理解できないと思うのは、受信機能がどのように機能するかです。

私は次のようなものを想定しています:

socket = [[AsyncUdpSocket alloc] initWithDelegate:self];
[socket bindToPort:8000] error:nil] //returns YES
[socket receiveWithTimeout:-1 tag:1];  

次に、メソッドを呼び出す必要があると思います-(BOOL)onUdpSocket:(AsyncUdpSocket *)sock didReceiveData:(NSData *)data withTag:(long) fromHost:(NSString *)host port:(UInt16)port

私はそのメソッドに NSLog を入れましたが、決して呼び出されません。[socket receive,..] が唯一の受信方法なので、それが必要だと思います... または、使用する必要がある別の方法はありますか? それとも、デリゲートなどにいくつか追加する必要がありますか...どうすればいいのかわかりません

asyncUdpSocket の例、チュートリアル、ハウツーなどを検索しましたが、例が見つかりません。したがって、誰かがそれを説明したい場合、または適切な説明を知っている場合は、非常に高く評価されます.

答えがわからない場合でも、読んでくれてありがとう!

4

4 に答える 4

6

私はObjective Cを初めて使用しています(それを知らないので我慢してください)が、ほとんどの場合、AsyncUdpSocketDelegateを受け取ることができました。試す/確認するいくつかのこと:

  1. selfソケット デリゲートとして初期化するクラスが、コールバックを想定しているクラスであることを確認してください。

  2. AsyncUdpSocketDelegateクラスがプロトコルを採用していることを確認してください。これが実際に必要かどうかはわかりませんが、問題はありません。クラスヘッダーでは、次のようになります。

    @interface |your class| : |super class| <|Other protocol(s)|, AsyncUdpSocketDelegate> {

  3. インターフェイスと実装でデリゲート メソッドが宣言されていることを確認してください。メソッドのシグネチャは次のようになります。 - (BOOL)onUdpSocket:(AsyncUdpSocket *)sock didReceiveData:(NSData *)data withTag:(long)tag fromHost:(NSString *)host port:(UInt16)port;

  4. receiveWithTimeoutゼロ以外のタイムアウト値で呼び出してみてください。異なる結果が得られる場合があります。

  5. Wireshark を使用して、実際に UDP データを受信して​​いることを確認してください。私はあなたの知性を侮辱しようとしているわけではありませんが、問題が実際に私のネットワーク構成にあった過去に、ネットワーク コードのバグを追跡するためにかなりの時間を費やしました。

于 2011-05-09T20:00:10.423 に答える
1
AsyncUdpSocket *socket=[[AsyncUdpSocket alloc]initWithDelegate:self];    
//receiveWithTimeout is necessary or you won't receive anything
[socket receiveWithTimeout:-1 tag:2]; //-------here
NSData *data=[@"Hello from iPhone" dataUsingEncoding:NSUTF8StringEncoding];
[socket sendData:data toHost:bchost port:9003 withTimeout:-1 tag:1];
于 2012-11-08T09:04:26.607 に答える
-2

私はこのライブラリに詳しくありませんが、Google Code Project のサンプル コードを見ると、いくつかのことがわかります。

まず、あなたが説明したこのコールバックについて言及されていません。実装することになっているようです:

- (void)onSocket:(AsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag

また、この例では、サーバーは次の行で開始されます。

[listenSocket acceptOnPort:port error:&error]

サンプル コードへのリンクは次のとおりです。

于 2011-03-15T11:49:06.677 に答える