iPhone iOS4.2の特定のポートを聴く方法は?
-
14-11-2019 - |
質問
私の実際のプロジェクトに夢中になる...
特定のポートにデータを送信しているデバイスを持っています。私の目標は、そのポート上のこの種のデバイスをすべて検出することです。 例:同じネットワーク上のこの種のデバイスを持っていて、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)port
isは、呼ばれていない...何が悪いのかわかりません。この科目についてあなたの意見を教えてください。私が正しい方法論を使っていて、私が何か間違っていたかどうかを確認した場合
事前にありがとうございました!
モークス
編集:
私は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;
}
.