问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

Linux下网络编程文件传送问题

发布网友 发布时间:2022-05-05 23:06

我来回答

3个回答

热心网友 时间:2022-06-28 06:50

我用的就是下面的代码,就是不行,这就是我组合的,不知道哪里出问题了,请高手指点。谢谢!foreverxun.
//server.c
#include<stdlib.h>#include<stdio.h>#include<sys/types.h>#include<netdb.h>#include<errno.h>
#define MYPORT 12000#define BACKLOG 2#define MAXSIZE 4096
int b_link(int port){
int sockfd,ret,len,con_fd; struct sockaddr_in ser_addr;int nsize;
sockfd=socket(AF_INET,SOCK_STREAM,0);//建立一个ip/tcp套接口
if(sockfd<0){ printf("error in building a socket\n\a");return -1;}
ser_addr.sin_family=AF_INET;
ser_addr.sin_port=htons(port);
ser_addr.sin_addr.s_addr=htonl(INADDR_ANY);
bzero(&(ser_addr.sin_zero),8);
ret=bind(sockfd,(struct sockaddr *)&ser_addr,sizeof(struct sockaddr));//端口绑定
if(ret<0) {printf("error in binding port\n\a");return -1;}
ret=listen(sockfd,10);//端口监听.简单起见,只接受一个请求
if(ret<0){printf("error in listening \n\a");return -1;}
return sockfd;}
int b_access(int sockfd,char *buffn)//接受服务请求,接收文件
{
int con_fd;struct sockaddr_in cli_addr;int sin_size;sin_size=sizeof(struct sockaddr_in);
con_fd=accept(sockfd,(struct sockadd*)&cli_addr,&sin_size);//接受请求
if(con_fd<0){printf("error in accepting \n\a");close(sockfd);return -1;}
printf("client %s connect.......\n",inet_ntoa(*(struct sockaddr_in *)&cli_addr.sin_addr.s_addr));
int numbytes;
if((numbytes=recv(con_fd, buffn, 50, 0)) == -1){perror ( " recv " ) ;exit ( 1 ) ;return 0;}
printf("buffn content is %s .......\n",buffn);
char buf[MAXSIZE];FILE *File;int nsize;
File=fopen(buffn,"w");//打开一个文件用来保存传送的文件
if(File==NULL){ printf("error in creating conserve file %s \n\a",buf);close(sockfd); return -1;}
else printf("the file is stored in %s.....\n",buffn);
fflush(NULL);
while((nsize=recv(con_fd,buf,MAXSIZE,0))!=0)//接收文件
fwrite(buf,1,nsize,File); close(sockfd);//关闭套接口
return 1; }
int main(){
int sockfd,sockfdfn;
char buffn[50];
sockfd=b_link(MYPORT);
if(b_access(sockfd,buffn)>0)printf("file accept end \n\a");
else { printf("file accept failed \n\a");return 0;}
return 1;}
//client.c
#include<sys/types.h>#include<sys/socket.h>#include<netdb.h>#include<string.h>
#include<stdlib.h>#include<stdio.h>#define MAXSIZE 8096#define MYPORT 12000
int b_connect(char *hostname,int mp){
int sockfd,ret,len;struct sockaddr_in ser_addr;char *myname;struct hostent *sh;struct in_addr *addrs;
if((sh=gethostbyname(hostname))==NULL){
if((sh=gethostbyaddr(hostname,4,AF_INET))==NULL){printf("the host name couldn't be expressed \n\a");return -1;}}
printf("connecting to %s ......\n",inet_ntoa(*(struct sockaddr *)sh->h_addr_list[0]));
addrs=(struct in_addr *)sh->h_addr_list[0];
sockfd=socket(AF_INET,SOCK_STREAM,0);//创建一个套接口
if(sockfd<0){printf("error in building socket \n\a");return -1;}
ser_addr.sin_family=AF_INET;//协议ip/tcp
ser_addr.sin_port=htons(mp);//主机监听端口,转换成网络数字形式
memcpy(&(ser_addr.sin_addr.s_addr),addrs,sizeof(struct in_addr));//主机ip地址,网络数字形式
bzero(&(ser_addr.sin_zero),8);
ret=connect(sockfd,(struct sockaddr *)&ser_addr,sizeof(struct sockaddr));//与主机建立连接
if(ret<0){printf("error in conneting \n\a");return -1;}
return sockfd;};
int f_send(int sockfd,char *fs){
if (send(sockfd,fs,50,0) == -1){perror( " send fname error " );return 0;}
else printf("file name transfers succussly! \n\a");

FILE *File;int nsize;int i=0;char temp[MAXSIZE];char buf[MAXSIZE];
File=fopen(fs,"r");//打开要传送的文件
if(File==NULL){printf("file: %s open failed!.....\n",fs);return -1; }
while((nsize=fread(buf,1,MAXSIZE,File))>0){send(sockfd,buf,nsize,0);}
if(feof(File)!=0)printf("file transfers succussly!\n%d",strlen(buf));
else printf("error in reading file \n\a");
fclose(File);close(sockfd);return 1;
};
int main(void){
int sockfd,sockfdfn;char hostname[100];char file[100];
printf("please input the hostname(ip) you want to connect:");
fflush(NULL);gets(hostname);
printf("connect success!\nplease input the filename you want to transfer:");
gets(file);fflush(NULL);
sockfd=b_connect(hostname,12000);
if(sockfd<=0) return -1;
return f_send(sockfd,file);}

热心网友 时间:2022-06-28 06:50

问题描述不清楚,无法回答。

热心网友 时间:2022-06-28 06:51

说清楚两者组合是怎么组合的才能知道问题在哪
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
宜昌夷陵区丶西陵区哪个区最繁华 宜昌哪些地方租房子好 宜昌CBD中心商务区项目分段定位 宜昌哪个地段房子好 奥迪a6油箱盖按键在什么位置 奥迪a6汽车加油盖按钮在哪 奥迪a6油箱盖怎么开 奥迪a6油箱盖的开关在哪里 图文结合带你搞懂MySQL日志之Error Log(错误日志) 变电站电磁辐射安全标准 ...马自达车辆搭载创驰蓝天GVC系统技术的好处是什么? GVC是什么鬼?你们知道么? 雄壮的管弦音乐,像加勒比海盗里的那种。 网址,网页,网站分别是什么意思?通俗点说,百科那些看不太懂。 关于伟人经过无数次失败而成功的例子 索尼z2电池容量多大?续航能力怎么样 为什么我给别人发晚安,他只回一个晚字 鹿晗退出最新录制跑男? 男朋友不跟你说晚安,只说晚字是什么意思? 360利息这么高,怎么没有人举报 求文学少女字数 7000元的索尼Walkman ZX2值吗 请教自动档汽车爬陡坡和下陡坡的正确技巧 一个英语句子的翻译 退伍军人贷款需要带什么证件 政治经济学考试在线等!!!速度。20分内 失败很多次后成功的名人故事 鹿晗为何退出《这就是对唱》节目? 在linux系统下怎么取得windows系统下的文件 用房产证抵押贷款,一般多久能下来啊?贷六万,五年还清,每月还多少? 每天晚上和男朋友道晚安,他都只说一个字晚,为什么? 自动档汽车在陡坡行驶时用什么档 Data Guard结构中主数据库可以是单实例或是RAC结构,RAC是神马结构啊?求解.. 录制多年的节目,当初陈赫,邓超,鹿晗为何选择离开《奔跑吧》? 自动挡汽车在陡坡行驶时使用什么档 英语单词“over”为什么既有“结束”又有“超过”的意思? 剩下的水 英语怎么说? 里司令的资料谁有,听说他申论很厉害,我看过《樊政讲申论》,和樊政老师相比,他俩谁更厉害? 自动挡车陡坡停车怎么办 《五哈》第二季第一期为什么没有鹿晗? 自动挡的汽车怎么陡坡上起步 英语短语区分 奔跑吧兄弟第五季鹿晗又缺席录制 鹿晗为什么不敢坐飞机 英语高手进来啊!!几个初中短语的区别 打招呼说一个晚字什么意思? 有个女生给我发晚安总是只发一个“晚”字,什么意思,在线等,挺急的 我是拼多多商家,请问买家在我店刚成团就申请退款,选的缺货而且就极速退款了,这种怎么处理? 我给你女朋友发晚安 ,他总是发一个晚是什么意思? 男生对女生说晚什么意思 平时和你说晚安,但是今天却说了一个晚字是什么意思?这是不是说已经嫌弃你了?是我太烦的意思吗? 我和她说晚安,但她却回复一个晚字,这是什么意思呀?还是说她不想和我聊天了? 当你聊天时只收到一个晚字有什么意思