2.1 TCP协议下实现文件的传输(发送/接收)

head.h

 1 #ifndef _HEAD_H_
 2 #define _HEAD_H_
 3 
 4 #include<stdio.h>
 5 #include<stdlib.h>
 6 #include<string.h>
 7 #include<sys/types.h>
 8 #include<sys/socket.h>
 9 #include<arpa/inet.h>
10 #include<netinet/in.h>
11 #include<netinet/ip.h>
12 #include<unistd.h>
13 #include<sys/stat.h>
14 #include<fcntl.h>
15 #include<error.h>
16 #include<errno.h>
17 
18 #define error_exit(_errmsg_) error(EXIT_FAILURE,errno,_errmsg_)
19 #define SER_PORT 50000
20 #define SER_ADDR "192.168.239.129"
21 
22 #endif

send.c

 1 //TCP协议下实现文件的传输(发送/接收)
 2 #include"head.h"
 3 int main(int argc,const char*argv[])//send
 4 {
 5     if(argc!=2)
 6     {
 7         fprintf(stderr,"Usage:./send filename\n");
 8         return -1;
 9     }
10     int sockfd=0;
11     struct sockaddr_in seraddr;
12 //    FILE* fp=NULL;
13     int fd=0;
14     char buff[1024]={0};
15     int ret=0;
16 
17     seraddr.sin_family=AF_INET;
18     seraddr.sin_port=htons(SER_PORT);
19     seraddr.sin_addr.s_addr=inet_addr(SER_ADDR);
20         
21     if(-1==(sockfd=socket(AF_INET,SOCK_STREAM,0)))
22         error_exit("fail to socket!");
23     if(-1==connect(sockfd,(struct sockaddr* )&seraddr,sizeof(seraddr)))
24         error_exit("fail to connect!");
25     //发送文件名
26     if(-1==send(sockfd,argv[1],strlen(argv[1])+1,0))
27         error_exit("fail to send!");
28 //    if(-1==recv(sockfd,ret,strlen(ret),0))
29 //        error_exit("fail to recv!");
30     //打开并读源文件
31 //    if(NULL==(fp=fopen(argv[1],"r")))
32 //        error_exit("fail to fopen!");
33     if(-1==(fd=open(argv[1],O_RDONLY)))
34         error_exit("fail to open!");
35 
36     //发送文件内容
37 //    while(0!=(ret=fread(buff,sizeof(char),1024,fp)))
38     while(0<(ret=read(fd,buff,sizeof(buff))))
39     {
40         if(-1==send(sockfd,buff,ret,0))
41             error_exit("fail to send!");
42         
43     }
44     close(fd);
45     close(sockfd);
46     return 0;
47 }

recv.c

 1 //TCP协议下实现文件的传输(发送/接收)
 2 #include"head.h"
 3 int main()
 4 {
 5     int sockfd=0;
 6     int confd=0;
 7     int ret=0;
 8     struct sockaddr_in seraddr;
 9     char buff[1024]={0};
10 //    FILE* fp=0;
11     int fd=0;
12     seraddr.sin_family=AF_INET;
13     seraddr.sin_port=htons(SER_PORT);
14     seraddr.sin_addr.s_addr=inet_addr(SER_ADDR);
15     
16     if(-1==(sockfd=socket(AF_INET,SOCK_STREAM,0)))
17         error_exit("fail to socket!");
18     if(-1==bind(sockfd,(struct sockaddr* )&seraddr,sizeof(seraddr)))
19         error_exit("fail to bind!");
20     if(-1==listen(sockfd,10))
21         error_exit("fail to listen!");
22     if(-1==(confd=accept(sockfd,NULL,NULL)))
23         error_exit("fail to accept!");
24     if(-1==recv(confd,buff,sizeof(buff),0))
25         error_exit("fail to recv!");
26     if(-1==(fd=open(buff,O_WRONLY|O_CREAT|O_TRUNC,0644)))
27         error_exit("fail to open!");
28     while(0<(ret=recv(confd,buff,sizeof(buff),0)))
29     {
30         write(fd,buff,ret);
31     }
32     close(confd);
33     close(fd);
34     close(sockfd);
35     return 0;
36 }

posted @ 2017-03-13 21:14  bkycrmn  阅读(431)  评论(0)    收藏  举报