在发送与接受之间不能用FOR循环的问题

yangw79 2003-08-20 04:20:54
我在服务器与客户机之间我想用FOR循环
比如
服务器
for(i = 0;i 〈3 ; i++)
{
send();
}
客户机
for (i = 0;i 〈 3; i++)
{
recv();

}

这样一运行后就死了
不知道是为什么啊
...全文
18 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
flagfly 2003-08-22
  • 打赏
  • 举报
回复
象你这种情况,先开客户端也没用。
因为你是循环发送,你的本意是发3次,接3次,但由于网络传输的问题,往往
会三次的数据来了,一个recv就全接下来了。这样你的另两个recv就会继续等待,阻塞。
改为非阻塞吧
yangw79 2003-08-22
  • 打赏
  • 举报
回复
如何先开客户端呢
我指的是在程序里面怎么写啊
xtmzl 2003-08-22
  • 打赏
  • 举报
回复
for(i = 0;i 〈3 ; i++)
{
send();
Sleep(2000);
}
客户机
for (i = 0;i 〈 3; i++)
{
recv();
Sleep(2000);

}
yangw79 2003-08-21
  • 打赏
  • 举报
回复
哪位大侠能说的清楚啊,我是个新手
只要说SELECT怎么具体用,或者说如何设置成非阻塞模式
smch 2003-08-21
  • 打赏
  • 举报
回复
可这不是一句两句就可以说清楚的。这样吧:
DWORD dwSize = 0;
Sleep(1000);
int iReturnCode = ioctlsocket(g_SocketToServer,FIONREAD,&dwSize);

这样dwSize为可读数据长度。

如果要求高,那么就使用异步方式。
mme 2003-08-21
  • 打赏
  • 举报
回复
呵呵,你的是阻塞方式,发送的时候,客户端没有开始接收,所以就一直等待,看起来就像死了一样.客户端想接收,可是没有数据过来,也在等待,所以也像死了一样.....

你先开客户端,再开发送端,然后就可以看到不会死了..
yangw79 2003-08-20
  • 打赏
  • 举报
回复
能不能说的清楚一点
怎么改啊
我是新手
smch 2003-08-20
  • 打赏
  • 举报
回复
考虑使用非阻塞模式吧。或者在recv之前使用select来判断是否有数据接收。
smch 2003-08-20
  • 打赏
  • 举报
回复
阻塞模式的socket是这样的。recv如果没有数据可以接收就阻塞了。

18,355

社区成员

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

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