因此,我正在为我的iphone编写一个应用程序,该应用程序通过AsyncSocket连接到运行java应用程序的计算机。在Java端,当iPhone连接到服务器时,它应该输出"Ok“。我还向iPhone端添加了一个sleep()命令,因此在它连接到服务器之后,它会发送一些数据,然后休眠5秒钟。但是,在java端,所有的数据,包括"Ok“和数据都会在sleep命令之后打印出来。所以这就像是iphone直到程序执行结束后才能连接。有人能帮帮我吗?谢谢..。
发布于 2010-06-25 22:16:13
AsyncSocket意味着可以被点燃,然后被遗忘。你不应该等待任何事情发生。这个类的全部目的是在后台做它的事情,然后在它完成时通知你。
如果你需要一个阻塞套接字,那么你应该使用其他的东西。
发布于 2011-05-07 11:12:31
您看到这个问题的原因是因为睡眠在运行循环上异步执行,但是当您调用AsyncSocket ()时,您正在阻塞AsyncSocket试图在其上执行的运行循环。
当您调用asyncSocket connectToHost:...时,该方法立即返回,并且连接尝试在后台继续。当连接建立时,委托方法将通知您。但是完成连接设置的代码(在AsyncSocket中)也必须在运行循环上运行。
类似地,当您调用asyncSocket writeData:...时,该方法立即返回。发送此数据的代码被安排在套接字的runloop上运行。但是,如果调用sleep(),就会阻止该代码运行。
https://stackoverflow.com/questions/3116265
复制相似问题