MyException - 我的异常网
当前位置:我的异常网» VC/MFC » 一个简单的socket加select结构,请问一下

一个简单的socket加select结构,请问一下

www.myexceptions.net  网友分享于:2013-04-10  浏览:11次
一个简单的socket加select结构,请教一下
在server端循环调用select:
while (1) 
{
struct timeval timeout={3,0}; //select 等待3 秒,3秒轮询

FD_ZERO(&fds); 
FD_SET(sockfd,&fds); 
 maxfdp=sockfd+1; 
switch(select(maxfdp,&fds,NULL,NULL,&timeout)) //select 使用 

    case -1: 
        exit( -1);break; //select 错误,退出程序 
    case 0:
        printf("time is up.waiting for another request...\n");
        break;
     default:  
        buf=(char*)malloc(MAXSIZE);
        recv(sockfd,buf,MAXSIZE,0);
        printf("%s\n",buf);
        free(buf);
        break;
}

而在client端只用send发送了一次数据。为什么每次select的时候sockfd都是可读状态的,直接导致我收到的结果一直被循环打印。按照我的想法select不是应该只在第一次时sockfd是可读的么。本人菜鸟,虚心求教,谢谢~
socket select

------解决方案--------------------
首先是要确认网络上send给你server的包就一次,然后再来检查你server的代码,这段代码也不复杂,看不出什么问题,基本定位就是client发的包多了,至于为什么多,有可能是你的某个client都没有关掉,用任务管理器看看是不是界面没了,还在发

文章评论

软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有