社区
C#
帖子详情
TCP socket 缓冲区溢出的问题
wangke_poul
2008-01-09 11:55:46
本人在做一个网络应用程序(c/s结构)
一个客户端向服务器发送数据,服务器把接受到的数据再转发到多个其他客户端
我用的是tcp协议同步阻塞模式,在转发小数据时候(小于200k)时客户端和服务器均运行正常
但一旦连续转发大数据时候,(2M左右)接受数据的客户端socket 就会报错
错误为:“缓冲区溢出或队列已满,无法进行套节字操作”。
有做过的朋友,请不吝赐教!多谢!!
...全文
1414
4
打赏
收藏
TCP socket 缓冲区溢出的问题
本人在做一个网络应用程序(c/s结构) 一个客户端向服务器发送数据,服务器把接受到的数据再转发到多个其他客户端 我用的是tcp协议同步阻塞模式,在转发小数据时候(小于200k)时客户端和服务器均运行正常 但一旦连续转发大数据时候,(2M左右)接受数据的客户端socket 就会报错 错误为:“缓冲区溢出或队列已满,无法进行套节字操作”。 有做过的朋友,请不吝赐教!多谢!!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
4 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
tsky0722
2008-01-16
打赏
举报
回复
顶下
wangke_poul
2008-01-16
打赏
举报
回复
问题解决
两个方法:
如下:
public int SendVarData(Socket s, byte[] data)
{
int total = 0;
int size = data.Length;
int dataleft = size;
int sent=0;
byte[] datasize = new byte[4];
datasize = BitConverter.GetBytes(size);
sent = s.Send(datasize,0,4,0);
while (total < size)
{
sent = s.Send(data, total, dataleft, SocketFlags.None);
// MessageBox.Show(sent.ToString());
total += sent;
dataleft -= sent;
}
return total;
}//发送函数
private byte[] ReceiveVarData(Socket s)
{
int total = 0;
int recv=0;
byte[] datasize = new byte[4];
recv = s.Receive(datasize, 0,4,0);
int size = 0;
size = BitConverter.ToInt32(datasize, 0);
int dataleft = size;
byte[] data = new byte[size];
while (total < size)
{
recv = s.Receive(data, total, dataleft, 0);
if (recv == 0)
{
data = Encoding.ASCII.GetBytes("exit ");
break;
}
total += recv;
dataleft -= recv;
}
return data;
}//接收信息函数
private static int SendData(Socket s, byte[] data)
{
int total = 0;
int size = data.Length;
int dataleft = size;
int sent;
while (total < size)
{
sent = s.Send(data, total, dataleft, SocketFlags.None);
total += sent;
dataleft -= sent;
}
return total;
}
private static byte[] ReceiveData(Socket s, int size)
{
int total = 0;
int dataleft = size;
byte[] data = new byte[size];
int recv;
while (total < size)
{
recv = s.Receive(data, total, dataleft, 0);
if (recv == 0)
{
data = Encoding.ASCII.GetBytes("exit");
break;
}
total += recv;
dataleft -= recv;
}
return data;
}
tsky0722
2008-01-15
打赏
举报
回复
LZ的问题估计是接收和发送缓冲区溢出了,可以通过socket.SendBufferSize和socket.ReceiveBufferSize进行设置。
我也有这个错误 不过问题不一样 我用的是异步
protected virtual void AcceptConn(IAsyncResult iar)
{
//如果服务器停止了服务,就不能再接收新的客户端
if (!_isRun)
{
return;
}
//接受一个客户端的连接请求
Socket oldserver = (Socket)iar.AsyncState;
Socket client = oldserver.EndAccept(iar);
//检查是否达到最大的允许的客户端数目
if (_clientCount == _maxClient)
{
//服务器已满,发出通知
if (ServerFull != null)
{
ServerFull(this, new NetEventArgs(new Session(client)));
}
}
else
{
Session newSession = new Session(client);
_sessionTable.Add(newSession.ID, newSession);
//客户端引用计数+1
_clientCount++;
//开始接受来自该客户端的数据
client.BeginReceive(_recvDataBuffer, 0, _recvDataBuffer.Length, SocketFlags.None,
new AsyncCallback(ReceiveData), client);
//新的客户段连接,发出通知
if (ClientConn != null)
{
ClientConn(this, new NetEventArgs(newSession));
}
}
//继续接受客户端
_svrSock.BeginAccept(new AsyncCallback(AcceptConn), _svrSock);
}
上面红色的话 在接收2500个连接后就会报错“系统缓冲区溢出或队列已满,无法进行套节字操作”
如果删了这句话可以接收至少10000个连接 不知道哪的错 希望有牛人帮忙解决下
wangke_poul
2008-01-09
打赏
举报
回复
就剩这点分了,我再想办法加!!
ActiveMQ之Mqtt的
TCP
丢包
本文针对ActiveMQ MQTT消费者接收消息数量少于预期的
问题
进行分析。通过对
TCP
信息的对比观察,发现与
socket
缓冲区溢出
相关的数值增加。通过调整系统级
TCP
缓冲区设置及ActiveMQ配置,增大
socket
接收缓冲区和程序内部缓冲区,有效解决了因缓冲区不足导致的消息丢失
问题
。
TCP
-retransmitted: 快速重传/超时重传的报文发送全过程
TCP
通过
tcp
_retransmit_skb确保可靠连接。新内核中,移除了
socket
内存限制条件,将其影响移到TSQ机制。这是因为TX中断可能导致ACK延迟,此时内存已释放。TSQ作为重传后的兜底机制,防止
socket
缓冲区溢出
,但可能持续处理
TCP
历史
问题
。
接收不到返回数据_搞了半天,终于弄懂了
TCP
Socket
数据的接收和发送,太难
本文深入解析Linux上
TCP
/IP栈的工作原理,重点介绍
TCP
Socket
的数据接收和发送,以及监听队列溢出的
问题
。当内核接收到数据包,会根据IP和端口找到对应的
TCP
连接,数据包复制到接收缓冲区,然后通过read或I/O多路复用系统调用唤醒进程。写入数据时,数据从用户缓冲区复制到内核的写入队列,再发送到网络。如果接收或写入队列满,可能会导致阻塞或丢失数据。监听队列溢出时,新连接会被拒绝,需要监控以避免
问题
。
Socket
编程中常见错误
本文探讨了在
Socket
编程中遇到的端口占用
问题
,通常由于
TCP
的TIME_WAIT状态导致,并提供了设置SO_REUSEADDR选项的解决方案。此外,文章还介绍了C语言编程中常见的
缓冲区溢出
问题
,建议避免使用不安全的字符串函数如strcpy和gets,并推荐使用fgets等安全替代方法。最后,提醒程序员注意避免此类陷阱以确保程序的安全稳定。
为什么你的音视频系统总崩溃?:从
Socket
缓冲区到拥塞控制的7个致命误区
本文深入分析音视频系统频繁崩溃的根本原因,涵盖
Socket
缓冲区溢出
、UDP/
TCP
协议选择失当、拥塞控制算法不适配等关键技术痛点。通过实测数据与架构图解,揭示资源竞争、网络抖动及硬件加速兼容性等
问题
,并提出动态缓冲区调整、零拷贝优化、自适应码率与多活容灾等高可用解决方案,助力构建稳定低延迟的实时通信系统。
C#
111,132
社区成员
642,541
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章