加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c/c++ 源码之文件传输(文件发送端、文件接收端)

发布时间:2020-12-15 04:54:13 所属栏目:百科 来源:网络整理
导读:网络编程 文件传输 1,文件发送端 2,文件接收端 文件发送端: #include #include #include #include #include //结构体addrinfo,in_addr #include #include #include #include int main(int argc,char* argv[]){ char* service = "12345"; addrinfo hints,*

网络编程 文件传输

1,文件发送端

2,文件接收端

文件发送端:

#include

#include

#include

#include

#include //结构体addrinfo,in_addr

#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 //结构体addrinfo,char* argv[]){

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读