社区
通信技术
帖子详情
csoket编程时发送和接收不对应的问题
leekyo
2002-05-08 05:21:05
我在csoket编程时,用一个send()发包过去,有时却触发了两次onreceive()响应,结果是数据包被分成两个包接收了,我想能不能让它一次就接收完,不然我的接收程序不好编,按理说他的接收缓冲应该够大小的,怎么会分包了呢?怎么解决呢?
...全文
77
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每次通讯量有字节数限制的吧
c
soket
应用
【CSocket应用】在Windows环境下,ADO(ActiveX Data Objects)是一种流行的客户端数据库
编程
技术,它基于OLE DB,提供高效能的数据处理能力和简单的
编程
接口。ADO不仅能够处理多种类型的数据源,还支持分布式数据...
soket
发送
数据包服务器端程序详解
在本文中,我们将深入探讨如何使用Socket
编程
创建一个数据包
发送
和
接收
的服务器端程序。Socket
编程
是网络通信的基础,它允许不同计算机之间的进程通过网络进行通信。在这个服务器端程序中,我们主要关注以下几个关键...
Socket服务器端与客户端程序.txt
之后,客户端可以使用`send()`和`recv()`进行数据的
发送
和
接收
。 ### 结论 Socket
编程
是网络应用程序开发的基石,通过本段代码的学习,我们了解了如何在Windows环境下使用Winsock库实现Socket服务器端和客户端的...
ChatRoom_Csocket.rar_Chatroom_csocket_site:www.pudn.com_
soket
_简单
它允许程序通过Internet或其他网络
发送
和
接收
数据,是网络
编程
的基础。在Windows环境下,我们可以使用Winsock库来实现Socket通信,而Csocket是对Winsock的封装,提供了更为简洁易用的API。 标题中的“ChatRoom_...
利用Csocket类实现网络通信
该类主要通过提供阻塞模式操作来简化数据的
发送
和
接收
流程。例如,`Receive()`、`Send()`、`ReceiveFrom()`、`SendTo()`和`Accept()`等方法都会等待直到操作完成才返回控制权。这种特性对于需要同步操作的数据管理来...
通信技术
4,390
社区成员
28,906
社区内容
发帖
与我相关
我的任务
通信技术
通信技术相关讨论
复制链接
扫一扫
分享
社区描述
通信技术相关讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章