社区
网络编程
帖子详情
关于连续send和recv的问题?
ynbme
2003-09-10 11:47:04
我在服务器端连续向客户端发两个send,用来传送数据,如果数据很长,我在两个不同的数据段中加入了不同的数据头。在客户端循环接收,那在客户端recv时,会不会把第一次
send中的尾部数据和第二个send中的数据头混在一起,在一个recv循环中接收呢,就是说,一次recv,收两个数据包了,如果会怎么处理呢??
...全文
59
6
打赏
收藏
关于连续send和recv的问题?
我在服务器端连续向客户端发两个send,用来传送数据,如果数据很长,我在两个不同的数据段中加入了不同的数据头。在客户端循环接收,那在客户端recv时,会不会把第一次 send中的尾部数据和第二个send中的数据头混在一起,在一个recv循环中接收呢,就是说,一次recv,收两个数据包了,如果会怎么处理呢??
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
6 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
ypos
2003-09-10
打赏
举报
回复
你要在数据头里添加长度
Bind
2003-09-10
打赏
举报
回复
如果两个send是在同一个线程,而且是严格按照发完一个数据包再发下一个的话, recv也是按照这个顺序的。同时不排除一次recv把两个send的内容全收下来的可能
shiquan
2003-09-10
打赏
举报
回复
recv()的返回值是接受的大小。如果是tcp不会出现交错接受的现象,如果是udp 就说不起了。还有,我一直认为recv()返回0说明接受完毕,如果说你连续发了两个包,我不知道会不会出现两次0返回值。不过你可以试验一下。如果不行,你就使用头上加长度的方法吧。
flagfly
2003-09-10
打赏
举报
回复
你说的做不到。只能是收完后,自己从头根据包的长度解析。
至于一次收一个包还是两个包,你自己决定不了。
除非你的所有包有固定大小,而你也在recv中指定接收该长度
的数据。
ynbme
2003-09-10
打赏
举报
回复
先谢谢了!
如果添加长度,那recv也会在一次接收中得到两个数据包的不同部分,怎么严格的收完一个包,处理后,在收另一个呀?
l1ul1u
2003-09-10
打赏
举报
回复
send()和recv()函数的第三个参数是长度
有时候连续发send()二个10字节,而你接收recv是20个字节,就会只接收一次
最好send()和recv()函数的长度能够相等
Send
和
Recv
原理及常见
问题
分析
Send
和
Recv
原理及常见
问题
分析
Send
函数 int
send
( SOCKET s, const char FAR *buf, int len, int flags ); 不论是客户还是服务器应用程序都用
send
函数来向TCP连接的另一端发送数据。客户程序一般用
send
函数向服务器发送请求,而服务器则通常用
send
函数来向客户程序发送应答。 参数说明: 第一个参数指定发送端套接字描述...
为什么socket传输文件出错?(
连续
多次
send
或者
recv
会导致什么?)
1.传输大文件的时候,缓冲区有限,肯定不可能一次性传过去,所以可以使用while循环多次读文件,将每次读取的文件
send
出去,再继续读文件,再继续
send
,但是执行的时候发现代码会卡滞,文件传送不过去,这种时候,只需要让接收端在接收到文件后回发一个ACK(随便回发一个字符啥的都行)进行阻塞即可: 发送端: while(!feof(fp))//只要文件还没结束就要继续fread继续
send
{ filelen=0;//使用前进行初始化 filelen=fread(FileBuffer,1,FILE_LEN
socket
send
recv
使用心得(Python windows)
最近使用python socket做了一些程序,遇到了一些
问题
,后来逐一解决了。这里结合之前的认知,总结以下心得,避免后来人踩坑。 1、
send
和
send
all的区别 发送方使用
send
all,不要使用
send
。
send
all在返回的时候,会确保数据已传给tcpip;
send
并不一定会把数据全部发完,而是发一次,就返回发送的数据长度。在一般的程序设计中,我们更多场景是使用
send
all,使用
send
就需要自己处理未发送的数据。 2、
recv
是拷贝数据,不是接收数据,每次拷贝多少?
recv
并不是取完对方发送
oracle
recv
buf size,网络编程中
send
和
recv
的参数和强制类型转换
问题
在开始说一下字符
问题
。声明一个字符数组,若不对其初始化,其值是不确定的,系统为例防止这样的字符串过长,会在内存中相隔不远处置一个字节为0,或者在在申请的数组后不远处置一个0。如charstr[200];可以通过调试窗口观察数组中的值直到最后通过将字符输出的方式也可以看出,全是乱码。在数组后面不远处会有系统置的0,不至于输出太多。而一旦对一个数组初始化,不管用char str[200] = “abc...
非阻塞模式下,
send
和
recv
返回值的各种处理
send
/
recv
write/read 函数返回值大于 0,表示成功发送或成功接收了多少字节,但是发送或者接收的字节数可能是部分字节数,比如你需要发送buf_length长度的数据,但是
send
/write返回的n有可能 < buf_length,这是因为发送缓冲区可能已经满了。EINTR:当进程在一个慢系统调用中阻塞时,如果捕获到某个信号且相应信号处理函数返回时,这个系统调用不再阻塞而是被中断,就会调用返回错误(一般为-1)并设置 errno 为 EINTR。返回值小于0,需要区分errno。
网络编程
18,356
社区成员
64,214
社区内容
发帖
与我相关
我的任务
网络编程
VC/MFC 网络编程
复制链接
扫一扫
分享
社区描述
VC/MFC 网络编程
c++
c语言
开发语言
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章