Я схожу с ума от моего настоящего проекта ...
У меня есть устройство, которое отправляет данные на определенный порт. Моя цель - обнаружить все устройства такого типа на этом порту.
Пример: у меня есть 4 устройства такого типа в одной сети, и я бы с помощью iPhone обнаружил все это устройство.
Он работает с инструментом обнаружения JAVA, и сейчас я пытаюсь сделать это на своем iPhone.
В инструменте обнаружения JAVA используются следующие шаги:
- Создание DatagramSocket (JAVA)
- Получить широковещательный адрес (255.255.255.255)
- Создание DatagramPacket (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
никогда не вызывается ...
Я не знаю, что не так. Не могли бы вы дать мне свое мнение по этому вопросу? Если я использую правильную методологию и посмотрим, сделал ли я что-то не так?
Заранее спасибо !!
MoKeS
РЕДАКТИРОВАТЬ:
Я использовал wireshark для перехвата сетевого трафика с помощью JavaDiscoverTool и моего приложения.
На самом деле разница между двумя пакетами (iphone и javadiscovertool) - это порт источника.
Действительно, в моем приложении порт источника отличается от порта назначения, и я думаю, что это вызывает проблему.
Мне нужно найти способ заставить порт источника на отправляемом пакете ...
Есть идеи? Он находится в классе AsyncUdpSocket.