我有一個問題。我已經閱讀了很多關於這個問題的stackoverflow的主題,但沒有任何幫助。 我想通過彗星連接實現客戶端 - 服務器通信。我有一個負責發送消息的實例和負責接收消息的實例。 進程如下: - 發送實例向服務器發送GET請求,服務器響應接收實例。 第一個調用工作正常,我得到第一個響應,可以獲取我需要的數據,但下一個請求不會讓我的didReceiveData回調觸發。但是我發現服務器已經發送了數據,我在服務器日誌中看到它,並且在客戶端機器的wireshark中看到它。一件有趣的事情是:在我將「content-length:0」添加到響應之前,第一個響應沒有讓我的回調觸發。未公開的NSUrlConnection功能?我應該考慮什麼讓NSUrlConnection認爲響應是有效的? 備選:力來從套接字的數據,但我不知道是否有可能與NSURLConnection的(男人也差不多了靜音)ios NSURLConnectionDataDelegate didReceiveData回調不叫
持久連接代碼:
NSURL* requestUrl = [NSURL URLWithString:[[NSString alloc] initWithUTF8String:rq->url.c_str()]];
NSMutableURLRequest* request = [NSMutableURLRequest requestWithURL:requestUrl cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:600];
m->connection = [[NSURLConnection alloc] initWithRequest:request delegate:request_delegate() startImmediately:NO];
[m->connection scheduleInRunLoop:[NSRunLoop mainRunLoop]
forMode:NSDefaultRunLoopMode];
[m->connection start];
解決的原因是:訣竅是 - 服務器需要標題部分「內容長度」設定爲大的東西,因爲客戶得到的數據包,並增加接收的字節數量和接收的字節頭設置的量之後 - 它不會採取任何更多的迴應。省略內容長度部分將阻止代表呼叫。這是原因。 –
這不是應該如何使用HTTP協議。這是一個請求響應協議。 NSURLConnection只能用於一個請求 - 響應操作。你在做什麼是非常毛茸茸的。我不會指望你的觀察。 – CouchDeveloper