我用SOCKET接收文件,为什么会出现着错误:由于系统缓冲区空间不足或列队已满,不能执行套接字上的操作

问题描述

我用SOCKET接收文件,为什么会出现着错误:由于系统缓冲区空间不足或列队已满,不能执行套接字上的操作程序下,发送方:usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Text;usingSystem.Windows.Forms;usingSystem.Net.Sockets;usingSystem.IO;namespacesend{publicpartialclassForm1:Form{publicForm1(){InitializeComponent();}//发送privatevoidbutton1_Click(objectsender,EventArgse){Socketsocket=newSocket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);socket.Blocking=true;System.Net.IPEndPointipendpiont=newSystem.Net.IPEndPoint(System.Net.IPAddress.Parse("192.168.31.250"),8080);FileStreamfs=newFileStream(@"d:aa.txt",FileMode.OpenOrCreate,FileAccess.Read);byte[]bt=newbyte[fs.Length-1];BinaryReaderbr=newBinaryReader(fs);br.Read(bt,0,Convert.ToInt32(fs.Length)-1);socket.Connect(ipendpiont);//连接远程计算机socket.Send(bt);fs.Close();socket.Shutdown(SocketShutdown.Send);//'关闭发送连接socket.Close();//关闭本机socket}}}接收方:usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Text;usingSystem.Windows.Forms;usingSystem.Net.Sockets;usingSystem.IO;namespacerecv{publicpartialclassForm1:Form{Socketresocket=newSocket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);publicForm1(){InitializeComponent();}privatevoidbutton1_Click(objectsender,EventArgse){byte[]bb=newbyte[22988899000];Sockethostsock=resocket.Accept();//同意和发送端计算机建立连接hostsock.Receive(bb);if(hostsock.Receive(bb,bb.Length,0)>0.1){MessageBox.Show("yyyyy"+hostsock.Receive(bb));}FileStreamrefs=newFileStream(@"c:aa.txt",FileMode.OpenOrCreate);BinaryWriterbw=newBinaryWriter(refs);bw.Write(bb,0,bb.Length-1);refs.Close();hostsock.Shutdown(SocketShutdown.Receive);hostsock.Close();}privatevoidForm1_Load(objectsender,EventArgse){System.Net.IPEndPointhostip=newSystem.Net.IPEndPoint(System.Net.IPAddress.Parse("192.168.31.250"),8080);resocket.Bind(hostip);resocket.Listen(10000);}}}

解决方案

解决方案二:
在我的电脑--右键--属性--高级--性能--设置--高级--虚拟内存--更改--将“系统管理的大小”前面的小圆点选中,点确定就不会再出现你说的那种情况了!
解决方案三:
byte[]bb=newbyte[22988899000];//大约20G的内存空间啊?估计是这句出了为题,你问什么不循环接收呢??
解决方案四:
zzultc,怎么循环接收啊???
解决方案五:
你这个程序...........
解决方案六:
我这个程序是拷贝的,该怎么有用异步传输啊,各位谁做过,指点下
解决方案七:
beginreceiveendreceive和beginsendendsend来实现异步传输吧...

时间: 2024-09-10 20:10:37

我用SOCKET接收文件,为什么会出现着错误:由于系统缓冲区空间不足或列队已满,不能执行套接字上的操作的相关文章

SOCKET接收文件时反序列化出现分析完成之前就遇到流结尾!

问题描述 SOCKET接收文件时反序列化出现分析完成之前就遇到流结尾!是不是反序列化的时候流没有从头开始读?还是怎么回事? 解决方案 解决方案二:.......有人解释下吗?解决方案三:LZ要仔细检查自己的代码,看看是不是在传文件之前你就知道文件的长度,若是事先知道的话,看看自己的分析流的开头位置是不是发生了偏移.若事先不知道据传文件流的长度,那就只能判断是否到了流结束或者文件结束.要具体问题具体分析.解决方案四:该回复于2008-05-08 09:13:05被版主删除解决方案五:单步看看位置,

Linux下套接字详解(二)----套接字Socket

在前面我们讲了TCP/IP.TCP和UDP的一些基本知识,但是协议只有一套,而我们系统多个TCP连接或多个应用程序进程必须通过同一个 TCP协议端口传输数据.为了区别不同的应用程序进程和连接,许多计算机操作系统为应用程序与TCP/IP协议交互提供了称为套接字(Socket)的接口. 套接口可以说是网络编程中一个非常重要的概念,linux以文件的形式实现套接口,与套接口相应的文件属于sockfs特殊文件系统,创建一个套接口就是在sockfs中创建一个特殊文件,并建立起为实现套接口功能的相关数据结构

iOS - Socket 网络套接字

1.Socket 套接字 所谓 Socket,通常称为 "套接字",网络应用程序通过套接字向网络发送请求或者应答网络请求.Socket 通常用于描述 IP 地址和端口,是应⽤层与 TCP/IP 协议族通信的中间软件抽象层,它是一组接口,是一个通信链的句柄,可以用来实现不同虚拟机或者不同计算机之间的通信.在设计模式中,Socket 其实就是一个门面模式,它把复杂的 TCP/IP 协议族隐藏在 Socket 接⼝后面. Socket 起源于 Unix,而 Unix/Linux 基本哲学之一

Mysql保护或更改套接字文件/tmp/mysql.sock

对于服务器用来与本地客户端进行通信的Unix套接字文件,其默认位置是/tmp/MySQL.sock.这有可能 导致问题,原因在于,在某些版本的Unix上,任何人都能删除/tmp目录下的文件. 在大多数Unix版本中,可对/tmp目录进行保护,使得文件只能被其所有这或超级用户(根用户)删除 .为此,以根用户身份登录,并使用下述命令在/tmp目录上设置粘着位: shell> chmod +t /tmp 通过执行ls -ld /tmp,可检查是否设置了粘着位.如果最后一个许可字符是"t"

Socket网络编程学习笔记(3):利用套接字助手类

在上一篇中已经介绍了利用Socket建立服务端和客户端进行通信,如果需要 的朋友可访问<Socket网络编程学习笔记(2):面向连接的Socket>.在本篇 中,将利用C#套接字的助手类来简化Socket编程,使得刚刚接触到网络编程的 朋友们更容易上手. 跟上篇一样,通过C#套接字的助手类来编程同样分 服务端和客户端. 一.服务端侦听模式 1.创建套接字与 IPEndPoint绑定,并设置为侦听模式. 1//创建IPEndPoint实例 2 IPEndPoint ipep = new IPEn

[python] 专题七.网络编程之套接字Socket、TCP和UDP通信实例

        很早以前研究过C#和C++的网络通信,参考我的文章:                  C#网络编程之Tcp实现客户端和服务器聊天                 C#网络编程之套接字编程基础知识                 C#网络编程之使用Socket类Send.Receive方法的同步通讯        Python网络编程也类似.同时最近找工作笔试面试考察Socket套接字.TCP\UDP区别比较多,所以这篇文章主要精简了<Python核心编程(第二版)>第16章内

网络子系统77_套接字接收

// accept系统调用 // 步骤: // 1.由内核公共部分创建一个新套接字描述符,并分配其对应的文件描述符 // 2.新套接字使用accept之上的套接字相同的套接字类型和操作 // 3.交由具体协议完成accept // 4.如果accept调用者要求返回peer地址,通过新套接字获取地址,并复制到用户地址空间 // 5.将新套接字的文件描述安装到调用者的进程控制块,返回新套接字的用户空间文件描述符 1.1 SYSCALL_DEFINE4(accept4, int, fd, struc

U盘复制文件时出现磁盘空间已满的解决方法

  今天小编遇到一件事情很让人头疼,早上借了个空间足够的U盘去拷贝文件,但是插到电脑里的时候,却显示U盘空间不足,这让人很是疑惑,明明是空间足够的U盘,为什么一插到电脑中就会显示空间不足或者磁盘已满的现象呢?这让小编怀疑到底是磁盘坏了呢还是电脑的原因呢?不仅影响了工作效率,也出现了信任危机.所以小编把自己的经验分享给大家,希望大家不要出现这样的问题. 原因分析: 1.u盘文件系统类型格式所引起的问题,fat32单一文件不得大于4g,而应改为ntfs或者exFAT类型格式. 2.磁盘根目录文件数超

《UNIX网络编程 卷1:套接字联网API(第3版)》——8.8 验证接收到的响应

8.8 验证接收到的响应 在8.6节结尾我们提到,知道客户临时端口号的任何进程都可往客户发送数据报,而且这些数据报会与正常的服务器应答混杂.我们的解决办法是修改图8-8中的recvfrom调用以返回数据报发送者的IP地址和端口号,保留来自数据报所发往服务器的应答,而忽略任何其他数据报.然而这样做照样存在一些缺陷,我们马上就会看到. 我们首先把客户程序的main函数(图8-7)改为使用标准回射服务器(图2-13).这只需把以下赋值语句 servaddr.sin_port = htons(SERV_