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

Filed under:
|
|

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

Related posts about iphone

Related posts about udp