WiFI를 통해 UDP를 통해 간단한 패킷을 보내려면 sendto()
과 recvfrom()
을 사용하고 있습니다.iphone 문제가 UDP 패킷을 받고 있습니다.
가 나는 두 개의 전화, 시뮬레이터를 사용하여 시도했다, 내가지고있어 결과는 다음과 같습니다 전화에서 전송
패킷 -> 시뮬레이터 시뮬레이터에서 보낸 패킷에 의해 받았다 -> 시뮬레이터에 recvfrom 차단 상태를 유지합니다. 휴대 전화에서 보낸 패킷 -> 다른 전화 recvfrom은 계속 차단됩니다.
시뮬레이터/맥이 패킷을 수신 할 수 있기 때문에 디버깅을 시작하는 방법을 모르지만 전화가 메시지를 받고있는 것처럼 보이지 않습니다.
약간의 차이는 있지만 내 네트워크의 MTU 아래로 패킷을 유지해야합니까? 또는 OS 또는 일부 다른 하위 소프트웨어에서 단편화를 처리합니까?
업데이트 : 패킷 크기 및 구조를 포함하는 것을 잊었습니다. I는 송신있어 :
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