Я использую sendto()
и recvfrom()
для отправки некоторых простых пакетов через UDP через WiFI.iphone проблема с UDP-пакетами
Я попытался с помощью двух телефонов и симулятор, результаты я получаю являются:
Пакеты, посланные от телефонов -> мь тренажере Пакеты, отправленные из симулятора -> Тренажер recvfrom остается блокирование. Пакеты, отправленные с телефонов -> другой телефон recvfrom остается блокировкой.
Я не уверен, как начать отладку этого, поскольку симулятор/mac способен принимать пакеты, но телефоны, похоже, не получают сообщение.
Немного в сторону, мне нужно сохранить мои пакеты ниже MTU для моей сети? Или фрагментация обрабатывается ОС или другим программным обеспечением более низкого уровня?
UPDATE: Я забыл указать размер и структуру пакета. Я передача:
typedef struct PacketForTransmission {
int32_t packetTypeIdentifier;
char data[64]; // size to fit my biggest struct
} PacketForTransmission;
из которых данные символьных [64] является:
typedef struct PacketHeader{
uint32_t identifier;
uint32_t datatype;
} PacketHeader;
typedef struct BasePacket{
PacketHeader header;
int32_t cardValue;
char sendingDeviceID[41]; //dont forget to save room for the NULL terminator!
} BasePacket;
typedef struct PositionPacket{
BasePacket basePacket;
int32_t x;
int32_t y;
} PositionPacket;
отправки пакета, как:
PositionPacket packet;
bzero(&packet, sizeof(packet));
//fill packet with it's associated data
PacketForTransmission transmissionPacket;
transmissionPacket.packetTypeIdentifier = kPositionPacketType;
memcpy(&transmissionPacket.data, (void*)&packet, sizeof(packet)); //put the PositionPacket into data[64]
size_t sendResult = sendto(_socket, &transmissionPacket, sizeof(transmissionPacket), 0, [address bytes], [address length]);
NSLog(@"packet sent of size: %i", sendResult);
и ПОЛУЧАТЬ пакеты, как:
while(1){
char dataBuffer[8192];
struct sockaddr addr;
socklen_t socklen = sizeof(addr);
ssize_t len = recvfrom(_socket, dataBuffer, sizeof(dataBuffer), 0, &addr, &socklen); //continues blocking here
NSLog(@"packet recieved of length: %i", len);
//do some more stuff
}
Пожалуйста, введите код. –
Любая информация о том, какие порты вы используете? –
Я использую bonjour, поэтому порты являются «любым доступным портом», – SooDesuNe