- 论坛徽章:
- 0
|
关于select函数的用法不是很清楚,尤其是什么时候套接口可读?可写?
以下是一段服务器代码,想要通过客户端的connect使得sockfd可读,但是没有成功:)
那位高手帮忙解决一下
server 端:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<sys/types.h>
#include<sys/wait.h>
#include<sys/socket.h>
#include<netinet/in.h>
#define PORT 3241
#define LOG 10
#define MAXLEN 100
main(int argc,char **argv)
{
struct timeval tv;
fd_set readfd;
int sockfd,newfd,sin_size;
pid_t pid;
struct sockaddr_in ser_addr,cli_addr;
sin_size=sizeof(struct sockaddr_in);
sockfd=socket(AF_INET,SOCK_STREAM,0);//创建套接口
ser_addr.sin_family=AF_INET;
ser_addr.sin_port=htons(PORT);
ser_addr.sin_addr.s_addr=INADDR_ANY;
bzero(&(ser_addr.sin_zero), ;
bind(sockfd,(struct sockaddr *)&ser_addr,sin_size);//邦定
listen(sockfd,LOG);监听
tv.tv_sec=1;
tv.tc_usec=0;
if(select(sockfd,&readfd,NULL,NULL,&tv)>0)//等待套接口可读
{//未执行!!!!!!!!!!!!why???
newfd=accept(sockfd,(struct sockaddr *)&cli_addr,&sin_size);
pid=fork();
if(!pid)
{//子进程,发送消息
printf("send message now!\n" ;
send(newfd,argv[1],MAXLEN,0);
close(newfd);
exit(0);
}
}
close(newfd);
wait(NULL);
}
client端:
#include<stdio.h>
#include<stdlib.h>
#include<netinet/in.h>
#include<sys/types.h>
#include<sys/wait.h>
#include<errno.h>
#include<sys/socket.h>
#define MYPORT 3240
main()
{
int sockfd,numbytes;
char buf[100];
struct sockaddr_in server_addr;
sockfd=socket(AF_INET,SOCK_STREAM,0);//创建套接口
printf("sockfd is %d\n" ;
server_addr.sin_family=AF_INET;
server_addr.sin_port=htons(MYPORT);
server_addr.sin_addr.s_addr=inet_addr("202.112.146.28" ;//202.112.146.28是server地址
bzero(&server_addr.sin_zero, ;
connect(sockfd,(struct sockaddr *)&server_addr,sizeof(struct soc
kaddr));//发起连接
numbytes=recv(sockfd,buf,100,0);//接受
buf[numbytes]=0;
printf("receive string is %s\n",buf);
close(sockfd);
} |
|