|
藍森林 http://www.lslnet.com 2006年6月6日 10:18
關於TCP網絡通信的問題
TCP客戶端向TCP服務器端成功發送完數據後如果立即關閉客戶端連接,服務器端可否完整的收到剛才所發送的所有數據?
謝謝! |
關於TCP網絡通信的問題
這個沒辦法確定吧?我覺得最好在tcp客戶端在收到確認後關閉。 |
關於TCP網絡通信的問題
可是我的TCP客戶端已經提示發送成功了呀!
這是否可以說明數據已經成功發送到了服務器端的TCP接收緩衝區,那TCP服務端就應該接收到才對呀!
請提提意見!
謝謝! |
關於TCP網絡通信的問題
服務端在收到後再關閉!
這樣就沒有問題了! |
關於TCP網絡通信的問題
我有點不明白你的發送成功是根據什麼判斷的。我的理解是,客戶端發送(sendto??)後,根據要發送的長度和已發送的長度進行比較,如果一致就認為是成功,我覺得好像這樣不太妥當,不知道你是怎麼理解的。
如果是我的話,我會在服務器端讓它返回一個確認信號,然後再讓客戶端退出,^_^。 |
關於TCP網絡通信的問題
謝謝各位!
在下已經弄清楚是怎麼回事了!
原來不能將SOCKET的SO_LINGER屬性設置成如下模式:
struct linger linger;
linger.l_onoff = 1;
linger.l_linger = 0;
setsockopt(devid, SOL_SOCKET, SO_LINGER, (char *)&linger,sizeof(linger));
這樣設置正好將關閉模式設置成了「強行關閉」模式,所以產生了我剛才說的問題。改成「從容關閉」模式就解決了我剛才的問題!
再次感謝大家! |
關於TCP網絡通信的問題
TCP客戶端向TCP服務器端成功發送完數據後如果立即關閉客戶端連接,服務器端可否完整的收到剛才所發送的所有數據?
服務端可以完整的接受到數據。 |
關於TCP網絡通信的問題
沒錯,可以完整接收數據。這是tcp協議決定的。
進程關閉操作要等到發送完發送緩衝中的數據才發送四分組終止序列,並且接收緩衝區的數據被丟棄。 |
| |