社区
网络编程
帖子详情
Recv接收问题
zhengshouquan
2013-07-02 05:46:23
在接收服务器发回来的数据过程中,如果中途断开网络,再重新接恢复网络之后.重新创建套接字,重建连接,再接收数据时,会一直接收不成功!跟踪WSAGetLastError,发现是10035,按理不是错误。是没有数据发送。但实际上是有发送数据的啊。不知道什么原因造成的。
n = Recv(fd, recvbuf, 4, 0);
DWORD dwError = WSAGetLastError();
...全文
179
5
打赏
收藏
Recv接收问题
在接收服务器发回来的数据过程中,如果中途断开网络,再重新接恢复网络之后.重新创建套接字,重建连接,再接收数据时,会一直接收不成功!跟踪WSAGetLastError,发现是10035,按理不是错误。是没有数据发送。但实际上是有发送数据的啊。不知道什么原因造成的。 n = Recv(fd, recvbuf, 4, 0); DWORD dwError = WSAGetLastError();
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
赤勇玄心行天道
2013-07-03
打赏
举报
回复
没有看到明显的错误,有可能真的是没有数据过来,你用嗅探器抓个包看看,有没有数据过来。怀疑你的发送端有问题。
zhengshouquan
2013-07-02
打赏
举报
回复
Recv函数如下:调用的是非阻塞模式,跟踪调试发现,select(0, &r, 0, 0, &timeout)的结果一直是0,一直表示超时,把时间改成10s一样为0. 何解? typedef int ssize_t; ssize_t Recv(int fd, void *recvbuf, size_t len, int flags) { ssize_t n = 0, num = len; int times = 0; char *tmpbuf = (char *)recvbuf; int nTimeOut = 1000; setsockopt(fd, SOL_SOCKET, SO_RCVTIMEO, (CHAR *)&nTimeOut, sizeof(int));//设置阻塞时间 RecvAgain: int i = 0; for(i = 0; i < 5; i++) { int iRet; struct timeval timeout ; fd_set r; FD_ZERO(&r); FD_SET(fd, &r); timeout.tv_sec = 2; //连接超时2秒 timeout.tv_usec =0; iRet = select(0, &r, 0, 0, &timeout); DWORD dwError = WSAGetLastError(); if ( iRet <= 0 ) { continue; } else { if(TRUE == FD_ISSET(fd, &r)) { break; } } } n = recv(fd, &tmpbuf[len - num], num, flags); if (!n) { return 0; } if (n < 0) { if (times++ < 8)//8 goto RecvAgain; else return 0; } num = num - n; if (num != 0) goto RecvAgain; else return(len); }
lyingbo
2013-07-02
打赏
举报
回复
关于10035的解释,楼主参考下这里
http://bbs.csdn.net/topics/120094432
赤勇玄心行天道
2013-07-02
打赏
举报
回复
1楼说的对,你可以把代码发上来看看
ShengFei01
2013-07-02
打赏
举报
回复
如果你连接成功了,对方也发数据了,recv应该能收到数据,还收不到的话,只能查写的是否有问题,这有socket例子,不妨参考下: http://download.csdn.net/detail/geoff08zhang/4571358
TCP通信,
recv
接收
数据需要注意的地方?
关于TCP通信中,
recv
函数
接收
数据大小的
问题
,之前一直觉得,只要是客户端与服务器一发一收的模式,那么
recv
接收
的数据大小一定是函数中指定的数据大小。这次写了客户端与服务器通信的程序,在这上面栽了一个大跟斗...
recv
接收
问题
,急急急急
导读: while ((rcvlen =
recv
(sock, bufptr, buflen, 0)) { if (wsagetlasterror() != wsaewouldblock) { error("socket failed - %d/r/n", wsagetlasterror()); goto rdperror; /* tcp error */ } else { int x =
recv
函数
接收
数据
问题
(诡异)--调试正确,全速出错
今天,测试代码时,发现使用
recv
函数
接收
数据时,当全速运行时,出现
接收
数据不全
问题
,当调试运行的时候,一切正常。调整
接收
数据缓冲大小,发现太小时,重复
接收
过程会出现数据交叉
问题
。 一切都显的那么诡异,...
socket传输文件过程中
recv
函数
接收
数据包不完全
socket传输文件过程中
recv
函数
接收
数据包不完全
recv
函数接受包不完全,即当
recv
()返回的大小如果等于请求的大小,那么很有可能是缓冲区还有数据未读完,也意味着该次事件还没有处理完,所以还需要再次读取。 比如...
linux的tcp通讯
recv
()函数
接收
大数据分包
问题
误区在于先一直认为这个函数在
接收
len长度的时候,如果不足len,则返回实际
接收
长度,如果缓冲区没有数据,则返回-1,其实
recv
函数默认是阻塞模式,在阻塞模式下,如果缓冲区没有数据则会一直阻塞;如果将socket设置...
网络编程
18,356
社区成员
64,214
社区内容
发帖
与我相关
我的任务
网络编程
VC/MFC 网络编程
复制链接
扫一扫
分享
社区描述
VC/MFC 网络编程
c++
c语言
开发语言
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章