简单的c-s程序,帮忙看下问题
为什么我只执行了客户端一次,服务器就在不停的打印接收到的信息。代码如下:
server.c
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <unistd.h>
#include <poll.h>
#include <sys/wait.h>
#include <sys/time.h>
int main(int argc,char **argv)
{
int listenfd,clientfd;
socklen_t len;
pid_t childpid;
struct sockaddr_in cliaddr,seraddr;
listenfd = socket(AF_INET,SOCK_STREAM,0);
if(listenfd <=0 )
{
printf("create socket error");
}
seraddr.sin_family = AF_INET;
seraddr.sin_port = htons(3422);
seraddr.sin_addr.s_addr = inet_addr("127.0.0.1");
bind(listenfd,(struct sockaddr *)&seraddr,sizeof(seraddr));
listen(listenfd,5);
len = sizeof(cliaddr);
char buf[100];
memset(buf,0,100);
int sizelen = 0;
fd_set fds;
int stat;
for(;;)
{
FD_ZERO(&fds);
FD_SET(listenfd,&fds);
select(listenfd+1,&fds,NULL,NULL,0);
clientfd = accept(listenfd,(struct sockaddr *)&cliaddr,&len);
if(FD_ISSET(listenfd,&fds))
{
if((childpid = fork()) == 0)
{
close(listenfd);
sizelen = recv(clientfd,buf,100,0);
printf("%s",buf);
}
}
waitpid(childpid,&stat,0);
close(clientfd);
}
exit (0);
}
client.c
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <unistd.h>
#include <poll.h>
int main(int argc,char **argv)
{
int confd;
socklen_t len;
struct sockaddr_in cliaddr;
confd = socket(AF_INET,SOCK_STREAM,0);
if(confd <= 0)
{
printf("create error");
}
char buf[100];
bzero(&cliaddr,sizeof(cliaddr));
cliaddr.sin_family = AF_INET;
cliaddr.sin_port = htons(3422);
cliaddr.sin_addr.s_addr = inet_addr("127.0.0.1");
connect(confd,(struct sockaddr *)&cliaddr,sizeof(cliaddr));
send(confd,"constrsdar\n",strlen("constrsdar")+1,0);
close(confd);
exit (0);
}