基本的客户端/服务器示例代码在iOS模拟器中工作,但不在设备上

问题描述:

我正在通过Beej's socket tutorial工作。使用示例代码,我创建了一个简单的服务器iOS应用程序和一个运行在我的桌面上的简单客户端。基本的客户端/服务器示例代码在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. 

看似相似的结果(在模拟器上运行,则返回了预期的效果,而在设备上运行返回任何内容)。

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