iphone problem receiving UDP packets
Posted
by SooDesuNe
on Stack Overflow
See other posts from Stack Overflow
or by SooDesuNe
Published on 2009-11-23T08:01:53Z
Indexed on
2010/06/11
18:02 UTC
Read the original article
Hit count: 279
I'm using sendto()
and recvfrom()
to send some simple packets via UDP over WiFI.
I've tried using two phones, and a simulator, the results I'm getting are:
Packets sent from phones -> recieved by simulator Packets sent from simulator -> simulator recvfrom remains blocking. Packets sent from phones -> other phone recvfrom remains blocking.
I'm not sure how to start debugging this one, since the simulator/mac is able to receive the the packets, but the phones don't appear to be getting the message.
A slight aside, do I need to keep my packets below the MTU for my network? Or is fragmentation handled by the OS or some other lower level software?
UPDATE: I forgot to include the packet size and structure. I'm transmitting:
typedef struct PacketForTransmission {
int32_t packetTypeIdentifier;
char data[64]; // size to fit my biggest struct
} PacketForTransmission;
of which the char data[64] is:
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;
sending packet is like:
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);
and recieving packets is like:
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
}
© Stack Overflow or respective owner