簡體   English   中英

與iphone中的NSURLConnection進行HTTP連接

[英]HTTP connection with NSURLConnection in iphone

非常感謝您的回復。 我被困在這里。 你能幫忙解決這個問題嗎? CFHTTPStream可以解決這個問題嗎? 還有其他方法可以解決這個問題嗎? 謝謝。

嗨,

我正在使用NSURLConnection連接到HTTP URL。 我應該在一段時間間隔后得到響應(響應沒有從服務器關閉)。 是否可以在編寫時閱讀那些響應的內容,就像在java中的http url連接的輸入流上有無限的while循環一樣。 didReceiveData方法沒有被調用。

將其視為http推送,其中響應將根據其在服務器上的可用性進行寫入。

我應該能夠連接到服務器並保持連接,直到我沒有關閉連接。

感謝幫助。

我也用這個撞到了牆上,但我找到了一個解決方案:

NSURLConnection似乎確實緩沖了數據,但您可以通過在響應頭中設置內容類型來欺騙它。 例如,通過將內容類型設置為"text/json" ,我可以在響應中僅從服務器發送幾個字節,而不關閉流,並獲取didReceiveData回調方法來為我提供數據。

在此之前,我必須以4k左右的時間填充我的回復才能進行回調。

NSURLConnection並沒有永久保持連接; 它有一個超時,如果在該超時內沒有收到數據,它會再次關閉連接。

didReceiveData僅在實際可用數據時被調用 - 如果您發送請求並且沒有任何內容從服務器返回,因為當前沒有可用的數據,則預計它不會被調用,不是嗎?

是否調用了connectionDidFinishLoading方法? 如果它被調用,我猜NSURLConnection正在等待數據一段時間,並且由於沒有數據到達,它停止了 - 因為這個方法應該在NSURLConnection完成后一直被調用,無論它是否成功。

NSURLConnection基於NSURLRequest,在創建NSURLRequest時,您可以手動設置超時。 嘗試設置一個非常大的超時。 超時以秒為單位(允許幾分之一秒,它是浮點數),因此嘗試將28800.0設置為超時,即8小時,並查看連接現在是否保持打開足夠長時間以便調用didReciveData。

還請注意,NSURLConnection不知道數據的開始位置和數據結束的位置,因此它可能會多次調用didReceiveData來發送單個數據,並且您的應用程序需要重新匯編收到的數據本身,並且必須知道是一個完整的數據塊,准備好進行處理,或者它是否必須等待另一個didReceiveData回調中的更多數據。

更新

NSURLConnection不保證在數據到達時立即傳送數據。 如果它接收到一些數據並且仍有空間來緩存更多數據,它將繼續等待更多數據並將數據聚合到一個塊中,最后立即交付整個塊。 這就是你的倒數計時器不起作用的原因。 它確實提供所有倒計時數據,但它在倒計時結束后這樣做,因為所有小倒計時更新完全適合單個塊,並且HTTP頭的MIME類型進一步宣布許多小塊正在跟隨。 為避免在必要時更頻繁地調用方法委托,NSURLConnection會在內部緩存回復內容,只要它仍有空間可以執行此操作。

我不確定你是否可以做你想要做的NSURLConnection。 我個人寧願使用真正的套接字連接 - 但我不知道這是否可以在iPhone上。

如果對您有任何安慰,您在此處發布的URL在Firefox中運行良好,但在Safari 4中不起作用(Safari 4僅在結束時顯示圖像,而不是倒計時)。 因此,您在這里獲得的行為與您在Safari中獲得的行為相同。

謝謝您的回復。 但我想澄清一些事情......我可以看到從服務器寫的數據,但我的didReceiveData方法沒有被調用。 此外,不會調用connectionDidFinishLoading。 代表設置正確。 我想舉個例子。 我如何讀取此示例(url)發送的響應。[我的應用程序需要相同的功能。] http://www.servlets.com/jservlet2/examples/ch06/servlet/Countdown它發送響應,如10,9,8 ,7,6 ......然后是一張圖片。 我們可以看到這是瀏覽器。 但是當我嘗試連接代碼並獲得響應時,我只有在倒計時結束時才會得到響應,而且數據也非常大(我認為圖像數據)。 如何發送以前的小回復?

感謝幫助。

根據您的描述, 套接字將更適合您的需求。 不幸的是我沒有在iphone上做任何套接字編程所以我不能提供任何參考,但我相信ios有一些庫可以提供幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM