質問

私の実際のプロジェクトに夢中になる...

特定のポートにデータを送信しているデバイスを持っています。私の目標は、そのポート上のこの種のデバイスをすべて検出することです。 例:同じネットワーク上のこの種のデバイスを持っていて、iPhoneはこのデバイスをすべて検出します。

それはJava Discover Toolと連携していて、今私のiPhoneでそれをやろうとしています。

Java Discover Toolでは、次の手順があります。

  • データグラムソケット(Java)を作成する
  • ブロードキャストアドレスを取得する(255.255.255.255)
  • DataRampacket(Java)を作成する
  • ブロードキャストアドレスにパケットを送ります.Port 30303
  • 受信モードに進む
  • ソケットのために、それは答えパケットを取得します
  • デバイスからIPとホスト名を抽出します。

    asyncundSocketクラスを使用して同じ手順を再調整しようとしました。 http://code.google。 COM / P / COCOAASYNCSOCKEOCT /

    そしてここで私が今まで試したコードは次のとおりです。

    NSError *e;
    NSString *d = @"abcd";
    NSData *data = [d dataUsingEncoding:NSUTF8StringEncoding];
    
    
    ssocket = [[AsyncUdpSocket alloc]initWithDelegate:self];
    [ssocket setDelegate:self];
    
    
    
    [ssocket enableBroadcast:YES error:&e];
    
    
    [ssocket connectToHost:@"255.255.255.255" onPort:30303 error:&e];
    
    
    [ssocket sendData:data withTimeout:-1 tag:0];
    
    [ssocket receiveWithTimeout:-1 tag:0];
    
    .

    Delegate - (BOOL)onUdpSocket:(AsyncUdpSocket *)sock didReceiveData:(NSData *)data withTag:(long)tag fromHost:(NSString *)host port:(UInt16)portisは、呼ばれていない...

    何が悪いのかわかりません。この科目についてあなたの意見を教えてください。私が正しい方法論を使っていて、私が何か間違っていたかどうかを確認した場合

    事前にありがとうございました!

    モークス

    編集:

    私はjavAdiscovertoolと私のアプリケーションでネットワークトラフィックをスニックするためにWiresharkを使用しました。 実際、2パケット(iPhone、およびJavaDiscoverTool)の違いは送信元ポートです。 確かに、私のアプリケーションでは、送信元ポートは宛先ポートとは異なり、その問題を引き起こしていると思います。 私が送信しているパケットの送信元ポートを強制する方法を見つける必要があります...

    任意のアイデア?それはasyncundocketクラスにあります。

役に立ちましたか?

解決

私は解決策を見つけました。

使用:

NSError *e;
NSString *d = @"Discovery: Who is out there?\0\n";
NSData *data = [d dataUsingEncoding:NSUTF8StringEncoding];


ssocket = [[AsyncUdpSocket alloc]initWithDelegate:self];
[ssocket setDelegate:self];

[ssocket bindToPort:PORT error:&e];

[ssocket enableBroadcast:YES error:&e];


//[ssocket connectToHost:@"255.255.255.255" onPort:30303 error:&e];


//[ssocket sendData:data withTimeout:-1 tag:0];

[ssocket sendData:data toHost:@"255.255.255.255" port:30303 withTimeout:-1 tag:0];


[ssocket receiveWithTimeout:-1 tag:0];
.

とデリゲート:

- (BOOL)onUdpSocket:(AsyncUdpSocket *)sock didReceiveData:(NSData *)data withTag:(long)tag fromHost:(NSString *)host port:(UInt16)port
{
    NSString* aStr;

    aStr = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];


    NSLog(@"didreceivedata : %@", aStr);

    return NO;


}
.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top