基本客户端/服务器示例代码适用于iOS模拟器,但不适用于设备

时间:2012-03-22 05:37:02

标签: ios debugging sockets networking client-server

我正在通过Beej's socket tutorial。使用示例代码,我创建了一个简单的服务器iOS应用程序和一个在桌面上运行的简单客户端。

当我在iOS模拟器上运行服务器时,一切正常。从OS X终端,我向服务器发出请求并收到预期的Hello, world!响应:

$ g++ client.cpp
  ./a.out localhost
  client: connecting to 127.0.0.1
  client: received numbytes 13
  client: received 'Hello, world!'

然而,当我在设备上运行服务器应用程序时,我收到一个奇怪的回应:

$ ./a.out 192.168.1.2
  client: connecting to 192.168.1.2
  client: received numbytes 0
  client: received ''

我修改了示例代码,将所有错误都打印到控制台。不幸的是,我在模拟器或设备上运行时没有看到任何错误。

我是网络编程的新手。也许我的无线路由器阻止发送字节? 非常感谢任何调试提示。

我也尝试使用telnet与设备和模拟器通信:

$ telnet 192.168.1.2 3490
  Trying 192.168.1.2...
  Connected to 192.168.1.2.
  Escape character is '^]'.
  Connection closed by foreign host.

$ telnet localhost 3490
  Trying 127.0.0.1...
  Connected to localhost.
  Escape character is '^]'.
  Hello, world!Connection closed by foreign host.

看似相似的结果(在模拟器上运行会在设备上运行时返回预期结果)。

1 个答案:

答案 0 :(得分:0)

打印发送的字节数有帮助。它强调了send()未被调用的事实。注释if (!fork()) {检查会导致按预期发送和接收字节。现在要了解上述检查的目的以及为什么它会在模拟器和设备上返回不同的结果。