所以我正在为我的iphone编写一个应用程序,该应用程序通过AsyncSocket运行一个运行java应用程序的计算机。在java方面,它应该在iPhone连接到服务器时打印出“Ok”。我还在iphone端添加了一个sleep()命令,因此在连接到服务器后,它会发送一些数据,然后休眠5秒钟。但是,在java端,所有数据,包括“Ok”和数据都会在sleep命令之后打印出来。所以它就像iphone在程序执行结束后才连接。有人可以帮帮我吗?感谢...
答案 0 :(得分:1)
AsyncSocket意味着火上浇油。你不应该等待任何事情发生。本课程的目的是在后台完成它的工作,然后在完成后通知你 如果您需要阻塞套接字,那么您应该使用其他东西。
答案 1 :(得分:1)
您遇到此问题的原因是因为AsyncSocket在runloop上异步执行,但是当您调用sleep()时,您将阻止AsyncSocket尝试执行的runloop。
当您调用[asyncSocket connectToHost:...]时,该方法立即返回,并且连接尝试在后台继续。委托方法将通知您何时建立连接。但是完成设置连接的代码(在AsyncSocket中)也必须在runloop上运行。
同样,当您调用[asyncSocket writeData:...]时,该方法立即返回。发送此数据的代码计划在套接字的runloop上运行。但是如果你调用sleep(),就会阻止该代码运行。