【问题标题】:I can't get the client script to connect to the localhost server, the TCP connection never happens我无法让客户端脚本连接到 localhost 服务器,TCP 连接永远不会发生
【发布时间】:2020-02-27 05:40:51
【问题描述】:

我写了一个简单的客户端程序,使用它创建一个套接字

CFSteamCreatePairWithSocketToHost function

并连接到在端口 8080 上运行在本地主机上的服务器。它创建的套接字很好,但它从不连接到服务器。我用C写了服务器。它不起作用并给了我一个

kCFErrorDomainCFNetwork error 72000

唯一的中继信息是显然无法建立 TCP 连接,但不知道为什么。所以我也尝试用 C 编写客户端脚本并将其添加到我的 Swift 项目桥接头中,但它仍然无法连接。它可以很好地创建套接字,但无法连接到服务器,我不知道为什么。

但是当我使用 clang 编译并运行它时,相同的 C 客户端脚本可以工作,但是当我在 Xcode 中使用我的 swift 项目运行它时没有连接。我的 mac 是否阻止库建立 TCP 连接或其他什么?

我什至不知道要搜索什么。我发现的唯一一件事是一个名为 starscream 的 Github 库上的问题,它与我遇到的错误相同,我什至没有使用该库,并且那里的回复是“我们唯一能从这个错误中辨别出的是TCP 连接失败”。

这是我使用 Swift 4 连接到服务器的代码。服务器在 localhost 的 8080 端口上运行。

class client:NSObject {
      var inputstream = InputStream!
      var outputstream = OutputStream!

      func setupNetworkCom() {
          var readstream = Unmanaged<CFReadStream>?
          var writestream = Unmanaged<CFWriteStream>?

          CFStreamCreatePairWithSocketToHost(kCFAllocatorDefault, "localhost" as CFString, 8080, &readstream, &writestream)

          inputstream = readstream!.takeRetainedValue()
          outputstream = writestream!.takeReatainedValue()

          inputstream.schedule(in: .current, forMode: .common)
          outputstream.schedule(in: .current, forMode: .common)

          inputstream.open()
          outputstream.open()
      }
}

我也尝试将“localhost”替换为“127.0.0.1”,这是我为服务器指定的运行 IP,但仍然无法正常工作。

【问题讨论】:

    标签: swift macos sockets tcp


    【解决方案1】:

    单击您的项目设置并转到那里的功能,您将看到应用沙箱。确保它已打开,然后启用传入连接和传出连接。

    【讨论】:

      猜你喜欢
      • 2017-02-24
      • 1970-01-01
      • 2015-08-21
      • 2019-02-14
      • 2018-05-18
      • 1970-01-01
      • 2021-02-14
      • 2021-08-12
      • 2022-01-16
      相关资源
      最近更新 更多