⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 53.htm

📁 网络编程原理文摘 [文件] 精华区目录结构 [目录] 网络编程的基本原理 [目录] 网络编程与网络协议 [目录] 网上资源 [目录] winsock技术 [目录
💻 HTM
字号:
<HTML><HEAD><TITLE>CTerm非常精华下载</TITLE>
<META content="text/html; charset=gb2312" http-equiv=Content-Type></HEAD>
<BODY bgColor=#ffffff>
<TABLE border=0 cellPadding=0 cellSpacing=0 width=100% background=0044.jpg>
  <BODY>
  <TR>
    <TD height=150 rowSpan=2 width="308" ><IMG alt=DDl_back.jpg height=129 width=300 src="DDl_back.jpg" ></TD>
    <TD background=DDl_back2.jpg height=50 width="581" ><BIG><BIG><FONT face=黑体>
      <P align=center >重拳出击  一网打尽</FONT></BIG></BIG></P></TD></TR>
  <TR>
    <TD bgColor=#0099ff borderColor=#0099ff height=5 width="581"></TD></TR>
  <TR>
    <TD align=middle colSpan=2 height=100 vAlign=top width="891" ><BR>
<p align=center>[<a href="清华bbs网络资源.htm">回到开始</a>][<a href="6.htm">上一层</a>][<a href="54.htm">下一篇</a>]
<hr><p align="left"><small>发信人: sbaa (老猫), 信区: Winsock <br>

标  题: 怎么知道recv 的缓存有没有东西? <br>

发信站: BBS 水木清华站 (Sat Dec 12 10:20:12 1998) <br>

  <br>

我是新学socks <br>

我的程序老是在recv 等数据 <br>

怎么能知道缓存有没有东西呢? <br>

难道非要开线程? <br>

要是unix怎么开啊 <br>

  <br>

-- <br>

※ 来源:·BBS 水木清华站 bbs.net.tsinghua.edu.cn·[FROM: 202.119.112.51] <br>

发信人: martinchen (懒虫), 信区: Winsock <br>

标  题: Re: 怎么知道recv 的缓存有没有东西? <br>

发信站: BBS 水木清华站 (Sat Dec 12 13:16:47 1998) <br>

  <br>

使用select即可 <br>

【 在 sbaa (老猫) 的大作中提到: 】 <br>

: 我是新学socks <br>

: 我的程序老是在recv 等数据 <br>

: 怎么能知道缓存有没有东西呢? <br>

: 难道非要开线程? <br>

: 要是unix怎么开啊 <br>



  <br>

  <br>

-- <br>

※ 来源:·BBS 水木清华站 bbs.net.tsinghua.edu.cn·[FROM: 159.226.43.51] <br>

发信人: sbaa (老猫), 信区: Winsock <br>

标  题: Re: 怎么知道recv 的缓存有没有东西? <br>

发信站: BBS 水木清华站 (Mon Dec 14 11:33:44 1998) <br>

  <br>

怎么好象没用啊 <br>

我写的小程序象代理一样 <br>

你看看哪里有问题 <br>

while(1){ <br>

                FD_ZERO(&aa); <br>

         FD_SET( sockfd2, &aa ); <br>

         FD_SET( newfd, &aa ); <br>

  <br>

         timeout.tv_sec = timeout.tv_usec = 0; <br>

  <br>

                select(2,&aa,0,0,&timeout); <br>

  <br>

    if (FD_ISSET( sockfd2, &aa )) <br>

          { recv(sockfd2,&ch,1,0);send(newfd,&ch,1,0) ;} <br>



  <br>

      if (FD_ISSET( newfd, &aa ))  { recv(newfd,&ch,1,0);send(sockfd2,&ch,1,0) ;;} <br>

  <br>

  <br>

  <br>

          } <br>

老是接收不到数据 <br>

【 在 martinchen (懒虫) 的大作中提到: 】 <br>

: 使用select即可 <br>

  <br>

  <br>

-- <br>

※ 来源:·BBS 水木清华站 bbs.net.tsinghua.edu.cn·[FROM: 202.119.112.51] <br>

发信人: martinchen (懒虫), 信区: Winsock <br>

标  题: Re: 怎么知道recv 的缓存有没有东西? <br>

发信站: BBS 水木清华站 (Mon Dec 14 11:49:00 1998) <br>

  <br>

【 在 sbaa (老猫) 的大作中提到: 】 <br>

: 怎么好象没用啊 <br>

: 我写的小程序象代理一样 <br>

: 你看看哪里有问题 <br>

: while(1){ <br>

: while(1){ <br>

:                 FD_ZERO(&aa); <br>

:          FD_SET( sockfd2, &aa ); <br>

:          FD_SET( newfd, &aa ); <br>

:          timeout.tv_sec = timeout.tv_usec = 0; <br>

:                 select(2,&aa,0,0,&timeout); <br>

                         ^应当是max(sockfd2,newfd)+1, <br>

                          你可以参考select的参数说明, <br>

                          它是指从0开始到你要检查的 <br>

                          fd之间的个数。 <br>

:     if (FD_ISSET( sockfd2, &aa )) <br>

:           { recv(sockfd2,&ch,1,0);send(newfd,&ch,1,0) ;} <br>

:       if (FD_ISSET( newfd, &aa ))  { recv(newfd,&ch,1,0);send(sockfd2,&ch,1,0)) ;} <br>

:           } <br>

: 老是接收不到数据 <br>

  <br>

  <br>

-- <br>

※ 来源:·BBS 水木清华站 bbs.net.tsinghua.edu.cn·[FROM: otcaix.iscas.ac] <br>

发信人: sbaa (老猫), 信区: Winsock <br>

标  题: Re: 怎么知道recv 的缓存有没有东西? <br>

发信站: BBS 水木清华站 (Mon Dec 14 21:09:22 1998) <br>

  <br>

  <br>

2不对吗? <br>

我要查两个啊 <br>

改了3也不对 <br>

老是检测不到 <br>

【 在 martinchen (懒虫) 的大作中提到: 】 <br>

:                          ^应当是max(sockfd2,newfd)+1, <br>

:                           你可以参考select的参数说明, <br>

:                           它是指从0开始到你要检查的 <br>

:                           fd之间的个数。 <br>

  <br>

  <br>

-- <br>

※ 来源:·BBS 水木清华站 bbs.net.tsinghua.edu.cn·[FROM: 202.119.112.51] <br>

发信人: martinchen (懒虫), 信区: Winsock <br>

标  题: Re: 怎么知道recv 的缓存有没有东西? <br>

发信站: BBS 水木清华站 (Tue Dec 15 09:46:42 1998) <br>

  <br>

问题是如果你用2的话,select <br>

只检查0,1两个描述符,而0和1 <br>

分别是stdin和stdout,改成3 <br>

也是不行的,那样的话就是检查 <br>

了stdin,stdout,stderr了,并 <br>



没有检查你想检查的socket描述 <br>

符。应当改为 <br>

max(max(sockfd2,newfd)+1,这 <br>

样select才检查sockfd2和newfd <br>

这两个描述符可不可读。 <br>

【 在 sbaa (老猫) 的大作中提到: 】 <br>

: 2不对吗? <br>

: 我要查两个啊 <br>

: 改了3也不对 <br>

: 老是检测不到 <br>

  <br>

  <br>

-- <br>

※ 来源:·BBS 水木清华站 bbs.net.tsinghua.edu.cn·[FROM: otcaix.iscas.ac] <br>

发信人: sbaa (老猫), 信区: Winsock <br>

标  题: Re: 怎么知道recv 的缓存有没有东西? <br>

发信站: BBS 水木清华站 (Wed Dec 16 19:41:38 1998) <br>

  <br>

我不知道max函数要什么头文件,但我printf了sockfd2,new <br>

一个是5,一个是4那我用6总行了吧 <br>

还是老样子 <br>

你的文章我倒看懂了,可还不行,问题在那里呢? <br>



还望指点! <br>

【 在 martinchen (懒虫) 的大作中提到: 】 <br>

: 问题是如果你用2的话,select <br>

: 只检查0,1两个描述符,而0和1 <br>

: 分别是stdin和stdout,改成3 <br>

: 也是不行的,那样的话就是检查 <br>

: 了stdin,stdout,stderr了,并 <br>

: 没有检查你想检查的socket描述 <br>

: 符。应当改为 <br>

: max(max(sockfd2,newfd)+1,这 <br>

: 样select才检查sockfd2和newfd <br>

: 这两个描述符可不可读。 <br>

  <br>

  <br>

-- <br>

※ 来源:·BBS 水木清华站 bbs.net.tsinghua.edu.cn·[FROM: bbs.hhu.edu.cn] <br>

</small><hr>
<p align="center">[<a href="清华bbs网络资源.htm">回到开始</a>][<a href="6.htm">上一层</a>][<a href="54.htm">下一篇</a>]<p align="center" ><font face="黑体" size=5><big>网络资源大全</big></font></p> 
</table> 
</body> 
</html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -