阻塞模式下,怎样接收,才不浪费接收时间。

Sander 2005-08-16 01:47:33
方法一。
设置timeout -----
请告诉我,这个要设吗,一般为多少比较适合。

方法二。
获得驱动缓冲的数据长度
recv(s, buf, len, flag)

这个len是驱动缓冲的数据长度。

请问哪种方法,比较好?或者有其他方法
...全文
343 23 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
Sander 2005-08-24
  • 打赏
  • 举报
回复
ok,结帖
guanglin_lv 2005-08-23
  • 打赏
  • 举报
回复
多线程+异步模式
最好的方法了
guanglin_lv 2005-08-23
  • 打赏
  • 举报
回复
当然是要采用多线程的,

本人刚开始搞WINCE, 请大家多多指教
我的QQ是75039960
MSN: guanglin_lv@msn.com
guanglin_lv 2005-08-23
  • 打赏
  • 举报
回复

fd_set fdRead;
SOCKET s;
TIMEVAL aTime;
char recvBuf[1024];
int recvLen;

aTime.tv_sec = 1;
aTime.tv_usec = 0;
FD_ZERO(&fdRead);
FD_SET(s,&fdRead);
ret = select(0,&fdRead,NULL,NULL,&aTime);
if (FD_ISSET(pSocket->m_socket,&fdRead))
recvLen = recv(pSocket->m_socket,recvBuf, 1024,0);

chenzunshi3 2005-08-22
  • 打赏
  • 举报
回复
http://www.somade.com/是个很专业的技术社区,去那里找找吧,或许有你要的答案~
basesky 2005-08-22
  • 打赏
  • 举报
回复
建议楼主采用异步方式,阻塞模式弄不好容易死掉哦。
Sander 2005-08-22
  • 打赏
  • 举报
回复
哦,忘了说明, 在wince.net 4.2一下, 5。0不知道
Sander 2005-08-22
  • 打赏
  • 举报
回复
TO: yzkzero(U)
没错,它有这些function,编译也不会有问题,但你可以试试,它就是不会工作。
Sander 2005-08-19
  • 打赏
  • 举报
回复
这里的超时,比方说1秒,是不是,只要你没有收到你要的字节数,就要等一秒。
----
为什么说用ioctlsocket()不好呢,这样我就知道最起码可以收这个数,肯定有呀。
不用浪费时间呀。
yzkzero 2005-08-19
  • 打赏
  • 举报
回复
WinCE只能用堵塞,不太可能吧,微软本来就不推荐用堵塞的方式。

况且在MSDN里,各种模式都有WinCE版本的,WSAEventSelect, 重叠IO的 WSASend, WSARecv 都可以在WinCE用的啊?

Sander 2005-08-19
  • 打赏
  • 举报
回复
TO: nuaawenlin(飘人)
我这是使用多线程呀, read, send都是呀。
nuaawenlin 2005-08-19
  • 打赏
  • 举报
回复
使用多线程
softrain 2005-08-18
  • 打赏
  • 举报
回复
我是说方法一,也就是设置超时时间是好的方法,最好使用它。
使用ioctlsocket(s, FIONREAD, &ulByteNum);也不好,降低了系统性能。最好是只管收,收到一定数据就处理,如果一次过来的数据太多,可以边处理边接收。
allen_zhaozhencn 2005-08-18
  • 打赏
  • 举报
回复
同步操作时设置超时
Sander 2005-08-17
  • 打赏
  • 举报
回复
up once.
Cocoky 2005-08-16
  • 打赏
  • 举报
回复
Sander 2005-08-16
  • 打赏
  • 举报
回复
To:softrain(敢笑杨过不痴情)
不明白你说的什么:)
获得缓冲的数据长度可以通过IOCtrl
ioctlsocket(s, FIONREAD, &ulByteNum);


To:dirdirdir3(风)
对方数据是不定的,即使是定的,也不是你收到的,记住这个是tcp, 流模式。
dirdirdir3 2005-08-16
  • 打赏
  • 举报
回复
你预备着对方会发送多少字节来就接收多少个字节。
softrain 2005-08-16
  • 打赏
  • 举报
回复
最好方法一用上。另外没听说可以获取缓冲区长度,RECV是阻塞的,来数据才会返回,或者设置了超时到超时返回,数据长度从数据中获取。
Sander 2005-08-16
  • 打赏
  • 举报
回复
我这个是winCE的系统,必须是block的,
block也可以放在线程呀。
加载更多回复(3)

18,363

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧