社区
网络编程
帖子详情
请教recv为何收到异常数据
heikefangxian9
2010-04-22 09:52:04
问题描述:
在client端不断readfile一个txt文件,每次读512字节,并将读到的数据发送给server;
在server端recv(clientsocket, buf, buflen,0);
出现的问题是:在client端发送的文件大小大于512字节时,也就是发送的次数大于1时,server端接收到的第一个buf完全是乱码。但recv的第二个包是正确的。
请教这是不是由于recv本身的机理造成的??
...全文
338
10
打赏
收藏
请教recv为何收到异常数据
问题描述: 在client端不断readfile一个txt文件,每次读512字节,并将读到的数据发送给server; 在server端recv(clientsocket, buf, buflen,0); 出现的问题是:在client端发送的文件大小大于512字节时,也就是发送的次数大于1时,server端接收到的第一个buf完全是乱码。但recv的第二个包是正确的。 请教这是不是由于recv本身的机理造成的??
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
10 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
heikefangxian9
2010-05-02
打赏
举报
回复
谢谢各位,结贴给分
Un1
2010-04-26
打赏
举报
回复
tcp是保证顺序的,问题可能在发送时,贴代码上来看
尹成
2010-04-25
打赏
举报
回复
recv(clientsocket, buf, buflen,0);接收数据采用循环接收,接收数据判断一下recv的返回值,不一定和你指定的buflen长度一样的。
heikefangxian9
2010-04-23
打赏
举报
回复
自己再顶一下
激情的头发
2010-04-23
打赏
举报
回复
[Quote=引用楼主 heikefangxian9 的回复:]
请教这是不是由于recv本身的机理造成的??
[/Quote]
你可以使用recv的标识参数flag,并设为MSG_WAITALL。
用法为:
recv( fd, buffer, bytes, MSG_WAITALL );
这样的话,recv函数在接收到bytes字节的数据前不会返回;而如果flag使用0的话,也就是recv采用默认的措施,当套接口有数据到达,将读取至多读取bytes个字节的数据。
如果网络质量不是太好的话,send函数发送的数据不能保证一次性到达,可能一开始只有几个字节,其他的数据到达得较晚。这样的话,使用recv( fd, buffer, bytes, 0 )就会读取一开始到达的那几个字节,然后返回。而如果buffer在使用之前又没有被清空的话,那么就会出现LZ的乱码问题。
heikefangxian9
2010-04-22
打赏
举报
回复
楼上的,recv采用循环接收是什么意思啊,能解释一下吗?
我有点笨,没听明白
Eleven
2010-04-22
打赏
举报
回复
recv(clientsocket, buf, buflen,0);接收数据采用循环接收,接收数据判断一下recv的返回值,不一定和你指定的buflen长度一样的。
soswaidao
2010-04-22
打赏
举报
回复
友情帮顶,友情帮顶
soswaidao
2010-04-22
打赏
举报
回复
友情帮顶,友情帮顶
heikefangxian9
2010-04-22
打赏
举报
回复
我自己顶。。。。。。。。。。。。
java
recv
failed,java.sql.SQLException: I/O Error: Software caused connection abort:
recv
failed
现在我遇到如下的问题,想
请教
高手帮忙分析一下是怎么回事:场景描述:现在是一个发送短信的程序,具体操作如下:首先做一个
数据
统计,而这个统计信息是存储在oracle10g
数据
库中,然后将这些统计信息组合成一个xml形式的字符串发送到一个webservice程序,这个webserveice程序就负责将这个xml形式的字符串解析入库,而这个库是mssql2000的,插入到这个库中之后就能发送出去短信了。以...
boost::asio TCP链接发生错误代码2的原因-End of file
刚使用ASIO不久。今天调试一个用boost::asio库写的客户端和服务器程序客户端连接上了,然后投递了一个async_receive IO,但接着处理此IO的
recv
_handler就
收到
了错误,错误代码为2,message为"End of file"看了客户端程序,怎么也想不明白这个错误是怎么发生的然后
请教
了同事,经过一通调试,才发现是服务器
收到
链接后,因为逻辑上的问题,没有投递async_receive IO,导致此连接上没有接受
数据
的buffer,所以ASIO系统就自动了关闭了此连接,因此客户端就
linux C语言 SOCKET 服务器断开导致客户端SEND崩溃问题解决办法
原文来自:http://blog.chinaunix.net/uid-24830931-id-3786670.html 一、现象描述 在利用librdkafka同kafka broker通信过程中,当kafka broker意外退出时(如kill -9),librdkafka接口的sendmsg接口报出了“Program received signal SIGPIPE, Broken
thrift 0.8 java客户端无法catch
异常
问题描述: 当方法返回值为thrift基本类型(i64,bool...)时,客户端无法捕捉
异常
。 ps.当方法返回值为用户定义的类型时,不会出现该问题。 注意 thrift 版本0.8 跟踪thrift代码发现,问题出现的原因: step 1: 服务端,写
数据
(基本类型) 不会先判断返回值是否为空,基本类型也无法判断是否为空 opro...
CSDN回帖得分大全(近两年)
√ vs2005调用dll的时候Initialize()函数返回错误 [VC/MFC 基础类] √ 为什么我创建登陆框之后,然后获取登陆框的
数据
时候总是出现非法操作! [VC/MFC 界面] √ CFileFind::FindFile 支持通配符么? [VC/MFC 基础类] √ vc++ 浮动窗口联动的实现 [VC/MFC 界面] ...
网络编程
18,356
社区成员
64,214
社区内容
发帖
与我相关
我的任务
网络编程
VC/MFC 网络编程
复制链接
扫一扫
分享
社区描述
VC/MFC 网络编程
c++
c语言
开发语言
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章