我最近在学系Socket编程,我在做发送文件的功能
比如,我要发送一个10M的文件
我在服务端是这样写的
string filePath=@"c:\lin.doc";//定义个缓存区
byte[] bytes=new byte[1024*1024*200];//将要发送的文件读入到缓存区
using(FileStream fs=new FileStream(filePaht,FileMode.Read))
{
         int length=fs.Read(byte,0,(int)fs.Length);
         ......
}
我运行的时候报错了,当我设置byte[] bytes=new byte[1024*1024*200];
这么大的缓存区的时候报错:说系统缓存不足,为什么呢,难道我自己不能设置大一点缓存吗?我把缓存区改成byte[] bytes=new byte[1024*1024*100];
然后没有报
“说系统缓存不足,为什么呢,难道我自己不能设置大一点缓存吗?”这个错误,但是当我发送文件的时候,客户端那边接收不到,显示:客户端已经退出连接。当我把缓存区改成byte[] bytes=new byte[1024*1024*50];
时,我发送文件就没有问题了,这到底是为什么呢?小弟新受,请各位大侠不吝赐教,谢谢!

解决方案 »

  1.   

    一般来说网络程序要传送资料不会这麽一次大量传送
    你得考虑一下
    就算你把一大个资料都送出去 也是被分成一小个一小个的封包传送的
    你的程序 client 也是透过 windows 的 buffer 把资料收过来
    即然是透过网路和硬件,总难免会有失败或异常的情况
    这些因素和状况应该都要列入考量
      

  2.   

    200M缓存是太大了你之前说缓存不足!!
    200M缓存装不下10M文件??
    肯定是你程序上的错误,c#不会出这种低级错误一般发送网络数据,定义10来K的缓冲就可以了,分段发送的,到客户端再组合成文件了。