社区
网络编程
帖子详情
TCP发送多次,接受一次的问题
damingg
2009-09-30 11:30:53
一个进程通过socket向另外一个进程发送数据
发送了几次,比如每次的数据分别是:发送1,发送2,发送3, ... ,发送10
send了10次
接受的进程在接收后打印,结果是:
发送1
发送2发送3发送4...
只recv了2次
请问我怎么设置参数,使之发送几次,就接受几次?我想让这些数据分开接收!
...全文
1664
10
打赏
收藏
TCP发送多次,接受一次的问题
一个进程通过socket向另外一个进程发送数据 发送了几次,比如每次的数据分别是:发送1,发送2,发送3, ... ,发送10 send了10次 接受的进程在接收后打印,结果是: 发送1 发送2发送3发送4... 只recv了2次 请问我怎么设置参数,使之发送几次,就接受几次?我想让这些数据分开接收!
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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是阻塞的 不就可以了吗
tcp
通讯
一次
最多能
发送
多少数据?_Linux:网络基础
TCP
协议
TCP
协议
TCP
通信时序下图是
一次
TCP
通讯的时序图。
TCP
连接建立断开。包含大家熟知的三次握手和四次握手。
TCP
通讯时序在这个例子中,首先客户端主动发起连接、
发送
请求,然后服务器端响应请求,然后客户端主动关闭连接...
TCP
发送
大小
TCP
不使用停等协议,而是
一次
发送
多个报文段,然后等待确认,通过滑动窗口机制,把
发送
缓冲区中的数据分为4类:已
发送
且确认的;已
发送
没有确认的;可以
发送
的;不能
发送
的;接收方也有一个接收缓冲区,里面有已经...
TCP
通信
1、提供面向连接的可靠的字节流服务(一个报文
发送
端可以
一次
或
多次
发,接收端可以
一次
或
多次
收,不必来一个读一个);UDP是面向数据报的无连接,客户端发一个,服务端就收一个,不会合并几个UDP数据报。 2、一个...
C#
TCP
Server和
TCP
Client之间
多次
的数据
发送
与接收
C#
TCP
Server和
TCP
Client之间
多次
的数据
发送
与接收
java实现
TCP
的
发送
和接收数据
Tcp
协议是面向连接的,可靠的的协议,
Tcp
是通过三次握手建立连接,
Tcp
的
发送
和接收都是端对端的
发送
和接收。 一、
发送
端的编程思路 1、创建一个
发送
端的socket; 2、获取到输出流; 3、将需要写入的数据写...
网络编程
18,363
社区成员
64,187
社区内容
发帖
与我相关
我的任务
网络编程
VC/MFC 网络编程
复制链接
扫一扫
分享
社区描述
VC/MFC 网络编程
c++
c语言
开发语言
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章