- 论坛徽章:
- 0
|
在编写一个socket通信程序,代码如下.c/s模式,server端建立进程向client发送5个字节的字符串eth0后退出进程,但是在client上却打印出无穷个eth0,而且在进程结束后也并没有打印出我的预设字符串:after end。冥思苦想也不知道其原因,望各位帮忙解答,谢谢!
- /*server*/
- #include <sys/time.h>
- #include <sys/types.h>
- #include <unistd.h>
- #include <sys/socket.h>
- #include <netinet/in.h>
- #include <arpa/inet.h>
- main()
- {struct sockaddr_in my_addr,their_addr;
- int sockfd;
- if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1){printf("error socket");exit(1);}
- my_addr.sin_family=AF_INET;
- my_addr.sin_port=htons(3999);
- my_addr.sin_addr.s_addr=INADDR_ANY;
- bzero(&(my_addr.sin_zero),8);
- if(bind(sockfd,(struct sockaddr *)&my_addr,sizeof(struct sockaddr))==-1)
- {perror("bind");exit(1);}
- if(listen(sockfd,10)==-1)
- {perror("listen");
- exit(1);
- }
- int new_fd,sin_size=sizeof(struct sockaddr_in);
- int status;
- pid_t pid;
- int num;
- while(1)
- {
- if((new_fd=accept(sockfd,(struct sockaddr *)&their_addr,&sin_size))==-1)
- {perror("accept");
- continue;}
- printf("success! connect from %s",inet_ntoa(their_addr.sin_addr));
- if(!(pid=fork()))
- {if((num=send(new_fd,"eth0",5,0))==-1) perror("send");
- close(new_fd);
- exit(0);
- }printf("after send");
- wait(&status);
- close(new_fd);
- }close(sockfd);}
- /*client*/
- #include <sys/time.h>
- #include <sys/types.h>
- #include <unistd.h>
- #include <sys/socket.h>
- #include <netinet/in.h>
- #include <arpa/inet.h>
- main(int argc,char **argv)
- {char buf[5];
- int sockfd;
- struct sockaddr_in their_addr;
- if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1) {printf("sock error");exit(1);}
- their_addr.sin_family=AF_INET;
- their_addr.sin_port=htons(3999);
- their_addr.sin_addr.s_addr=inet_addr(argv[1]);
- bzero(&(their_addr.sin_zero),8);
- connect(sockfd,(struct sockaddr *)&their_addr,sizeof(struct sockaddr));
- printf("after connect");
- int a;
- while(1)
- {printf("while");
- int a=recv(sockfd,buf,5,0);
- if(a<0) {close(sockfd);exit(1);}
- else printf("buf=%s",buf);
- }
- }
复制代码 |
|