zoukankan      html  css  js  c++  java
  • 利用socket传文件

    欢迎批评

    也可以看看这里的比较详细http://www.jb51.net/article/53733.htm

    
    
    服务端
    #include <stdio.h> #include <string.h> #include <stdlib.h> #include <sys/socket.h> #include <arpa/inet.h> #include <unistd.h> #define BUFFER_SIZE 1024 #define FILE_NAME_SIZE 512 void error(char *message); int main(int argc,char*argv[]) { int serv_sock,clnt_sock,i,length,read_length,j; struct sockaddr_in serv_addr,clnt_addr; socklen_t clnt_addr_sz; char file_name[FILE_NAME_SIZE],message[BUFFER_SIZE]; char buffer[BUFFER_SIZE]; if(argc!=2) { printf("usage:%s<port> ",argv[0]); exit(1); } serv_sock=socket(PF_INET,SOCK_STREAM,0); if(serv_sock==-1) error("socket() error"); memset(&serv_addr,0,sizeof(serv_addr)); serv_addr.sin_family=AF_INET; serv_addr.sin_addr.s_addr=htonl(INADDR_ANY); serv_addr.sin_port=htons(atoi(argv[1])); if(bind(serv_sock,(struct sockaddr*)&serv_addr,sizeof(serv_addr))==-1) error("bind() error"); if(listen(serv_sock,3)==-1) error("listen() error"); clnt_addr_sz=sizeof(clnt_addr); for(i=1;i<=3;i++) //while(1) { clnt_sock=accept(serv_sock,(struct sockaddr*)&clnt_addr,&clnt_addr_sz); if(clnt_sock==-1) error("accept() error"); else printf("connected client %d `",i); if(read(clnt_sock,buffer,BUFFER_SIZE)==-1) printf("read() error"); strcpy(file_name,buffer); printf("file's name %s ",file_name); FILE *fp=fopen(file_name,"r"); if(fp==NULL) printf("file %s can not open ",file_name); else { bzero(buffer,BUFFER_SIZE); while((length=fread(buffer,sizeof(char),BUFFER_SIZE,fp))>0) { if(write(clnt_sock,buffer,length)==-1) { printf("send file %s failed ",file_name); break; } } fclose(fp); printf("transfer succeed "); } close(clnt_sock); } close(serv_sock); return 0; } void error(char* message) { fputs(message,stderr); fputc(' ',stderr); exit(1); }
    
    
    

    客户端

    1
    #include <stdio.h> 2 #include <stdlib.h> 3 #include <string.h> 4 #include <unistd.h> 5 #include <arpa/inet.h> 6 #include <sys/socket.h> 7 #define FILE_NAME_SZ 512 8 #define BUFFER_SIZE 1024 9 void error(char* message); 10 11 int main(int argc,char*argv[]) 12 { 13 int sock,temp=0; 14 struct sockaddr_in clnt; 15 int length,write_length; 16 char buffer[BUFFER_SIZE+1]; 17 char filename[FILE_NAME_SZ+1]; 18 char message[BUFFER_SIZE]; 19 sock=socket(PF_INET,SOCK_STREAM,0); 20 if(argc!=3) 21 { 22 printf("usage:%s<ip><port> ",argv[0]); 23 } 24 if(sock==-1) 25 error("socket() error "); 26 27 memset(&clnt,0,sizeof(clnt)); 28 clnt.sin_family=AF_INET; 29 clnt.sin_addr.s_addr=inet_addr(argv[1]); 30 clnt.sin_port=htons(atoi(argv[2])); 31 32 if(connect(sock,(struct sockaddr*)&clnt,sizeof(clnt))==-1) 33 error("connect() error"); 34 else 35 puts("connect........"); 36 37 printf("input file name "); 38 scanf("%s",filename); 39 40 strcpy(buffer,filename); 41 write(sock,buffer,BUFFER_SIZE); 42 43 FILE *fp=fopen(filename,"w"); 44 if(fp==NULL) 45 { 46 printf("open file %s error ",filename); 47 exit(1); 48 } 49 else 50 { 51 bzero(buffer,BUFFER_SIZE); 52 while((length=read(sock,buffer,BUFFER_SIZE))>0) 53 { 54 if(fwrite(buffer,sizeof(char),length,fp)<length) 55 { 56 printf("file %s write error ",filename); 57 break; 58 } 59 //printf("receive %s succeed ",filename); 60 temp=1; 61 } 62 if(temp==1) printf("receive %s succedd ",filename); 63 else printf("receive %s failed ",filename); 64 } 65 fclose(fp); 66 close(sock); 67 return 0; 68 } 69 70 void error(char* message) 71 { 72 fputs(message,stderr); 73 fputc(' ',stderr); 74 exit(1); 75 }
  • 相关阅读:
    Linux常用命令2
    Linux常用命令1
    Nginx配置Kafka
    SpringBoot整合Druid
    spring boot jpa
    mybatis-plus_2
    copy data to map
    HashMap容量问题
    在SpringBoot主启动类中获取实例化的Bean
    Linux环境中Rsync增量备份文件
  • 原文地址:https://www.cnblogs.com/boyiliushui/p/4476334.html
Copyright © 2011-2022 走看看