看板Programming
标 题Re: [问题] 想请问socket传档好像最後一次没有传完 …
发信站HISDT 风禹科技验证有限公司 (Sun Apr 24 20:30:48 2011)
转信站ptt!news.ntu!ctu-gate!news.nctu!newsfeed.berkeley.edu!ucberkeley!newsg
因为你电脑执行速度跟网路传输速度是差到三个 order 以上~
预设缓冲区是 8kb 。
比如说你影印一本书,要一页页印,接收资料也是如此,送比较简单,直接写出去,系统会自动慢慢写。
收的瞬间如果只收到 300 bytes ,你就只读到 300 bytes ,所以必须透过回圈逐步收。
我比较偏向自订通讯协定,先传档案总长度,然後每次传送传偏移量及长度,这样将来还可以单档多线传输。
而透过回圈收的话,就可以明确判断收到多少,数量少了还可以要求重传。
在 1G 的区网下,我会把缓冲区放大到 512 kb ,这是可以算出来了,网路限制/每秒你处理能力,就可以设定缓冲区上限。
==> 本文由 "why <[email protected]>"
> 於 news:552PNN%2478Q%40ptt.cc 发表
> ※ [本文转录自 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;
> }
> }
>
> }
>
--
风禹科技验证有限公司 ASP.NET Web News Reader 0.2.9 UTF-8 Beta
网站地图
http://tlcheng.twbbs.org/wwwmap.htm
流域防洪/区域水资源/徐昇网/玫瑰图/语音通讯 文章与程式
Basic/Fortran/Windows API/.Net/辅助说明档 原始码、文章与讨论
微软程式设计、系统管理使用新技术论坛讨论区,网友回覆後即时简讯、电子邮件通知:
MSDN:
http://social.msdn.microsoft.com/Forums/zh-TW/categories/
TechNet:
http://social.technet.microsoft.com/Forums/zh-TW/categories/
--
ASPNET News Reader
http://tlcheng.twbbs.org/News/Reader.aspx
RSS 2.0
http://tlcheng.twbbs.org/News/rss2.aspx?Action=List&Newsgroup=tw.bbs.comp.language