1.1 UDP协议下实现文件的发送与接收


send.c

 1 //UDP协议下实现文件的发送与接收
 2 #include <stdio.h>
 3 #include<stdlib.h>
 4 #include<string.h>
 5 #include<error.h>
 6 #include<errno.h>
 7 #include<sys/types.h>
 8 #include<sys/socket.h>
 9 #include<netinet/in.h>
10 #include<netinet/ip.h>
11 #include<arpa/inet.h>
12 #include<signal.h>
13 #define error_exit(_errmsg_) error(EXIT_FAILURE,errno,_errmsg_)
14 #define SER_PORT 50000
15 #define SER_ADDR "192.168.1.104"
16 int main(char argc,const char*argv[])//send
17 { 18     if(argc!=2) 19     {fprintf(stderr,"Usage:./client xxx.xxx\n");return -1;} 20     int sockfd=0; 21     struct sockaddr_in seraddr; 22     seraddr.sin_family=AF_INET; 23     seraddr.sin_port=htons(SER_PORT); 24     seraddr.sin_addr.s_addr=inet_addr(SER_ADDR); 25     if(-1==(sockfd=socket(AF_INET,SOCK_DGRAM,0))) 26         error_exit("fail to socket!"); 27     //发文件名
28     if(-1==sendto(sockfd,argv[1],strlen(argv[1])+1,0, 29             (struct sockaddr*)&seraddr,sizeof(seraddr))) 30         error_exit("fail to sendto!"); 31     char buff[1024]={0}; 32     FILE* fp=NULL; 33     int ret=0; 34     if(NULL==(fp=fopen(argv[1],"r"))) 35             error_exit("fail to fopen!"); 36     //发文件
37     while(0!=(ret=fread(buff,sizeof(char),1024,fp))) 38  { 39             if(-1==sendto(sockfd,buff,ret,0, 40                 (struct sockaddr*)&seraddr,sizeof(seraddr))) 41                 error_exit("fail to sendto!"); 42  } 43     //给对方发送结束信号
44     strcpy(buff,"|___|"); 45 // strcpy(buff,"quit");
46     if(-1==sendto(sockfd,buff,strlen(buff)+1,0,(struct sockaddr*)&seraddr,sizeof(seraddr))) 47                 error_exit("fail to sendto!"); 48  close(sockfd); 49  fclose(fp); 50     return 0; 51 }

recv.c

 1 //UDP协议下实现文件的发送与接收
 2 #include <stdio.h>
 3 #include<stdlib.h>
 4 #include<string.h>
 5 #include<error.h>
 6 #include<errno.h>
 7 #include<sys/types.h>
 8 #include<sys/socket.h>
 9 #include<netinet/in.h>
10 #include<netinet/ip.h>
11 #include<arpa/inet.h>
12 #include<signal.h>
13 #define error_exit(_errmsg_) error(EXIT_FAILURE,errno,_errmsg_)
14 #define SER_PORT 50000
15 //#define CLT_PORT 50001
16 #define SER_ADDR "192.168.1.104"
17 //#define CLT_ADDR "192.168.1.131"
18 
19 int main()//recv
20 { 21     int sockfd=0; 22     char filename[64]={0}; 23     char buff1[1024]={0}; 24     struct sockaddr_in seraddr; 25     struct sockaddr_in cltaddr; 26     socklen_t addrlen=sizeof(cltaddr); 27     seraddr.sin_family=AF_INET; 28     seraddr.sin_port=htons(SER_PORT); 29     seraddr.sin_addr.s_addr=inet_addr(SER_ADDR); 30     
31     if(-1==(sockfd=socket(AF_INET,SOCK_DGRAM,0))) 32         error_exit("fail to socket!"); 33     //绑定
34     if(-1==bind(sockfd,(struct sockaddr*)&seraddr,sizeof(seraddr))) 35         error_exit("fail to bind!"); 36     //接收文件名
37     if(-1==recvfrom(sockfd,filename,sizeof(filename),0,(struct sockaddr*)&cltaddr,&addrlen)) 38         error_exit("fail to recvfrom!"); 39 
40     FILE* fp=NULL; 41     int ret=0; 42     if(NULL==(fp=fopen(filename,"w"))) 43         error_exit("fail to fopen!"); 44     //接收文件
45     while(0<(ret=recvfrom(sockfd,buff1,sizeof(buff1),0,NULL,NULL))) 46  { 47         if(!strncmp(buff1,"|___|",5))break; 48 
49         fwrite(buff1,ret,1,fp); 50  fflush(fp); 51  } 52  fclose(fp); 53  close(sockfd); 54     return 0; 55 }


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM