UDP를 통해 네트워크로 데이터를 보내려고합니다.iOS UDP 브로드 캐스트와 PHP UDP 브로드 캐스트 비교
18 : 53 : 24.504447 IP 10.0.1.2.52919> 225.0.0.0
#!/usr/bin/php -q
<?php
$socket = stream_socket_client('udp://225.0.0.0:50000');
for($i=0;$i<strlen($argv[1]);$i++) $b.="\0\0\0".$argv[1][$i];
fwrite($socket,$b,strlen($argv[1])*4);
fclose($socket);
?>
내게는 tcpdump의 출력을 제공합니다 : I 작품 내 지역 컴퓨터에서 실행되는 일부 PHP 코드를 가지고 0.50000 : UDP, 길이 36
나는 다음과 같은 코드를 가진 원격 iOS에서 같은 결과를 얻으려고 :
- (void)broadcast:(NSString *)dx {
NSData* data=[dx dataUsingEncoding:NSUTF8StringEncoding];
NSLog(@"Broadcasting data: %@", dx);
int fd = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP);
struct sockaddr_in addr4client;
memset(&addr4client, 0, sizeof(addr4client));
addr4client.sin_len = sizeof(addr4client);
addr4client.sin_family = AF_INET;
addr4client.sin_port = htons(PORT);
addr4client.sin_addr.s_addr = htonl(INADDR_BROADCAST);
int yes = 1;
if (setsockopt(fd, SOL_SOCKET, SO_BROADCAST, (void *)&yes, sizeof(yes)) == -1) {
NSLog([NSString stringWithFormat:@"Failure to set broadcast! : %d", errno]);
}
char *toSend = (char *)[data bytes];
if (sendto(fd, toSend, [data length], 0, (struct sockaddr *)&addr4client, sizeof(addr4client)) == -1) {
NSLog([NSString stringWithFormat:@"Failure to send! : %d", errno]);
}
close(fd);
}
내게는 tcpdump에서 다음과 같은 출력을 제공3210
:
19 : UDP, 길이 9
기본적으로 확인을 보이지만 석영에 도착하지 : 01 : broadcasthost.50000이> 22.776192 IP 10.0.1.4.60643 작곡가는 어떤 이유로 IP 주소 나 'broadcasthost'대신에 무엇인가 있어야한다고 생각합니다.
아이디어가 있으십니까?
설명서의 "AsyncSocket 사용"부분이 비어있어 적절한 설명서를 찾을 수 없습니다. 이미 전송 코드를 작성 했으므로 사용시 이점이 있습니까? 나는이 방송보다 더 많은 것을 필요로하지 않는다. – Patrick
매우 사용하기 쉽습니다. 데이터를 생성하고 writeData를 호출하는 것 외에는 코드를 작성할 필요가 없습니다. yourData withTimeout : -1 –
감사합니다. 런타임 중에 오류가 발생하여 소켓을 사용하기 전에 코드를 사용했습니다. 다음 번에는 그것을 명심하십시오. – Patrick