Я пытаюсь отправить данные через UDP в сеть.У меня есть некоторый PHP-код, работающий на моей локальной машине, которая работает:
#!/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:
18: 53: 24.504447 IP 10.0.1.2.52919> 225.0.0.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:
19: 01: 22.776192 IP 10.0.1.4.60643> broadcasthost.50000: UDP, длина 9
Выглядит нормально,но почему-то не приходит в Quartz Composer, я думаю, что вместо 'broadcasthost' должен быть указан IP-адрес или что-то в этом роде.
Есть идеи?