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

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

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

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

请问哪种方法,比较好?或者有其他方法
...全文
291 点赞 收藏 23
写回复
23 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
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也可以放在线程呀。
回复
相关推荐
发帖
网络编程
创建于2007-09-28

1.8w+

社区成员

VC/MFC 网络编程
申请成为版主
帖子事件
创建了帖子
2005-08-16 01:47
社区公告
暂无公告