[問題] send和recv做資料傳檔,會失敗?!

看板C_and_CPP作者 (Terry)時間14年前 (2011/05/30 04:36), 編輯推噓5(5015)
留言20則, 3人參與, 最新討論串1/2 (看更多)
請教一下... 我的電腦是vista VC++2008寫的程式 我用一個sned和recv寫一個傳檔的程式(UDP) 一個是client,一個是server 這兩個程式我先在自已的電腦上測試 看能不能傳檔 但是很奇怪的是... 資料就是會沒有接收完整....不然就是沒收到資料 照理說,在自已的電腦上做測試的話,應該只是把資料丟到記憶體 在從記憶體丟出來,也就是所謂的MEMORY COPY的動作 為什麼這樣子也會失敗.... 但是在WIN7或是XP的平台上就沒這個問題 不知道有沒有朋友遇到相同的經驗可以分享一下 謝謝幫忙 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.34.100.113 ※ 編輯: bernachom 來自: 114.34.100.113 (05/30 04:40)

05/30 08:43, , 1F
傳太快每個封包間要sleep一下
05/30 08:43, 1F

05/30 14:19, , 2F
所以做MEMORY COPY也會有傳太快LOSS資料的問題嗎??
05/30 14:19, 2F

05/30 14:59, , 3F
UDP 是 unreliable,所以在 buffer 不夠大的時候
05/30 14:59, 3F

05/30 14:59, , 4F
OS 可以合法地丟棄封包
05/30 14:59, 4F

05/30 15:03, , 5F
請教一下,這邊的buffer是指什麼的buffer呢??
05/30 15:03, 5F

05/30 15:29, , 6F
就如你說的「只是把資料丟到記憶體」的那個記憶體
05/30 15:29, 6F

05/30 15:33, , 7F
請不要以為sleep或是調大buffer之類的方法可以解決
05/30 15:33, 7F

05/30 15:33, , 8F
真實的網路有太多因素會造成packet loss 正確解法是TCP
05/30 15:33, 8F

05/30 15:33, , 9F
或是自己實作reliable protocol
05/30 15:33, 9F

05/30 16:04, , 10F
我知道對外連線的話,需要TCP才是最好的
05/30 16:04, 10F

05/30 16:05, , 11F
只是我在自已的電腦放CLIENT和SERVER互連
05/30 16:05, 11F

05/30 16:05, , 12F
做MEMORY COPY也會失敗..才想說能不能調大BUFFER@@
05/30 16:05, 12F

05/30 16:11, , 13F
如果都在同一台電腦,用IPC就好了,又快又reliable
05/30 16:11, 13F

05/30 16:12, , 14F
開個pipe即可,寫起來也比UDP簡單
05/30 16:12, 14F

05/30 16:14, , 15F
應該是說我最主要的目的是對外用upd連線傳檔
05/30 16:14, 15F

05/30 16:14, , 16F
然後先在自已電腦做測試@@
05/30 16:14, 16F

05/30 17:33, , 17F
那你應該用TCP才對啊...就算你可以調大buffer
05/30 17:33, 17F

05/30 17:34, , 18F
對外的傳輸還是會掉封包,這樣你的測試不就沒意義了
05/30 17:34, 18F

05/30 17:37, , 19F
可以請教一下,對於這個BUFFER的部份該如何調大呢??
05/30 17:37, 19F

05/30 17:38, , 20F
然後會用UDP...其實第一是因為實驗需要..第二是簡單@@
05/30 17:38, 20F
文章代碼(AID): #1Dugvciq (C_and_CPP)
文章代碼(AID): #1Dugvciq (C_and_CPP)