社区
网络编程
帖子详情
TCP发送多次,接受一次的问题
damingg
2009-09-30 11:30:53
一个进程通过socket向另外一个进程发送数据
发送了几次,比如每次的数据分别是:发送1,发送2,发送3, ... ,发送10
send了10次
接受的进程在接收后打印,结果是:
发送1
发送2发送3发送4...
只recv了2次
请问我怎么设置参数,使之发送几次,就接受几次?我想让这些数据分开接收!
...全文
1774
10
打赏
收藏
TCP发送多次,接受一次的问题
一个进程通过socket向另外一个进程发送数据 发送了几次,比如每次的数据分别是:发送1,发送2,发送3, ... ,发送10 send了10次 接受的进程在接收后打印,结果是: 发送1 发送2发送3发送4... 只recv了2次 请问我怎么设置参数,使之发送几次,就接受几次?我想让这些数据分开接收!
复制链接
扫一扫
分享
举报
写回复
配置赞助广告
用AI写文章
10 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
jmcooler
2009-10-02
打赏
举报
回复
忘记说了,上述过程重复进行,直到收发双方交互完毕
jmcooler
2009-10-02
打赏
举报
回复
通常接收方需要一个大于等于发包大小的 Buffer 来用来接收数据,伪代码如下:
char szRecvBuff[发包大小];
int nTotalRecv = 0;
int nRecv = recv( socket, szRecvBuff + nTotalRecv, 发包大小 - nTotalRecv, 0 );
nTotalRecv += nRecv;
//只要收到数据,则解析包
char* pPackPtr = szRecvBuff;
while( nTotalRecv >= 包头长度 ) //看是否够包头长度
{
if( nTotalRecv >= 包头中的包长度 ) //看是否够包长度
{
//有了一个完整的包,处理这个接收包(pPackPtr)
nTotalRecv -= 包头中的包长度;
pPackPtr += 包头中的包长度;
}
else
break;
}
if( nTotalRecv > 0 && pPackPtr != szRecvBuff )
memmove( szRecvBuff, pPackPtr, nTotalRecv );
jmcooler
2009-10-01
打赏
举报
回复
你需要明确他们的不同点:
TCP 是面向连接的可靠的基于流的传输协议
UDP 是非连接的不可靠的基于数据报的传输协议
同时,他们都是 IP 协议之上的协议,而 TCP 在 IP 协议之上基于滑动窗口做了重传。UDP 基本上和 IP 协议相同,只是做了发送方的包分片和接收方的包重组
既然,TCP 是流,那么发送方无论发送多少个包,都会被变成流,流就是连续的字节,因此接收方可能会一次收到1字节,2字节,3字节,等等,都有可能。
那么对于 TCP 怎么收呢,一般,你定义字节的应用层协议栈,包头一般有2个部分,包长度 和 包标志。接收方尽力地收数据,每次只要收到包,先看收到的字节数是否够包头的4字节,如果够,则看是否够包长度。以此解析出包
sghgcn
2009-10-01
打赏
举报
回复
自定义格式吧。
通过特殊的约定,来接收和发送数据。
jxb_memory
2009-09-30
打赏
举报
回复
1.可以向楼上说的自己解包;
2.可以发送一次后等待对方回复,收到回复之后再发下一个包(当然,效率会低一些)这样就是你想要的结果了;
Conry
2009-09-30
打赏
举报
回复
1
tcp不可能设置的
这就是TCP的粘包,你可以搜索一下有好多粘包的解决办法
一般是一个包头部是长度,后面跟数据,这样根据长度就可以分割包了
blingpro
2009-09-30
打赏
举报
回复
TCP有粘包问题,接收端可能一次接收了好几次发送的数据,需要自定义格式来区分具体数据了
gotooker
2009-09-30
打赏
举报
回复
顶楼上,接受定长的数据收10次就可以了。
不动如岳
2009-09-30
打赏
举报
回复
[Quote=引用 1 楼 conry 的回复:]
tcp不可能设置的
这就是TCP的粘包,你可以搜索一下有好多粘包的解决办法
一般是一个包头部是长度,后面跟数据,这样根据长度就可以分割包了
[/Quote]接收的时候,先接收长度,在根据长度接收数据就行了
f515sf1sd15fsd1f56sd
2009-09-30
打赏
举报
回复
在send之后 就调用recv recv是阻塞的 不就可以了吗
ThingsBoard如何
接受
设备通过
TCP
发送
的报文
TCP
(Transmission Control Protocol,传输控制协议)是互联网中的一种面向连接的、可靠的、基于字节流的传输层通信协议。它提供了点对点的通信,并且可靠地传递数据。
TCP
是Internet协议族中最为重要、应用最为广泛的一种协议。
C#控制台应用——利用
TCP
协议
发送
,
接受
数据
C#控制台应用——利用
TCP
协议
发送
,
接受
数据客户端
发送
C#代码服务端
接受
c#代码 客户端
发送
C#代码 using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Net.Sockets; using System.Text; using System.Thre...
面试之经典
问题
-
发送
/
接受
窗口与缓存的关系
1,
tcp
传输报文段,
发送
窗口与缓存的关系??? 2,普通意义上的,
TCP
传输报文段的时候会产生稍带确认吗??? 3,
接受
方收到字节确认不是按顺序的,那么对这些东西已经收到的确认号如何处理??? 对于网络通信,
tcp
发送
的都是一些报文段,里面存在一些
发送
/
接受
窗口
TCP
发送
数据、
接受
数据及
TCP
通信程序练习
TCP
通信协议
网络编程
18,356
社区成员
64,161
社区内容
发帖
与我相关
我的任务
网络编程
VC/MFC 网络编程
复制链接
扫一扫
分享
社区描述
VC/MFC 网络编程
c++
c语言
开发语言
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章