社区
通信技术
帖子详情
csoket编程时发送和接收不对应的问题
leekyo
2002-05-08 05:21:05
我在csoket编程时,用一个send()发包过去,有时却触发了两次onreceive()响应,结果是数据包被分成两个包接收了,我想能不能让它一次就接收完,不然我的接收程序不好编,按理说他的接收缓冲应该够大小的,怎么会分包了呢?怎么解决呢?
...全文
111
9
打赏
收藏
csoket编程时发送和接收不对应的问题
我在csoket编程时,用一个send()发包过去,有时却触发了两次onreceive()响应,结果是数据包被分成两个包接收了,我想能不能让它一次就接收完,不然我的接收程序不好编,按理说他的接收缓冲应该够大小的,怎么会分包了呢?怎么解决呢?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
9 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
vtable9999
2002-05-09
打赏
举报
回复
对于CSocket来说,如果在OnReceive中,把缓存的数据都读完,即使数据包大于8192,也只有一个OnReceive。但其实在CSocket的OnSockNotify中是有多个FD_READ的,不过都被DoCallBack过滤了。
你可以用CSocketFile、CArchive解决你的问题,也不就像xuying() 说的实现自己的报文格式
xuying
2002-05-08
打赏
举报
回复
TCP协议是流式的,当然会可能触发多次onreceive()。
如果想简单的话,改成UDP协议。它是数据报的,一次接收一个报文。
否则就要自己定义报文格式,用结构等接受。
建议看看<windows网络编程>
leekyo
2002-05-08
打赏
举报
回复
我的程序用的是csocket,在win98下有时17520字节也不分包,有时坟包
Delver
2002-05-08
打赏
举报
回复
解决的方法:改成同步调用recv,如果你的数据包的长度是固定的,是要使用MSG_WAITALL标志即可;但如果数据包是变长的,则需要定义一个包头,在包头中指明包的长度,先用recv接受包头,然后再根据包的长度收取数据部分,当然也需要使用MSG_WAITALL。
vtable9999
2002-05-08
打赏
举报
回复
to game_boy(gamesboy):
数据包大于MTU是会分包,便对于winsock来说,不一定产生多次OnRecevie事件。只有数据包大于8192(winsock默认的缓存大小)时才会有多次OnReceive事件。
vtable9999
2002-05-08
打赏
举报
回复
不清楚你问题的原因,但你可以用CSocketFile加CArchive解决你的问题
PingPingPangPang
2002-05-08
打赏
举报
回复
你发的太大,以太网包长度1600字节,打成IP包,还要去掉IP头和TCP头,剩下1540字节,你如果超过这么多就会分包。
game_boy
2002-05-08
打赏
举报
回复
你发的数据有多大,你的网络MTU有多大呢?如果数据大于网络的MTU,肯定会被分片的
Aydge
2002-05-08
打赏
举报
回复
我不懂编程的,但数据被分包想来是因为传出中的分开了啊
我想假设“一个send()发送的内容会一次被onreceive()接收完”是一个错误。socket每次通讯量有字节数限制的吧
多线程下MFC网络
编程
CSock类
本文提供了一个使用Winsock进行网络
编程
的示例,包括
接收
和
发送
线程的实现细节。示例展示了如何创建套接字、绑定地址、监听连接请求、接受连接以及
发送
和
接收
数据。
CASyncSocket类和CSocket类
编程
本文介绍了Windows环境下使用MFC进行Socket
编程
的两种模式:CAsyncSocket类
编程
模式与CSocket类
编程
模式。CAsyncSocket类提供了对Winsock函数的封装,适用于需要深入理解网络通信原理的场景;而CSocket类则在CAsyncSocket的基础上进一步封装,提供了更高级的网络
编程
接口,简化了网络程序的编写。
用c语言socket
编程
,CAsyncSocket和CSocket
编程
本文详细介绍了MFC中CAsyncSocket和CSocket类的使用,CAsyncSocket提供异步非阻塞套接字,适合处理大量并发连接,而CSocket则为同步阻塞模式,适用于步骤依赖性业务。CAsyncSocket通过回调函数处理网络事件,如OnReceive、OnSend等,而CSocket在Connect后若返回WSAEWOULDBLOCK错误,会进入消息循环等待相应事件。在MFC应用程序中,需要在InitInstance中调用AfxSocketInit初始化套接字。
MFC TCP客户端
本文详细介绍了一个基于TCP/IP协议的客户端
编程
实例,包括如何创建客户端、连接服务器、
发送
和
接收
数据等关键步骤。通过Visual Studio 2010/2013搭建环境,实现了与服务器的稳定通信。
VC++令人迷惑的几个
问题
。。。
作者在重新使用VC++进行网络
编程
时
遇到了困惑。针对MFC中的CSocket类,提出了为何需要通过继承来使用而不是直接利用该类的
问题
。同
时
,讨论了在不同场景下,特别是涉及多个套接字和不同事件处理
时
的类设计
问题
。
通信技术
4,394
社区成员
28,906
社区内容
发帖
与我相关
我的任务
通信技术
通信技术相关讨论
复制链接
扫一扫
分享
社区描述
通信技术相关讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章