【问题标题】:UDP connection between client and server not loading on my Mac客户端和服务器之间的 UDP 连接未在我的 Mac 上加载
【发布时间】:2018-10-18 22:33:16
【问题描述】:

我使用 Mac 从 C 到 Xcode 编程。版本为 macOS Mojave 10.14。 我正在使用的代码有一个请求时间的客户端和一个回复给他通过 UDP 连接打印的当前时间的服务器。 我使用客户端 127.0.0.1 来启动客户端。 该代码在 linux 上完美运行,但在 Mac 上它只是开始加载并且永不停止。

这些是代码。

UDP 客户端 https://github.com/lufth/UDPClientServer/blob/master/clientUDP

UDP 服务器 https://github.com/lufth/UDPClientServer/blob/master/serverUDP

【问题讨论】:

  • 我遇到的一个问题是,如果机器根本没有连接到任何网络,UDP 代码通常不起作用。

标签: c macos


【解决方案1】:

在 Mac OS 中,有几个与 linux 机器不同的安全功能。也许您可以检查以确保您的程序不受这 2 个安全功能的阻碍

  • 代码签名
  • 沙盒

对于沙盒,您可以检查您的 UDP 客户端/服务器可执行文件是否正在尝试读取/写入超出其允许位置的位置。

或者,您也可以尝试以 root 身份运行您的服务器和客户端

sudo java client.java 1111

【讨论】:

  • 我用 sudo 试过了,但它不起作用,我该如何检查代码签名和沙箱?
【解决方案2】:

recvfromaddress_len 参数是一个输入/输出参数,但在您的服务器中,您正在传递一个指向未初始化变量 len 的指针。

(另外,给你的 C 源文件命名以 .c 结尾可能是个好主意。)

【讨论】:

  • 它们当然以 .c 结尾,这些不是我正在使用的文件,我只是复制/粘贴行代码。对不起,我应该上传直接文件。您所指的 len 是必需的原因是连衣裙 len(因此客户的地址 len)所在的位置
  • 我的意思是:你需要将len初始化为接收结构的大小之前调用recvfrom。然后recvfrom 会将其更改为实际存储的字节数。
  • ty,我是这样解决的。关键是,在 linux 上,该变量在第一次编译后自行初始化,而在 macOS 上则没有。
猜你喜欢
  • 1970-01-01
  • 2016-02-16
  • 2016-09-15
  • 1970-01-01
  • 1970-01-01
  • 2012-03-27
  • 2022-01-24
  • 1970-01-01
  • 2010-12-25
相关资源
最近更新 更多