有谁能介绍一个阻塞通信的特点?!!!谢了!!!!

daviyuan 2001-06-26 02:23:33
聊天室用阻塞还是非阻塞的好!
...全文
110 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
hello008 2001-06-26
  • 打赏
  • 举报
回复
非阻塞的好处是可以控制超时
daidi 2001-06-26
  • 打赏
  • 举报
回复
显然应该是用非阻塞的拉,不管怎么样都不会死机
Sunny_lin 2001-06-26
  • 打赏
  • 举报
回复
使用 阻塞和多线程来实现,SOCKET阻塞通讯,多线程使界面不会停顿!
hello008 2001-06-26
  • 打赏
  • 举报
回复
非阻塞接收到的字符数不是<=0,应该是>=0,<0就表示出错了

网络编程可以到www.programsalon.com里查找socket
hello008 2001-06-26
  • 打赏
  • 举报
回复
阻塞就是一个函数一直等待期望的结果完成或出错才返回值,如n=recv(sd, buf, 200),如果是阻塞方式,那必须接收到200个字符(n==200)或对方断开连接(n<0)导致错误,recv才会返回,有时要等好久;而非阻塞情况,recv函数一运行,马上返回,实际收到的字节数n可能<=0,你必须不断运行recv,直到总共接收到200个字节,由于recv是马上返回,所以你可以做其他事情。
阻塞代码例子:
int tcp_recv(int sd, char *buf, int len, int timeout)
{
return recv(sd, buf, len-len, 0);
}

非阻塞代码例子:
int tcp_recv(int sd, char *buf, int len, int timeout)
{
int len1, len_recv;
time_t t2, t1;

len_recv =0;
time(&t1);
t2 =t1;
while(len_recv <len)
{
if(t2 -t1 >timeout)
return len_recv;

if((len1 =recv(sd, &buf[len_recv], len-len_recv, 0)) <=0)
{
if(timeout ==0) break;
if(len1 ==SOCKET_ERROR && GetLastError() ==WSAEWOULDBLOCK)
{
time(&t2);
continue;
}
peek_message();//你可以做其他事情
return len_recv;
}
len_recv +=len1;
time(&t2);
}
return len_recv;
}
kkk16 2001-06-26
  • 打赏
  • 举报
回复
听课。
caiyi9000 2001-06-26
  • 打赏
  • 举报
回复
当然用阻塞好了!·

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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