linux——客户端服务器文件传输
实现文件传输并不难,只需用fopen、fread、fwrite、fclose这几个函数对文件操作即可。文本文件就不说了,我们就已下图为例。
我们先来看看这个图片文件里装的是什么,我们以notpad++打开这个图片,结果如下,是一堆乱码。
我们在已二进制方式打开,方式如下:
首先打开vs的一个项目
选择一张图片
这张图片添加到源文件后,右键这张图片,选择打开方式
选择二进制编辑器
结果如下
图片文件是以二进制方式存储的,因为二进制更加节省空间,所以我们在用fopen函数时注意都要以二进制的形式读或写。
我们以客户端作发送方,服务器作接收方,先在客户端的源码目录下放一张图片123.jpg,启动服务器后在启动客户端,便在服务器的目录下产生一张与123.jpg一样的图片456.jpg。
服务器
#include <sys/socket.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <stdio.h>
#include <string.h>
#include <netinet/in.h>
int main()
{struct sockaddr_in sock;memset(&sock,0,sizeof(sock));sock.sin_family=AF_INET;sock.sin_port=htons(5188);sock.sin_addr.s_addr=htonl(INADDR_ANY);int sockid=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);const int on=1;setsockopt(sockid,SOL_SOCKET,SO_REUSEADDR,&on,sizeof(on));if(bind(sockid,(struct sockaddr *)&sock,sizeof(sock))<0){printf("bind\n");return 0;}if(listen(sockid,SOMAXCONN)<0){printf("listen\n");return 0;}struct sockaddr_in other_sock;socklen_t other_socklen=sizeof(other_sock);int client_sockid=accept(sockid,(struct sockaddr *)&other_sock,&other_socklen);printf("ip=%s,port=%d\n",inet_ntoa(other_sock.sin_addr),ntohs(other_sock.sin_port));FILE *fp=fopen("456.jpg","wb");char receive[4096]={0};int r_size=0;while(1){memset(receive,0,sizeof(receive));if((r_size=read(client_sockid,receive,sizeof(receive)))==0)//读取文件内容,如果客户端已全部发送,则read返回0,因为客户端发送完后就退出{printf("已成功接收\n");break;}fwrite(receive,1,r_size,fp);//读了多少数据就往文件里写多少数据}close(client_sockid);close(sockid);fclose(fp);return 0;
}
客户端
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
int main()
{struct sockaddr_in sock;memset(&sock,0,sizeof(sock));sock.sin_family=AF_INET;sock.sin_port=htons(5188);sock.sin_addr.s_addr=inet_addr("***");//服务器ipint sockid=socket(PF_INET,SOCK_STREAM,IPPROTO_TCP);socklen_t socklen=sizeof(sock);connect(sockid,(struct sockaddr *)&sock,socklen);FILE *fp=fopen("123.jpg","ab");char send[4096]={0};int r_size;while(!feof(fp))//判断文件指针是否到达文件末尾{r_size=fread(send,1,sizeof(send),fp);//读取文件数据write(sockid,send,r_size);,//读多少数据就发多数据给服务器memset(send,0,strlen(send));}printf("发送成功\n");close(sockid);fclose(fp);return 0;
}
用这个办法不仅可以传输文件,还可以传输视频文件,只需把文件名称更改一下即可
linux——客户端服务器文件传输相关推荐
- udp文件服务器,UDP客户端服务器文件传输
我想通过UDP将数据包从客户端发送到服务器.我面临的问题是,如果最后一个数据包大小小于我们正在读取的字节数组的大小,那么来自先前数据包的冗余数据将被附加到它.我试着只将最后一个数据包的正确部分复制到一 ...
- java服务器客户端文件,客户端服务器文件传输Java
这是我使用的方法,它使用套接字的输入和输出流来发送和接收文件,完成后,它将自动重新启动服务器并从客户端重新连接到服务器. 服务器代码: package app.server; import java. ...
- mac服务器文件传输,scp实现mac与linux服务器之间文件传输
1.mac上传文件到linux服务器 scp 文件名 用户名@服务器ip:目标路径 如:scp -P端口号 /Users/test/testFile test@xxx.xxx.xxx.xxx:/tes ...
- tftpd32服务器软件在Windows与linux 下的文件传输(服务器ip 的设置问题)
tftpd32服务器软件在Windows与linux 下的文件传输 https://blog.csdn.net/stoic163/article/details/42804421 2015年01月17 ...
- 本地 服务器 文件传输,本地服务器文件传输
本地服务器文件传输 内容精选 换一换 CDM支持周期性自动将新增文件上传到OBS,不需要写代码,也不需要用户频繁手动上传即可使用OBS的海量存储能力进行文件备份.这里以CDM周期性备份FTP的文件到O ...
- Windows 与 Linux之间进行文件传输,文件传输工具Cuteftp的使用方法。
文件传输工具Cuteftp的使用方法 Cuteftp是一款FTP客户端软件,只要在linux上安装.启动了FTP服务,就可以使用Cuteftp在Windows 与 Linux之间进行文件传输. 一. ...
- Linux 几种文件传输方式
本文记录linux系统中文件传输的多种方式,留作备忘.linux中文件传输的方式有ftp,scp,rsync,rz,sz等,但各个工具的功能又有所区别: FTP : FTP是文件服务器,可实现文件的上 ...
- 云服务器 文件 传输,云服务器文件 传输
云服务器文件 传输 内容精选 换一换 ISO是一种光盘映像文件,通过特定的压缩方式,将大量的数据文件统一为一个后缀名为iso的映像文件.ISO文件可以理解为从光盘中复制出来的数据文件,所以ISO文件无 ...
- 文件传送到服务器的软件,远程服务器文件传输软件
远程服务器文件传输软件 内容精选 换一换 已成功登录Java性能分析.待安装分析辅助软件的服务器已开启sshd.待安装分析辅助软件的服务器已安装JRE,JRE版本要求为Open JDK 11.Java ...
最新文章
- String是一个很普通的类 - Java那些事儿
- 地磅称重软件源码_【漯河衡器】浅谈地磅称重的发展趋势
- ES6-7 - 箭头函数的实质、箭头函数的使用场景
- foreach循环符合就不往下走了_柴油发电机组冷却液循环故障解决方法
- Jenkins 2.322 安装 自定义插件
- 计算机相关专业的自我评价,计算机相关专业的学生自我评价
- Word 2013 打开时提示Windows installer窗口,然后安装失败
- 计算机软件技术职业工作规划,软件技术职业规划书.docx
- String类型相关的题
- MUI框架常用代码段
- EOJ Monthly 2017.12 B. 在哈尔滨的寒风中(规律)
- smartsvn学习(-)
- 戏说CAD开发 最简单角度看CAD软件
- svg中 path标签的d属性
- 微信小程序--实现拨打电话功能
- Unity游戏制作问题整理(1)--添加按钮声音
- 东南蒙纳士计算机复试,2016年东南大学——蒙纳士大学双硕士学位研究生复试通知...
- 经典白话算法之桶排序
- 揭秘狂热的支付宝红包“薅羊毛”套路赚钱法
- collapse在PHP中是什么意思,在PHP中全面禁止SQL注进式攻击之二