社区
网络编程
帖子详情
在SOCKET中Send两次,如果时间太近,则在服务器端Receive的时候一次就收下来了。我怎么能把它们分开呢?在线等,马上结。
killers100
2005-08-03 05:46:06
在SOCKET中Send两次,如果时间太近,则在服务器端Receive的时候一次就收下来了。我怎么能把它们分开呢?在线等,马上结。
...全文
910
27
打赏
收藏
在SOCKET中Send两次,如果时间太近,则在服务器端Receive的时候一次就收下来了。我怎么能把它们分开呢?在线等,马上结。
在SOCKET中Send两次,如果时间太近,则在服务器端Receive的时候一次就收下来了。我怎么能把它们分开呢?在线等,马上结。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
27 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
killers100
2005-08-05
打赏
举报
回复
好,谢谢大家,再说声对不起,到现在才结帖。
junccc
2005-08-04
打赏
举报
回复
两次发送一定是有两次包头
不可能说就一个包头,所以你说的这种情况不可能的
你只要收到有包头的不就是又一次的数据?
killers100
2005-08-04
打赏
举报
回复
qrlvls(空 气) 老大的方法可以,不过我在自己的电脑试的时候可以,在别人的电脑上试不行,
setsockopt( sock, IPPROTO_TCP, TCP_NODELAY, (char *)&bNodelay, sizoeof(bNodelay));
是不是传进去的bNodelay要先设置值啊???
netgm
2005-08-04
打赏
举报
回复
包头+数据+包尾..最好的办法啦
Wolfe
2005-08-04
打赏
举报
回复
学习
tangrh
2005-08-04
打赏
举报
回复
唉,这个问题不用讨论了,答案=tcp自己带包头确定数据长度(接收方先收包头)
包尾就不要了(Nagle算法只是说发送端协议栈不要攒包,如果不采用,哪怕一个字节,也立刻发出去,否则要等发送缓冲区里有一定数据或者过了一定时间才会发,因此它不会解决楼主的问题),呵呵,udp不会粘包,发一个,对方收一个(丢了就没有了,呵呵),因此不需要包头(唯一要注意的是不要超长,有很多讨论的,看看就知道了)
菲斯可儿
2005-08-04
打赏
举报
回复
典型的粘包现象。网上有很多讨论的。
killers100
2005-08-04
打赏
举报
回复
知道的再给点意见,,就要出DEMO版本了。。
快点啊。
killers100
2005-08-04
打赏
举报
回复
在MFC的CSocket类的子类里,构造函数中,设置:
this->setsockopt(TCP_NODELAY, (char *)&bNodelay, sizoeof(bNodelay));
其中bNodelay=1;
结果是有时候能粘包,有时候不粘。而以前是肯定粘。
mymyal123
2005-08-03
打赏
举报
回复
学习
artmouse
2005-08-03
打赏
举报
回复
用分包方式,我是这样做的
西山小月
2005-08-03
打赏
举报
回复
典型的粘包现象。
采用应答方式吧。
softrain
2005-08-03
打赏
举报
回复
老老实实分析包头确定包长吧,这是正确的做法,不要走偏门.服务器端不能保证客户端都不使用negle算法.
就算一次recv到多个包,难道你根据包头信息还不能解析出这些包吗?晕
killers100
2005-08-03
打赏
举报
回复
谢谢大家,本来是准备下班前结帖的,
结果没找到答案,明天早上上班试了过后,如果可以就结帖。估计可以试试qrlvls(空 气) 老大的禁用Nagle 算法的方法。
我编的程序支持TCP和UDP。发的时候每个帧代表某些特定的命令或数据,其中头部有包含帧长度。本来以为收到的数据会是一帧一帧的,结果不是那么回事,希望能少改些代码,所以找可以减少修改代码的方法。
knowlove
2005-08-03
打赏
举报
回复
增加应答机制,发送端发送--接受端接收,当达到要求的量时候发出应答信号--发送端接受该信号继续发送
mango279
2005-08-03
打赏
举报
回复
用udp
tcp就会这样,或者一个大包拆成若干小包
qrlvls
2005-08-03
打赏
举报
回复
原因是Nagle算法会将多个小包集中成一个大包进行发送,你也可以增大包的大小,但这样对网络环境影响不好
qrlvls
2005-08-03
打赏
举报
回复
你可以禁用 Nagle 算法,不过最好还是在协议上保障
setsockopt( sock, IPPROTO_TCP, TCP_NODELAY, (char *)&bNodelay, sizoeof(bNodelay));
qrlvls
2005-08-03
打赏
举报
回复
TCP 是流协议,不是消息协议,因此粘包是很正常的
通常是通过协议来区别两个包的
alon21
2005-08-03
打赏
举报
回复
定义结构,结构的头部带上数据的长度。
加载更多回复(7)
mfc
socket
编程实现聊天与文件传输(vs2010)
mfc
socket
编程实现聊天与文件传输(vs2010)
C# 网络编程之使用
Socket
类
Send
、Re
ceive
方法的同步通讯
经过几天学习,终于解决了再C#网络编程
中
使用
Socket
类
Send
和Re
ceive
方法开发的客户端和服务端的同步通讯程序;实现了又客户端想服务器发送消息的界面程序.主要使用的方法是: 1.
Socket
套接字编程的知识,通过IPAddress定义一个IP地址,IPEndPoint定义一个主机,
Socket
实例套接字对象sock和线程Thread的的成员变量; 2.再调用方法bind绑定端口、li...
Socket
Re
ceive
数据
一次
性接收不全的问题
在发送端,
一次
发送4092个字节, 在接收端,
一次
接收4092个字节, 但是在接收端,偶尔会出现
socket
.re
ceive
接收不全的情况 , ret = sockTemp.Re
ceive
(bBuffer,iBufferLen,0); //也有可能无法收到全部数据! 必须要考虑0
Socket
的
Send
,Recv的长度问题: 一个包没有固定长度,以太网限制在46-1500字
socket
函数
send
和recv函数
在发送端,
一次
发送4092个字节, 在接收端,
一次
接收4092个字节, 但是在接收端,偶尔会出现
socket
.re
ceive
接收不全的情况 , ret = sock.recv(bBuffer,iBufferLen,0); //也有可能无法收到全部数据! 必须要考虑0 ret iBufferLen的情况:继续接收iBufferLen - ret字节,然后合并 注意第recv函数
Socket
、
send
/recv的循环发送和接收、缓冲区、阻塞
这篇文章略作删减后转过来了。主要有以下几点值得自己注意的: (1)刚开头对套接字的理解。 (2)缓冲区的理解。 其他部分有
时间
重新整理。 套接字的概念及分类 在网络
中
,要全局的标识一个参与通信的进程,需要三元组:协议,IP地址以及端口号。要描述两个应用进程之间的端到端的通信关联需要五元组:协议,信源主机IP,信源应用进程端口,信宿主机IP,信宿应用进程端口。为了实现两个应用...
网络编程
18,363
社区成员
64,187
社区内容
发帖
与我相关
我的任务
网络编程
VC/MFC 网络编程
复制链接
扫一扫
分享
社区描述
VC/MFC 网络编程
c++
c语言
开发语言
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章