因此,我正在为我的 iphone 编写一个应用程序,该应用程序通过网络连接到我的计算机,该计算机使用 AsyncSocket 运行一个 java 应用程序。在 java 端,当 iPhone 连接到服务器时,它应该打印出“Ok”。我还在 iphone 端添加了一个 sleep() 命令,所以在它连接到服务器后,它会发送一些数据,然后休眠 5 秒。但是,在 java 端,所有数据,包括“Ok”和数据在 sleep 命令之后都被打印出来。所以它就像 iphone 直到程序执行结束后才连接。有人可以帮帮我吗?谢谢...
问问题
349 次
2 回答
1
您看到此问题的原因是因为 AsyncSocket 在 runloop 上异步执行,但是当您调用 sleep() 时,您会阻塞 AsyncSocket 尝试执行的 runloop。
当您调用 [asyncSocket connectToHost:...] 时,该方法会立即返回,并且连接尝试会在后台继续进行。委托方法将在建立连接时通知您。但是完成连接设置的代码(在 AsyncSocket 中)也必须在 runloop 上运行。
同样,当您调用 [asyncSocket writeData:...] 时,该方法会立即返回。发送此数据的代码被安排在套接字的 runloop 上运行。但是如果你调用 sleep() 你会阻止该代码运行。
于 2011-05-07T03:12:31.023 回答
1
AsyncSocket 意味着一劳永逸。你不应该等待任何事情发生。这个类的全部目的是在后台做它的事情,然后在它完成时通知你。
如果您需要阻塞套接字,那么您应该使用其他东西。
于 2010-06-25T14:16:13.390 回答