Вы прослушиваете порт 7744
и передаете на порт 55544
.Вы должны передавать на тот же порт, на котором вы слушаете.т.е. отправка должна быть:
[udpSocket sendData:data toHost:@"127.0.0.1" port:7744 withTimeout:-1 tag:0];
Обоснованное предположение о том, почему хранитель пакетов не видит пакеты, потому что они не выходят из какого-либо сетевого интерфейса - это общая оптимизация, что пакеты для lo
устройства (127.0.0.1
) не выходят на провод;они просто зациклены на местном уровне.Большинство устройств перехвата пакетов не могут обнаружить пакеты этого типа.
Редактировать Вам нужно как минимум два GDCAsyncUdpSocket
s - один для клиента, один для сервера.Самый простой способ сделать это - создать два отдельных приложения, одно из которых будет работать как сервер, а другое - как клиент.
Этот ThirdViewController является клиентом UDP некоторой формы.Когда вы запускаете bindToPort, вам нужно использовать номер порта 0
, это заставляет ОС выделять порт для этой системы, который используется для прослушивания.Это необходимо, если вы когда-нибудь захотите получить пакет, отправленный с сервера.
[udpSocket bindToPort:0 error:nil];
в сторону, я всегда буду проверять наличие ошибки на bindToPort.
На стороне сервера,вам нужно привязать к известному порту:
[serverSocket bindToPort:55544 error:nil];
На стороне клиента, когда вы отправляете сообщение, которое вам нужно сделать (для симулятора):
[udpSocket sendData:data toHost:@"127.0.0.1" port:55544 withTimeout:-1 tag:0];
На сервересторона, когда вы получаете сообщение в обработчике didReceiveData
, вам передается fromAddress
.Этот адрес соответствует адресу и порту от udpSocket
, и если вы хотите передать сообщение обратно клиенту, вы можете использовать:
[serverSocket sendData:data toAddress:fromAddress withTimeout:-1 tag:0];
У меня не было проблем с отправкой пакетов на serverSocket
из udpSocket
и обработки ответов, когда я следовал этой методологии.Я использую Wireshark на стороне Mac, чтобы увидеть пакеты, поступающие от iDevice.Когда я использовал симулятор, я отправил на 127.0.0.1 и увидел ответы на сервере.