服务器:

#include

#include

#include

#include

#include

#include

#include

#define SERVER_PORT 6666

#define LISTEN_QUEUE 20

#define BUFFER_SIZE 1024

int main(int argc,char **argv)

{

struct sockaddr_in server_addr;

bzero(&server_addr,sizeof(server_addr));//全部置零

//设置地址相关的属性

server_addr.sin_family=AF_INET;

server_addr.sin_addr.s_addr=htons(INADDR_ANY);

server_addr.sin_port=htons(SERVER_PORT);

//创建套接字

int server_socket=socket(AF_INET,SOCK_STREAM,0);

if(server_socket<0)

{

printf("socket create error\n");

exit(1);

}

//绑定端口

if(bind(server_socket,(struct sockaddr*)&server_addr,sizeof(server_addr)))

{

printf("bind error\n");

exit(1);

}

//服务器端监听

if(listen(server_socket,LISTEN_QUEUE))

{

printf("Server listen error\n");

exit(1);

}

//服务器端一直运行

while(1)

{

pid_t pid;

struct sockaddr_in client_addr;

socklen_t length=sizeof(client_addr);

//accept返回一个新的套接字与客户端进行通信

int new_server_socket=accept(server_socket,(struct sockaddr*)&client_addr,&length);

//1*begin******************************************************************************

if(new_server_socket==-1)

{

printf("accept error\n");

continue;

}

else

{

printf("客户端%s连接成功\n",inet_ntoa(client_addr.sin_addr));

pid=fork();

//3*begin**运行子进程*************************************************************

if(pid==0)

{

int data_len,flag=0;

char buffer[BUFFER_SIZE];

// 定义文件流

FILE *stream;

bzero(buffer,BUFFER_SIZE);

strcpy(buffer,"请输入要传输的文件的完整路径:");

strcat(buffer,"\n");

send(new_server_socket,buffer,BUFFER_SIZE,0);

bzero(buffer,BUFFER_SIZE);

//2*begin**服务器接受数据*********************************************

if((stream=fopen("data","w"))==NULL)

{

printf("file open error\n");

exit(1);

}

else

{

bzero(buffer,BUFFER_SIZE);

}

// printf("正在接收来自%s的文件....\n",inet_ntoa(client_addr.sin_addr));

//先将数据接受到缓冲区buffer中,再写入到新建的文件中

while(data_len=recv(new_server_socket,buffer,BUFFER_SIZE,0))

{

flag++;

if(flag==1)

{

printf("正在接收来自%s的文件....\n",inet_ntoa(client_addr.sin_addr));

}

if(data_len<0)

{

printf("接收错误\n");

exit(1);

}

//向文件中写入数据

int write_len=fwrite(buffer,sizeof(char),data_len,stream);

if(write_len>data_len)

{

printf("file write failed\n");

exit(1);

}

bzero(buffer,BUFFER_SIZE);

}

if(flag>0)

printf("%s的文件传送完毕\n",inet_ntoa(client_addr.sin_addr));

if(flag==0)

printf("%s的文件传输失败\n",inet_ntoa(client_addr.sin_addr));

//2*end**服务器接受数据****************************************************

// rename("data",inet_ntoa(client_addr.sin_addr));

fclose(stream);

rename("data",inet_ntoa(client_addr.sin_addr));

exit(1);

}

//3*end**运行子进程**********************************************************

else

{

close(new_server_socket);

}

}

//1*end**************************************************************************************

close(new_server_socket);

}

return 0;

}

客户端:

#include

#include

#include

#include

#include

#include

#include

#include

#define SERVER_PORT 6666

#define BUFFER_SIZE 1024

int main(int argc,char **argv)

{

if(argc!=2)

{

printf("参数错误,清输入两个参数\n");

exit(1);

}

FILE *stream;

struct sockaddr_in server_addr;

bzero(&server_addr,sizeof(server_addr)); //把一段内存区的内容全部设置为0

server_addr.sin_family = AF_INET; //internet协议族

server_addr.sin_addr.s_addr = inet_addr(argv[1]);

server_addr.sin_port = htons(SERVER_PORT);

int sfd;

sfd=socket(AF_INET,SOCK_STREAM,0);

if(sfd<0)

{

printf("socket error\n");

exit(0);

}

if(connect(sfd,(struct sockaddr*)&server_addr,sizeof(server_addr)) < 0)

{

printf("Can Not Connect To %s\n",argv[1]);

exit(1);

}

char buffer[BUFFER_SIZE];

bzero(buffer,BUFFER_SIZE);

int length = recv(sfd,buffer,BUFFER_SIZE,0);

if(length < 0)

{

printf("Recieve Data From Server %s Failed!\n", argv[1]);

exit(1);

}

printf("\n%s\n",buffer);

bzero(buffer,BUFFER_SIZE);

// fgets(buffer,1024,stdin);

// char filename[100];

gets(buffer);

//打开文件流

if((stream=fopen(buffer,"r"))==NULL)

{

printf("the file was not opened\n");

exit(1);

}

bzero(buffer,BUFFER_SIZE);

printf("正在传输...\n");

int len=0;

//不断读取并发送数据

while((len=fread(buffer,1,1024,stream))>0)

{

// printf("len=%d\n",len);

if(send(sfd,buffer,len,0)<0)

{

printf("send file error\n");

break;

}

bzero(buffer,BUFFER_SIZE);

}

if(fclose(stream))

{

printf("file close error\n");

exit(1);

}

close(sfd);

return 0;

}

服务器端运行:

客户端运行:

在服务器端的程序中,当一个客户端连接,就创建一个独立的进程

利用tcp完成文件传输linux,Linux下基于TCP的文件传输相关推荐

  1. Linux下基于TCP的简易文件传输(socket编程)

    Linux下基于TCP的简易文件传输(socket编程) OSI和TCP/IP: 关于TCP/IP协议 关于TCP协议 TCP编程的一般步骤[^2] TCP文件传输实现 功能概述 服务器编程 客户端编 ...

  2. Linux操作系统下的TCP/IP网络通信

    基于Linux操作系统下的TCP/IP网络通信研究与应用 摘要:实现了一种全集成可变带宽中频宽带低通滤波器,讨论分析了跨导放大器-电容(OTA-C)连续时间型滤波器的结构.设计和具体实现,使用外部可编 ...

  3. linux系统上运行sh,Linux系统下如何运行.sh文件的实现

    Linux系统下如何运行.sh文件的实现 在Linux系统下运行.sh文件有两种方法,比如我在root目录下有个datelog.sh文件 第一种(这种办法需要用chmod使得文件具备执行条件(x): ...

  4. 如何查看linux系统下的各种日志文件 linux 系统日志的分析大全

    如何查看linux系统下的各种日志文件 linux 系统日志的分析大全 日志分类: 1. 连接时间的日志 连接时间日志一般由/var/log/wtmp和/var/run/utmp这两个文件记录,不过这 ...

  5. Linux下导出MySQL为SQL文件_在linux命令下导出导入.sql文件的方法

    本文讲述了在linux命令下导出导入.sql文件的方法.分享给大家供大家参考,具体如下: 一.导出数据库用mysqldump命令(注意mysql的安装路径,即此命令的路径): 1.导出数据和表结构: ...

  6. linux通过iso安装php,linux系统下怎么安装iso文件?

    linux系统下怎么安装iso文件? 安装步骤: 1.在/mnt目录下,创建相应的iso文件夹,例如iso. 2.运行以下命令,挂载iso文件mount -o loop /home/tecmint/F ...

  7. dd指令打包iso文件 linux_Linux_如何在Linux操作系统下创建ISO镜像文件,1、用dd命令#dd if=/dev/cdrom - phpStudy...

    如何在Linux操作系统下创建ISO镜像文件 1.用dd命令 #dd if=/dev/cdrom of=/***/目的文件.iso 上面的命令是在将光盘作成iso文件 2.用mkisofs 命令 #m ...

  8. linux系统下怎么安装.deb文件?

    linux系统下怎么安装.deb文件? deb 是 ubuntu .debian 的格式. rpm 是 redhat .fedora .suse 的格式. 他们不通用(虽然可以转换一下). deb是d ...

  9. linux系统下 压缩和解压缩文件命令

    linux系统下 压缩和解压缩文件命令 1.把/home目录下面的mydata目录压缩为mydata.zip zip -r mydata.zip mydata #压缩mydata目录 2.把/home ...

  10. c++网络编程——用TCP实现文件传输(windows下基于VS2017)

    c++网络编程--用TCP实现文件传输 定义文件传输协议 服务端代码 客户端代码 测试 文件传输协议FTP是基于TCP协议实现的,为了体验这个过程,本文自定义一个简单的文件传输协议,并基于TCP协议编 ...

最新文章

  1. 区块链还能赚钱吗 区块链挖矿赚钱吗
  2. JSP页面传值出现中文乱码的问题
  3. HDU - 1024 Max Sum Plus Plus 最大m段子段和+滚动数组优化
  4. 利用sql_trace跟踪一个指定会话的操作
  5. 人人都在谈的图数据库到底是个啥?
  6. 无线通信定位一体化进展及其在煤矿井下应用分析
  7. 宠物管理系统CLI版本(Python实现/内附完整代码)
  8. 数据抽取常见的几种模式
  9. 《花花公子》的封面女郎,计算机图像界的女神
  10. 移动硬盘插入提示需要格式化RAW_分区变成RAW格式怎么办?
  11. linux保险箱软件,手机加密App哪个好?手机加密软件推荐
  12. 阿里妈妈不能攻百度也不能守淘宝 !
  13. 【UCIe】初识 UCIe
  14. NLP与ChatGPT的碰撞:大模型和小模型联合发力
  15. go用函数字符串名调用函数
  16. (附源码)springboot 新闻管理系统 毕业设计 211113
  17. linux下交叉编译jrtplib-3.9.1
  18. 标题使用java计算三维空间中两点的欧几里德距离
  19. 基于开源WebSocket服务器宝贝鱼(CshBBrain)的应用横空出世
  20. distribute-list分发列表

热门文章

  1. 学习Linux命令(33)
  2. Python单线程、多线程、多进程运行效率评测对比
  3. 2022-1-29 Leetcode 648.单词替换
  4. P3353 在你窗外闪耀的星星(前缀和)
  5. 乐行科技获2540万元天使融资,投资方为英诺天使
  6. linux设置时间夏令时,Linux夏令时是怎么调整的
  7. 打开声音设备需要使用waveOutOpen函数
  8. 量具管理-分发与报废
  9. 【开源代码】Wheel-SLAM:首个只有一个 Wheel-IMU 使用地形特征(由 Wheel-IMU 测量)的 SLAM 系统
  10. 可以恢复SD卡丢失的数据的工具推荐