Как прослушивать через определенный порт на iPhone ios4.2?

StackOverflow https://stackoverflow.com/questions/5015489

Вопрос

Я схожу с ума по своему настоящему проекту...

У меня есть устройство, которое отправляет данные по определенному порту.Моя цель - обнаружить все подобные устройства на этом порту.Пример :У меня есть 4 таких устройства в одной сети, и я бы с помощью iPhone обнаружил все эти устройства.

Это работает с помощью инструмента JAVA discover, и теперь я пытаюсь сделать это на своем iPhone.

Вот шаги, используемые в инструменте обнаружения JAVA :

  • Создайте DatagramSocket (JAVA)
  • Получить широковещательный адрес (255.255.255.255)
  • Создать пакет данных (JAVA)
  • Отправьте пакет по широковещательному адресу с портом 30303
  • Перейти в режим приема
  • Благодаря сокету он получает пакеты ответов
  • Извлеките ip-адрес и имя хоста из устройства

Я попытался повторить те же шаги, используя класс AsyncUdpSocket : http://code.google.com/p/cocoaasyncsocket/

И вот код, который я пробовал до сих пор :

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];

Делегат - (BOOL)onUdpSocket:(AsyncUdpSocket *)sock didReceiveData:(NSData *)data withTag:(long)tag fromHost:(NSString *)host port:(UInt16)portникогда не вызывается ...

Я не знаю, что не так..Не могли бы вы, пожалуйста, высказать мне свое мнение по этому поводу?Если я использую правильную методологию и посмотрю, не сделал ли я что-нибудь не так??

Заранее благодарю вас!!

Моксы

РЕДАКТИРОВАТЬ :

Я использовал wireshark для перехвата сетевого трафика с помощью JavaDiscoverTool и моего приложения.На самом деле разница между двумя пакетами (iphone и javadiscovertool) заключается в исходном порту.Действительно, в моем приложении порт источника отличается от порта назначения, и я думаю, что это вызывает проблему.Мне нужно найти способ принудительно указать порт источника в пакете, который я отправляю...

Есть какие-нибудь идеи?Это относится к классу AsyncUdpSocket.

Это было полезно?

Решение

Я нашел решение.

использовать :

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