分别采用TCP或UDP协议编写一个远程数据备份服务器,运行客户端将本地文件备份到远程的服务器中。

服务器的功能:接受客户端请求,把客户端的文件进行备份(可以备份到指定的文件夹)。

客户端的功能:与远程服务器进行连接,在连接后把本地的文件发送给远程备份服务器。

开发环境:fedora13,vim,gcc

copyserver.c文件

#include<stdio.h>
#include<unistd.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<time.h>
#include<netdb.h>
#include<stdlib.h>
#include<string.h>
#define PORT 1234
#define BACKLOG 5
#define MAXSIZE 32
struct user
{char name[20];char passwd[20];
}u,u1;
int main()
{int listenfd, connectfd,num;struct sockaddr_in server;struct sockaddr_in client;socklen_t addrlen;char buf[MAXSIZE];char dir[50];
//  u.name={"d","a","i","z","h","e"};
//  u.passwd={"1","1","1","1","1","1"};FILE * fd;if((listenfd = socket(AF_INET, SOCK_STREAM, 0)) == -1){perror("socket() error.");return 0;}int opt = SO_REUSEADDR;setsockopt(listenfd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt));bzero(&server, sizeof(server));server.sin_family = AF_INET;server.sin_port = htons(PORT);server.sin_addr.s_addr = htonl(INADDR_ANY);if(bind(listenfd, (struct sockaddr *)&server, sizeof(server)) == -1){perror("bind() error.");return 0;}if(listen(listenfd, BACKLOG) == -1){perror("listen() error.");return 0;}addrlen = sizeof(client);if((connectfd = accept(listenfd, (struct sockaddr *)&client, &addrlen )) == -1){perror("accept() error.");return 0;}elseprintf("It's Connected\n");
//  recv(connectfd,u1.name,20,0);
//  recv(connectfd,u1.passwd,20,0);
//  printf("%s",u1.name);printf("Please input directory of copy\n");scanf("%s",dir);fd=fopen(dir,"wb");while(num=recv(connectfd,buf,1,0)>0){fwrite(buf,1,num,fd);}fclose(fd);close(connectfd);return 1;
}

copyclient.c文件

#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<string.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<netdb.h>#define PORT 1234   /*listen port*/
#define MAXSIZE 32
struct user
{char name[20];char passwd[20];
}u;
int main ( int argc, char *argv[])
{int sockfd,num;struct hostent *he;struct sockaddr_in server;char buf[MAXSIZE];char dir[50];FILE *fd;if(argc!=2){printf("usage %s<ip address>\n",argv[0]);return 0;}/*get ip address*/if((he = gethostbyname(argv[1])) == NULL){printf("gethostbyname error\n");return 0;}if((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1){printf("socket() error \n");return 0;}bzero(&server, sizeof(server));server.sin_family = AF_INET;server.sin_port = htons(PORT);server.sin_addr = *((struct in_addr *)he->h_addr);if(connect(sockfd, (struct sockaddr *)&server, sizeof(server)) == -1){printf("connetc() error\n");return 0;}printf("connect success.\n");printf("Please input your name:");
//  scanf("%s",u.name);
//  printf("Please input your password:");
//  scanf("%s",u.passwd);
//  send(sockfd,u.name,20,0);
//  send(sockfd,u.passwd,20,0);printf("Please input file's directory\n");scanf("%s",dir);fd = fopen(dir,"rb");while((num=fread(buf,1,MAXSIZE,fd))>0){send(sockfd,buf,num,0);}fclose(fd);close(sockfd);return 1;}

运行结果:

linux下socket编程之远程备份服务器相关推荐

  1. LINUX下Socket编程 函数格式详解

    你需要了解的一些系统调用: socket() bind() connect() listen() accept() send() recv() sendto() recvfrom() close() ...

  2. Linux下Socket编程

    Linux下Socket编程    网络的Socket数据传输是一种特殊的I/O,Socket也是一种文件描述符.Socket也具有一个类似于打开文件的函数调用Socket(),该函数返回一个整型的S ...

  3. 一文了解linux下socket编程

    一文了解linux下socket编程 文章目录 一文了解linux下socket编程 1 网络编程的相关简述 1.1 引言 1.2 Tcp和Udp简介 1.3 TCP三次握手和四次挥手 1.4 网络编 ...

  4. linux下socket编程读写函数

    linux下socket编程,实现服务器与客户端的通信之后,在同一个虚拟机上,打开两个shell,一个运行服务器程序,一个运行客户端程序,课相互发送数据. 如果使用的是recv接收函数,当关闭客户端或 ...

  5. [zz]Linux 下 socket 编程示例

    本示例为 Client/Server 结构,通过代码演示 Client 如何建立连接,并向远程端发送数据:Server 端如何侦听系统连接请求,接收请求并建立连接,进而获取客户端发来的数据.代码虽短, ...

  6. linux下socket编程中setsockopt的作用

    如题所示,在linux进行socket编程的时候,一般而言,socket,bind,listen三步曲之后,就开始接收客户端请求,然后实现收发数据. 如下所示的代码,是没有setsockopt的情况: ...

  7. linux socket 结构定义 send,Linux下Socket编程中用send发送结构体

    Linux网络通信 Linux下多客户端聊天软件 最近在开发一个Linux下的聊天软件,好久没有做C语言的开发了,感觉到很多东西已经生疏了,这下又碰到用Socket传递结构体的问题,google了一下 ...

  8. C++服务器(一):了解Linux下socket编程

    最近想要用C++写个socket的服务器,用于日常的项目开发. 不过,我是新手,那就慢慢地学习一下吧. 首先,先写一段程序,用起来先. 感谢博文: Linux下 C++调用C 实现socket网络通讯 ...

  9. 【Linux】Linux 下socket 编程

    TCP/IP协议叫做传输控制/网际协议,又叫网络通信协议 TCP/IP虽然叫传输控制协议(TCP)和网际协议(IP),但是实际上是一组协议,包含ICMP, RIP, TELENET, FTP, SMT ...

最新文章

  1. python-selenum3 第五天定位——不常用定位与css定位详
  2. pox 中 openflow.webservice 组建的学习与使用
  3. 20个优秀的JavaScript 键盘事件处理库
  4. 4行代码解决:L1-057 PTA使我精神焕发 (5分)
  5. 原生Js_实现广告弹窗
  6. 地理知识归纳:影响降水的九大因素
  7. JEECG 版本更新日志
  8. Operations Manager 2007 R2系列之仪表板(多)视图
  9. C++编程实现单链表的逆置
  10. mysql快速启动_GitHub - TianSiQiang/Spring-Boot-MyBatis-Mysql: Spring Boot+MyBatis+Mysql 快速启动示例...
  11. AndroidStudio_安卓原生开发_获取系统S/N序列号_实现在springboot服务端_设备远程保活监控---Android原生开发工作笔记159
  12. foobar2000转换APE参数设置
  13. python之常用标准库
  14. 经验分享 怎么修改PDF文件中的图片以及文字
  15. 用参数方程绘制椭球体
  16. Istio 东西向流量管理
  17. CodeForces 68 A.Irrational problem(水~)
  18. 有向图的拓扑排序算法JAVA实现。
  19. 从零开始自制实现WebServer(十二)---- 剑指定时器小根堆处理 给EventLoop定时任务处理一个温暖的家
  20. 基于tidbV6.0探索tiflash在多标签组合场景下的使用

热门文章

  1. 【王者荣耀】皮肤-英雄 预测(tensorflow)
  2. java可以编写siri_揭秘Siri,苹果发布论文阐释语音助手设计想法
  3. 设置输入框和按钮对齐
  4. 苹果审核reject理由大全(6):欺骗用户下载、引导用户5星好评
  5. 企业里下一代人工智能助手
  6. 如何实时监测服务器某个端口通不通
  7. ijidea搭建springMVC入门程序,配置TomCat
  8. 【带修莫队】CodeForces 940F Machine Learning
  9. python训练词库_jieba 分词库(python)
  10. 【毕设精选】基于SpringBoot和Vue的相关系统