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 }

浙公网安备 33010602011771号