TCP C/S 多进程模型

来源:互联网 发布:淘宝商品出售编辑 编辑:程序博客网 时间:2024/05/29 06:32

client.c

#include<errno.h>#include<semaphore.h>#include<string.h>#include<sys/stat.h>#include<fcntl.h>#include<errno.h>#include<stdlib.h>#include<unistd.h>#include<stdio.h>#include<sys/mman.h>#include<sys/types.h>#include<signal.h>#include<pthread.h>#include<netinet/in.h>#include<arpa/inet.h>#include<sys/socket.h>#define SERVER_PORT 8000#define MAXLINE 4096int main(){    struct sockaddr_in serveraddr,clientaddr;    int confd,len=sizeof(clientaddr);    char ipstr[]="192.168.133.128";    char buf[MAXLINE];    confd=socket(AF_INET,SOCK_STREAM,0);    bzero(&serveraddr,sizeof(serveraddr));    serveraddr.sin_family=AF_INET;    inet_pton(AF_INET,ipstr,&serveraddr.sin_addr.s_addr);    serveraddr.sin_port=htons(SERVER_PORT);    if(connect(confd,(struct sockaddr*)&serveraddr,sizeof(serveraddr))==-1){        perror("connect");    }    if(getsockname(confd,(struct sockaddr*)&clientaddr,(socklen_t*)&len)==-1){        perror("getsockname");    }    printf("%d\n",ntohs(clientaddr.sin_port));    while(fgets(buf,sizeof(buf),stdin)){        write(confd,buf,strlen(buf));        len=read(confd,buf,sizeof(buf));        write(STDOUT_FILENO,buf,len);    }    close(confd);    return 0;}

server.c

#include<errno.h>#include<semaphore.h>#include<string.h>#include<sys/stat.h>#include<fcntl.h>#include<errno.h>#include<stdlib.h>#include<unistd.h>#include<stdio.h>#include<sys/mman.h>#include<sys/types.h>#include<signal.h>#include<pthread.h>#include<netinet/in.h>#include<arpa/inet.h>#include<sys/socket.h>#define SERVER_PORT 8000#define MAXLINE 4096int main(){    struct sockaddr_in serveraddr,clientaddr;    int sockfd,addrlen,confd,len,i;    char ipstr[128];    char ans[]="I get it!\n";    char buf[MAXLINE];    pid_t pid;    sockfd=socket(AF_INET,SOCK_STREAM,0);    bzero(&serveraddr,sizeof(serveraddr));    serveraddr.sin_family=AF_INET;    serveraddr.sin_addr.s_addr=htonl(INADDR_ANY);    serveraddr.sin_port=htons(SERVER_PORT);    bind(sockfd,(struct sockaddr*)&serveraddr,sizeof(serveraddr));    listen(sockfd,128);    while(1){        addrlen=sizeof(clientaddr);        confd=accept(sockfd,(struct sockaddr*)&clientaddr,&addrlen);        inet_ntop(AF_INET,&clientaddr.sin_addr.s_addr,ipstr,sizeof(ipstr));        printf("client ip %s\nport %d\n",ipstr,ntohs(clientaddr.sin_port));        pid=fork();        if(pid==0){            close(sockfd);            while(1){                len=read(confd,buf,sizeof(buf));                if(len<2)break;                write(STDOUT_FILENO,buf,len);                write(confd,ans,sizeof(ans));            }            close(confd);return 0;        }        else if(pid>0){            close(confd);        }    }    close(sockfd);    return 0;}
0 0