首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iOS UDP广播与PHP广播

iOS UDP广播与PHP广播
EN

Stack Overflow用户
提问于 2011-05-05 17:11:25
回答 2查看 3.3K关注 0票数 1

我正试图通过UDP将数据发送到网络。我在我的本地机器上运行了一些PHP代码,运行如下:

代码语言:javascript
复制
#!/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上获得相同的结果:

代码语言:javascript
复制
- (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 >宽幅

看上去基本上没问题,但由于某种原因没有到达Quartz作曲家,我想应该有IP地址或什么的,而不是“大写的”。

有什么想法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-05-06 07:53:43

问题不在于广播机构的实施,而在于字符串的格式。要使用Quartz Composer,每个字符都需要一个反斜杠-零组合:"\0\0\0",因此必须格式化"abc“并将其发送为”\0\0 A\0\0 b\0\0\0\0\C“。

另见塞尔索·马蒂尼奥( Celso Martinho)的博客文章:豹的石英作曲家与网络事件

票数 1
EN

Stack Overflow用户

发布于 2011-05-05 17:23:52

我建议使用AsyncSocket ( google,它在googlecode上),这是运行在iOS上的经过很好测试的objective代码。

这样,就可以使用NSData对象轻松地发送数据。AsyncSocket为您管理困难的部分。

如果这不是您的选择,您应该使用CFSocket。您要做的是实现已经为您编写的代码,CFSocket。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5901612

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档