我最近在学系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];
时,我发送文件就没有问题了,这到底是为什么呢?小弟新受,请各位大侠不吝赐教,谢谢!
比如,我要发送一个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];
时,我发送文件就没有问题了,这到底是为什么呢?小弟新受,请各位大侠不吝赐教,谢谢!
你得考虑一下
就算你把一大个资料都送出去 也是被分成一小个一小个的封包传送的
你的程序 client 也是透过 windows 的 buffer 把资料收过来
即然是透过网路和硬件,总难免会有失败或异常的情况
这些因素和状况应该都要列入考量
200M缓存装不下10M文件??
肯定是你程序上的错误,c#不会出这种低级错误一般发送网络数据,定义10来K的缓冲就可以了,分段发送的,到客户端再组合成文件了。