2011-03-01 96 views
0

我正在向遠程控制軟件發送數據。 我的問題是,當我發送一些內容並且不關閉inpuStream和outputStream時,應用程序處於凍結狀態。 (可能正在等待答案) 當我發送了一些信息並且之後關閉了inputStream和outputStream時,我無法收到答案,因爲通信對話框已關閉。使用流接收數據

我用這種方法創建一個流對。

CFReadStreamRef readStream; 
    CFWriteStreamRef writeStream; 
    CFStreamCreatePairWithSocketToHost(NULL, (CFStringRef)addr, port, &readStream, &writeStream); 

    NSInputStream *inputStream = (NSInputStream *)readStream; 
    NSOutputStream *outputStream = (NSOutputStream *)writeStream; 
    [inputStream setDelegate:self]; 
    [outputStream setDelegate:self]; 
    [inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode]; 
    [outputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode]; 
    [inputStream open]; 
    [outputStream open]; 

How can I solve this?

回答

0

你很可能需要你這樣做對方知道你寫完它後,只關閉輸出流,所以它會寫,你可以在輸入流中讀取數據。

+0

我嘗試過,但是當我只關閉輸出流時,應用程序凍結,我不收回數據。 比我關閉模擬器的TCP通信完成(Fin-> ACK ...)和另一方發送錯誤:「我不能發送答案」 – gbaor 2011-03-03 11:47:03

0

如果流:handleEvent:表示流已準備好獲取要發送的數據,則只能開始發送到輸出流。相反,如果您嘗試從沒有發出新字節的信號流讀取數據,則該數據也會被阻止。

我爲這種場景寫了DTBonjour。您可以獲得一個乾淨而簡單的API,用於通過WiFi連接或發佈服務。然後,您只需將NSObjects傳遞給連接,然後收件人收到解碼的對象。不能更容易使用:http://www.cocoanetics.com/2012/11/and-bonjour-to-you-too/