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 }

浙公网安备 33010602011771号