2012-05-20 129 views
2

我目前正在開發一個iOS應用程序,它使用CFStream與C#服務器進行通信。通過這個連接發送1個TCP數據包就是它應該做的。但是,如果我嘗試發送兩個數據包,它們都會失敗。iOS連續TCP請求失敗

服務器被設計爲異步像一個here。 iOS端使用CFStream類進行設計,如this教程中所述。

爲什麼會發生這種情況,我該如何解決?所有幫助非常感謝!

編輯:我剛纔想用一個Python服務器替換C#服務器,該系統完美地工作,這將暗示,這個問題是服務器端。可能服務器在收到第一個數據包後意外關閉連接?

+0

我想第一步是確定問題出在哪裏。它在服務器還是客戶端?例如:你可以通過telnet將幾條消息發送到服務器嗎? –

+0

這可能是客戶端。服務器端命令行告訴我,它只接收第一個TCP數據包,它甚至沒有得到第二個。遠程登錄測試顯示服務器工作正常。 – danielmhanover

+0

你可以嘗試綁定發送功能到一些額外的按鈕。你能以這種方式發送多個數據包嗎?我問,因爲我認爲你正在嘗試發送第二個數據包,而第一個數據包仍在發送,因此以發送緩衝區的損壞結束。 –

回答

0

原來的服務器被設置爲關閉連接它發送的信息,它的第一個數據包發送到客戶端後。解決的辦法是在ReadCallback()方法增加一個

handler.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0, 
     new AsyncCallback(ReadCallback), state); 

,以確保它將恢復處理其請求之後偵聽到客戶端。

1

開始搞清楚肯定誰是關閉TCP套接字。在服務器上運行Wireshark以檢查誰在該連接中發送FIN或RST。這將把問題分解成一半。

+0

我剛剛發現它是服務器。我仔細看MSDN的例子,事實證明服務器收到消息後立即關閉連接。我將很快發佈解決方案代碼 – danielmhanover