===>使用setsockopt改变发送和接收的BUF,结果程序发送和接收受影响很大...
时间:2011-11-25
来源:互联网
int nZero=0;
setsockopt(socket,SOL_S0CKET,SO_SNDBUF,(char *)&nZero,sizeof(nZero));
setsockopt(socket,SOL_S0CKET,SO_RCVBUF,(char *)&nZero,sizeof(int));
哪位朋友知道怎么回事呢?
作者: wswwxk 发布时间: 2011-11-25
因为在客户端接收数据出现了接收一包数据不完整的情况!解决方法不是设置这个,而是把消息发送时,增加产学头部,直到读到相应在消息长度,才处理啊。
如Header部分为 WORD wID; //消息ID
char cFeather; //为一个检查字符
DWORD dwMsgLen; //消息内容的长度。
每次客户端收时,先 Recv 7字节的头部,然后再根据头部 Recv相应的数据长度。完整后再处理。
如果Recv为0,表示同步读法的,对方断开连接。自己关闭Socket
作者: brightLee 发布时间: 2011-11-25
作者: mxzy55560593 发布时间: 2011-11-25
应该与这个Buffer关系不大吧!我以前也改大过,发现也不能多点之类的。
因为在客户端接收数据出现了接收一包数据不完整的情况!解决方法不是设置这个,而是把消息发送时,增加产学头部,直到读到相应在消息长度,才处理啊。
如Header部分为 WORD wID; //消息ID
char cFeather; //为一个检查字符
DWORD dwMsgLen; //消息内容的长度。
每次客户端收时……
这个我知道,我的每个包的开始都有4字节的数据,表示发送的数据长度,现在我只想知道上面的问题为什么会这样?
作者: wswwxk 发布时间: 2011-11-25
你应该禁用Nagle
设置了禁用Nagle,跟没设置一样的效果...求解释
作者: wswwxk 发布时间: 2011-11-25
setsockopt(socket,SOL_S0CKET,SO_RCVBUF,(char *)&nZero,sizeof(int));
很重要.0 buff.就是把系统sock分配的缓冲区不用了.直接用你程序提供的buff.内核网络层会经常读取你程序的指定的sock buff内存.效率低.可想而知.
作者: smwhotjay 发布时间: 2011-11-25
setsockopt(socket,SOL_S0CKET,SO_SNDBUF,(char *)&nZero,sizeof(nZero));
setsockopt(socket,SOL_S0CKET,SO_RCVBUF,(char *)&nZero,sizeof(int));
很重要.0 buff.就是把系统sock分配的缓冲区不用了.直接用你程序提供的buff.内核网络层会……
那服务器端的完成端口,怎么没这问题呢?
作者: wswwxk 发布时间: 2011-11-25
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28