select如何判断可读可写的啊?
贴出服务器端代码如下,客户端也是用select这么做的
现在的问题是:一端发送了,另一端马上收不到,需要也回复一下才可以收到。而且一端连续发送好几条之后,另外一端是回复一条,收到一条。
大牛给看看啊,刚刚弄这个的
sockConn = accept(sockSer,(SOCKADDR*)&addrClient,&len);
while(1)
{
struct timeval timeout;
fd_set r; //定义一个读集合
fd_set w; //写
FD_ZERO(&r); //
FD_ZERO(&w);
FD_SET(sockConn,&r); //
FD_SET(sockConn,&w);
timeout.tv_sec = 1;
timeout.tv_usec =0;
switch(select( 0 , &r , &w , 0, &timeout))
{
case SOCKET_ERROR:
break;
case 0:
break;
default:
if(FD_ISSET( sockConn , &r ))
{
memset(recvBuf,0,100);
recv(sockConn,recvBuf,100,0);
printf("%s\n",recvBuf);
if('Q' == recvBuf[0] || 'q' ==recvBuf[0])
{
send(sockConn,"Quit",strlen("Quit")+1,0);
printf("Chat end!\n");
break;
}
}
if(FD_ISSET( sockConn , &w ))
{
printf("server %s say:",inet_ntoa(addrSer.sin_addr));
memset(sendBuf,0,100);
gets(sendBuf);
send(sockConn,sendBuf,strlen(sendBuf)+1,0);
if('Q' == sendBuf[0] || 'q' ==sendBuf[0])
{
printf("Chat end!\n");
break;
}
}
}
}