[問題] 想請問socket傳檔好像最後一次沒有傳完 …

看板Programming作者 (why)時間13年前 (2011/03/23 08:57), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/2 (看更多)
※ [本文轉錄自 C_Sharp 看板 #1DY8buFT ] 作者: whywhywhy (why) 看板: C_Sharp 標題: [問題] 想請問socket傳檔好像最後一次沒有傳完整QQ 時間: Tue Mar 22 19:35:17 2011 想請問一下我利用socket傳圖片 但是最後好像都沒有傳完整 就是圖片最後面的部份都會是黑的 可是如果我在client傳完後就close socket的話就不會這樣 請問這是為什麼呢??? 另外再請問一下NetworkStream.read()是不是只有在client socket關閉後 才會return 0呢 還有請問有沒有比較好得方法可以在傳檔的時候可以知道檔案的類型呢以及檔名呢??? 是要在開一個socket來告訴server這些資料嗎??? 還是在傳之前告訴server??? 麻煩知道的大大可以教我 謝謝^^ 附上我傳檔的code精簡版~ server: NetworkStream ns=new NetworkStream(client);//client是accept後所得的socket FileStream file = new FileStream(@"C:\testS.jpg", FileMode.Create); BinaryWriter bw = new BinaryWriter(file); for (; ; ) { Byte[] accData = new byte[1024]; a = ns.Read(accData, 0, accData.Length); bw.Write(accData); if (a == 0) { bw.Close(); file.Close(); break; } } client: Byte[] accData = new byte[1024]; long a; FileStream fs = new FileStream(fileTextBox.Text, FileMode.Open); BinaryReader br = new BinaryReader(fs); for (; ; ) { a = br.Read(accData, 0, accData.Length); scComm.Send(accData);//scComm是clientconnect的socket if (a == 0) { br.Close(); fs.Close(); break; } } } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.113.87.188

03/22 21:56,
先傳檔案名稱跟大小, 加個分隔字, 後面接著檔案內容
03/22 21:56

03/22 21:59,
可以參考RFC1867的做法修改, 試做看看
03/22 21:59

03/23 08:47,
喔喔~那我在去研究一下~謝謝你唷^^
03/23 08:47
-- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.113.87.188
文章代碼(AID): #1DYKLdo1 (Programming)
文章代碼(AID): #1DYKLdo1 (Programming)