0
我使用sendto()
和recvfrom()
通過WiFI發送一些簡單的數據包通過UDP。iphone問題接收UDP數據包
我使用兩部手機,以及一個模擬器試過,我得到的結果是:
數據包從手機發送 - >通過模擬器 報文發送模擬器收到 - >模擬器recvfrom的仍然封鎖。 從手機發送的數據包 - >其他手機recvfrom仍然阻塞。
我不知道如何開始調試這一個,因爲模擬器/ MAC能夠接收數據包,但手機似乎沒有得到消息。
稍微放一邊,我需要保持我的數據包低於我的網絡的MTU?還是由操作系統或其他一些較低級別的軟件處理碎片?
更新: 我忘了包括數據包大小和結構。我發送:
typedef struct PacketForTransmission {
int32_t packetTypeIdentifier;
char data[64]; // size to fit my biggest struct
} PacketForTransmission;
其中char數據[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);
和recieving分組是這樣的:
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