[英]Send more than 32768 Bytes at once from one TCP-Socket to an other
大家好,我不知道是否已經問過這個問題,但請想象以下情況:
我有兩個TCP套接字(使用NSSocketPort
打開,並使用兩個NSFileHandle
監聽),現在我想在它們之間發送一些NSData
。
@try {
[fileHandle writeData:data];
}
@catch (NSException * e) {
// Do some alert
}
一切正常,直到我要發送長度超過32768字節的NSData
實例為止。 超過此字節數的字節將不會被傳輸。 所以這是我的問題:
1)為什么可可不能一次發送超過32768字節?
2)我必須采取解決方法嗎?
3)如果是,我將拆分數據,但是您將如何處理? 另一個套接字如何知道何時發送所有數據?
順便說一句,在發送此單個NSData
實例后,應再次關閉兩個套接字。
您的問題不在於Cocoa,而似乎是對流套接字的概念性誤解。
TCP是流協議。 單獨寫入的邊界將不會保留。
如果發送32768字節,則接收端應做好准備,使readData(或任何它所謂的)返回從單個字節到32768字節的任何位置。 如果少於32768字節,則應再次閱讀以獲取其余部分。 也許不是所有其他內容,您都必須再次閱讀。 由您決定網絡協議,以便接收端知道何時獲取所有數據。 例如,通過為數據加上長度作為前綴。
如果writeData發送的數據少於您要求發送的數據,請再次使用其余數據調用writeData。 並為此做好准備,以使發送的郵件數量少於您的要求。
一次發送的數據量取決於基礎框架和庫使用的緩沖區大小。 盡管它是可配置的,但基本上無關緊要。 TCP的優點是它可以保證以一個或多個數據包的形式傳遞數據,也可以正常地失敗。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.