一晃十几年过去了,回过来看看年轻时候的自己
代码:
#include <stdio.h> #include <sys/types.h> #include <sys/fcntl.h> #include <sys/socket.h> #include <netinet/in.h> #include <netdb.h> #include <errno.h> #include <unistd.h> main() { int listenfd,connfd,n,fd; char buf1[4096],buf2[4096]; char name[30]; pid_t childpid; size_t clilen; struct sockaddr_in cliaddr,servaddr; printf("Please Input The File's Name:"); scanf("%s",name); if((fd=open(name,O_RDONLY))<0){ fprintf(stderr,"OPEN Error"); exit(1); } listenfd=socket(AF_INET,SOCK_STREAM,0); bzero(&servaddr,sizeof(servaddr)); servaddr.sin_family=AF_INET; servaddr.sin_addr.s_addr=htonl(INADDR_ANY); servaddr.sin_port=htons(5555); int option = 1; setsockopt (listenfd, SOL_SOCKET, SO_REUSEADDR, &option, sizeof(option) ); bind(listenfd,(struct sockaddr *)&servaddr,sizeof(servaddr));
listen(listenfd,5); for(;;){ clilen=sizeof(cliaddr); connfd=accept(listenfd,(struct sockaddr *)&cliaddr,&clilen); if((childpid=fork())==0){ close(listenfd); lseek(fd,0,SEEK_SET); write(connfd,name,sizeof(name)); while((n=read(fd,buf1,sizeof(buf1)))>0) write(connfd,buf1,n); printf("transport end\n"); exit(0); } close(connfd); } close(fd); }
client:
代码:
#include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <sys/fcntl.h> #include <sys/socket.h> #include <netinet/in.h> #include <netdb.h> #include <errno.h> #include <unistd.h> #include <string.h> #define FILE_MODE (S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH) int main(int argc,char *argv[]) { int listenfd,n,fd,ret; char buf1[4096]; char name[30]; struct sockaddr_in cliaddr,servaddr; struct hostent *host; if(argc<3){ fprintf(stderr,"Usage:./client ip port"); exit(1); } listenfd=socket(AF_INET,SOCK_STREAM,0); bzero(&servaddr,sizeof(servaddr)); servaddr.sin_family=AF_INET; if((host=gethostbyname(argv[1]))==NULL){ fprintf(stderr,"client gethostbyname error"); exit(1); } servaddr.sin_addr=*((struct in_addr *)host->h_addr); servaddr.sin_port=htons(5555); ret=connect(listenfd,(struct sockaddr *)&servaddr,sizeof(servaddr)); if(ret==-1){ fprintf(stderr,"client connect error"); exit(1); } n=read(listenfd,name,sizeof(name)); if((fd=open(name,O_WRONLY|O_CREAT|O_TRUNC,FILE_MODE))<0){ fprintf(stderr,"can not open %s", strerror(errno)); exit(1); } write(1,name,sizeof(name)); while((n=read(listenfd,buf1,sizeof(buf1)))>0) write(fd,buf1,n); fprintf(stderr,"receive success"); close(listenfd); close(fd); }
|