简单的c-s程序,帮忙看下问题

IT界的厨师 2014-04-22 11:02:24
为什么我只执行了客户端一次,服务器就在不停的打印接收到的信息。代码如下:
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);
}
...全文
86 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
www_adintr_com 2014-04-22
  • 打赏
  • 举报
回复
fork 的子进程都没有退出 for 循环, 也没有判断 select, recv 的返回值

65,208

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧