2010-06-25 94 views
0

因此,我正在为我的iphone编写一个应用程序,该应用程序与使用AsyncSocket运行Java应用程序的计算机网络连接。在Java方面,当iPhone连接到服务器时,它应该打印出“OK”。我还在iphone端添加了一个sleep()命令,因此在连接到服务器后,它会发送一些数据,然后休眠5秒钟。但是,在Java方面,所有的数据,包括“OK”和数据都会在睡眠命令后被打印出来。所以它像iPhone一样,直到程序执行结束后才会连接。有人可以帮帮我吗?谢谢...AsyncSocket延迟

回答

1

AsyncSocket是为了消防和忘记。你不应该等待任何事情发生。本课程的全部目的是在后台完成它的任务,然后在完成后通知您。
如果你需要一个阻塞套接字,那么你应该使用别的东西。

1

你看到这个问题的原因是因为AsyncSocket在runloop上异步执行,但是当你调用sleep()时你阻塞了AsyncSocket试图执行的runloop。

当您调用[asyncSocket connectToHost:...]时,该方法立即返回并且连接尝试在后台继续。委托方法会在建立连接时通知您。但是完成建立连接的代码(在AsyncSocket中)也必须在runloop上运行。

同样,当你调用[asyncSocket writeData:...]时,该方法立即返回。发送这些数据的代码被安排在套接字的runloop上运行。但是,如果您调用sleep(),则会阻止该代码运行。