连接错误System.Net.Sockets.SocketException:由于系统缓冲区空间不足或列队已满,不能执行套接字上的操作
来源:互联网 发布:短信发送软件下载 编辑:程序博客网 时间:2024/04/24 05:32
使用Socket通信方式上传大文件遇到的问题,60M上传没有问题,超过60M报这个错误,是因为一般通信都是小数据量的,但如果是上传文件,那一般都是大数据量的,所以发送和接收数据的方式也有一定的不同
using System.Net;
using System.Net.Sockets;
using System.IO;
using System.Text;
namespace socketServer
{
public static class FileSender
{
private const int BufferSize = 1024;
public static void Send(IPEndPoint ip, string path)
{
Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
sock.Connect(ip);
using (FileStream reader = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.None))
{
long send = 0L, length = reader.Length;
sock.Send(BitConverter.GetBytes(length));
string fileName = Path.GetFileName(path);
sock.Send(Encoding.Default.GetBytes(fileName));
Console.WriteLine("Sending file:" + fileName + ".Plz wait...");
byte[] buffer = new byte[BufferSize];
int read, sent;
//断点发送 在这里判断设置reader.Position即可
while ((read = reader.Read(buffer, 0, BufferSize)) != 0)
{
sent = 0;
while ((sent += sock.Send(buffer, sent, read, SocketFlags.None)) < read)
{
send += (long)sent;
//Console.WriteLine("Sent " + send + "/" + length + ".");//进度
}
}
Console.WriteLine("Send finish.");
}
}
public static void Receive(IPEndPoint ip, string path)
{
Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
sock.Bind(ip);
sock.Listen(1);
Socket client = sock.Accept();
byte[] buffer = new byte[BufferSize];
client.Receive(buffer);
long receive = 0L;
long length = BitConverter.ToInt64(buffer, 0);
string fileName = Encoding.Default.GetString(buffer, 0, client.Receive(buffer));
Console.WriteLine("Receiveing file:" + fileName + ".Plz wait...");
using (FileStream writer = new FileStream(Path.Combine(path, fileName), FileMode.Create, FileAccess.Write, FileShare.None))
{
int received;
//断点接受 在这里判断设置writer.Position即可
while (receive < length)
{
received = client.Receive(buffer);
writer.Write(buffer, 0, received);
writer.Flush();
receive += (long)received;
//Console.WriteLine("Received " + receive + "/" + length + ".");//进度
}
}
Console.WriteLine("Receive finish.");
}
}
}
解决使用资源:http://bbs.csdn.net/topics/340085446
- 连接错误System.Net.Sockets.SocketException:由于系统缓冲区空间不足或列队已满,不能执行套接字上的操作
- 由于系统缓冲区空间不足或列队已满,不能执行套接字上的操作。
- 由于系统缓冲区空间不足或队列已满,不能执行套接字上的操作
- 由于系统缓冲区空间不足或队列已满,不能执行套接字上的操作
- 由于系统缓冲区空间不足或队列已满,不能执行套接字上的操作的解决方法
- 由于系统缓冲区空间不足或队列已满,不能执行套接字上的操作的解决方法
- 由于系统缓冲区空间不足或队列已满,不能执行套接字上的操作--解决方法
- 由于系统缓冲区空间不足或队列已满,不能执行套接字上的操作(MaxUserPort,TcpTimedWaitDelay)
- SQL Server 由于系统缓冲区空间不足或队列已满,不能执行套接字上的操作
- WCF NetTcpBinding 由于系统缓冲区空间不足或队列已满,不能执行套接字上的操作
- 代码访问 SQL Server数据库时的错误: 由于系统缓冲区空间不足或队列已满,不能执行套接字上的操作
- SQL Server数据库时的错误:由于系统缓冲区空间不足或队列已满,不能执行套接字上的操作
- windows 部署Mongodb时,报由于系统缓冲区空间不足或队列已满,不能执行套接字上的操作。 错误
- windos 下 IIS报错: 由于系统缓冲区空间不足或队列已满,不能执行套接字上的操作的解决方法
- socket connect error :0x00002747,由于系统缓冲区空间不足或队列已满,不能执行套接字上的操作
- 批量导数据的时候抛异常(由于系统缓冲区空间不足或队列已满,不能执行套接字上的操)
- 由于系统缓冲区空间不足或队列已满,不能执
- utorrent红种:由于系统缓冲区空间不足或者队列已满...
- Openfire 抓取packet
- Oracle 函数 Translate 的用法
- UEditor使用快捷键
- easyui Layout 自动适应窗口大小
- Linux下查看CPU信息、机器型号等硬件信息命令
- 连接错误System.Net.Sockets.SocketException:由于系统缓冲区空间不足或列队已满,不能执行套接字上的操作
- Ext文本输入框:Ext.form.TextField属性汇总
- OCX的调试
- STOP BEING AFRAID OF FAILURE - The One Lesson Every Entrepreneur Should Learn
- linux程序与资源管理常用指令
- (转)Android游戏开发之绘制游戏主菜单与进度条加载进度(十三)
- 看代码的感悟
- JavaScript 学习笔记(二)setTimeout、setInterval、innerHTML、innerText、outerHTML
- eclipse PermGen space错误解决方法