网络编程 文件传输
1,文件发送端
2,文件接收端
文件发送端:
#include
#include
#include
#include
#include
#include
#include
#include
#include
int main(int argc,char* argv[]){
char* service = "12345";
addrinfo hints,*res0,*res;
int err;
int sock;
int fd;
char buf[65536];
int n,ret;
if(argc != 3){return 1;}
fd = open(argv[2],O_RDONLY);
if(fd < 0){
perror("open");
return 1;
}
memset(&hints,sizeof(hints));
hints.ai_socktype = SOCK_STREAM;
hints.ai_family = PF_UNSPEC;//既适应IPv4又适应IPv6
if((err = getaddrinfo(argv[1],service,&hints,&res0)) != 0){
printf("error %d:%sn",err,gai_strerror(err));
return 1;
}
for(res = res0; res != NULL; res = res->ai_next){
sock = socket(res->ai_family,res->ai_socktype,res->ai_protocol);
if(sock < 0){continue;}
if(connect(sock,res->ai_addr,res->ai_addrlen) != 0){
close(sock);
continue;
}
break;
}
freeaddrinfo(res0);
if(res == NULL){
printf("Failedn");
return 1;
}
while((n = read(fd,buf,sizeof(buf))) > 0){
ret = write(sock,n);
if(ret < 1){
perror("write");
break;
}
}
close(sock);
return 0;
}
github源代码
发送端的执行方式:
./a.out 127.0.0.1 text.txt
文件接收端
#include
#include
#include
#include
#include
int sock0;
sockaddr_in client;
socklen_t len;
int sock;
addrinfo hints,*res;
int err;
int fd;
int n,ret;
char buf[65536];
if(argc != 2){return 1;}
fd = open(argv[1],O_WRONLY | O_CREAT,0600);
memset(&hints,sizeof(hints));
hints.ai_family = AF_INET;
hints.ai_flags = AI_PASSIVE;
hints.ai_socktype = SOCK_STREAM;
err = getaddrinfo(NULL,"12345",&res);
if(err != 0){
printf("error %d:%sn",gai_strerror(err));
return 1;
}
sock0 = socket(res->ai_family,0);
bind(sock0,res->ai_addrlen);
freeaddrinfo(res);
listen(sock0,5);
len = sizeof(client);
sock = accept(sock0,(sockaddr*)&client,&len);
while((n = read(sock,sizeof(buf))) > 0){
ret = write(fd,n);
}
close(sock);
close(sock0);
return 0;
}
github源代码
接收端的执行方式:
./a.out textsave.txt
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。