linux下socket编程之远程备份服务器
分别采用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编程之远程备份服务器相关推荐
- LINUX下Socket编程 函数格式详解
你需要了解的一些系统调用: socket() bind() connect() listen() accept() send() recv() sendto() recvfrom() close() ...
- Linux下Socket编程
Linux下Socket编程 网络的Socket数据传输是一种特殊的I/O,Socket也是一种文件描述符.Socket也具有一个类似于打开文件的函数调用Socket(),该函数返回一个整型的S ...
- 一文了解linux下socket编程
一文了解linux下socket编程 文章目录 一文了解linux下socket编程 1 网络编程的相关简述 1.1 引言 1.2 Tcp和Udp简介 1.3 TCP三次握手和四次挥手 1.4 网络编 ...
- linux下socket编程读写函数
linux下socket编程,实现服务器与客户端的通信之后,在同一个虚拟机上,打开两个shell,一个运行服务器程序,一个运行客户端程序,课相互发送数据. 如果使用的是recv接收函数,当关闭客户端或 ...
- [zz]Linux 下 socket 编程示例
本示例为 Client/Server 结构,通过代码演示 Client 如何建立连接,并向远程端发送数据:Server 端如何侦听系统连接请求,接收请求并建立连接,进而获取客户端发来的数据.代码虽短, ...
- linux下socket编程中setsockopt的作用
如题所示,在linux进行socket编程的时候,一般而言,socket,bind,listen三步曲之后,就开始接收客户端请求,然后实现收发数据. 如下所示的代码,是没有setsockopt的情况: ...
- linux socket 结构定义 send,Linux下Socket编程中用send发送结构体
Linux网络通信 Linux下多客户端聊天软件 最近在开发一个Linux下的聊天软件,好久没有做C语言的开发了,感觉到很多东西已经生疏了,这下又碰到用Socket传递结构体的问题,google了一下 ...
- C++服务器(一):了解Linux下socket编程
最近想要用C++写个socket的服务器,用于日常的项目开发. 不过,我是新手,那就慢慢地学习一下吧. 首先,先写一段程序,用起来先. 感谢博文: Linux下 C++调用C 实现socket网络通讯 ...
- 【Linux】Linux 下socket 编程
TCP/IP协议叫做传输控制/网际协议,又叫网络通信协议 TCP/IP虽然叫传输控制协议(TCP)和网际协议(IP),但是实际上是一组协议,包含ICMP, RIP, TELENET, FTP, SMT ...
最新文章
- python-selenum3 第五天定位——不常用定位与css定位详
- pox 中 openflow.webservice 组建的学习与使用
- 20个优秀的JavaScript 键盘事件处理库
- 4行代码解决:L1-057 PTA使我精神焕发 (5分)
- 原生Js_实现广告弹窗
- 地理知识归纳:影响降水的九大因素
- JEECG 版本更新日志
- Operations Manager 2007 R2系列之仪表板(多)视图
- C++编程实现单链表的逆置
- mysql快速启动_GitHub - TianSiQiang/Spring-Boot-MyBatis-Mysql: Spring Boot+MyBatis+Mysql 快速启动示例...
- AndroidStudio_安卓原生开发_获取系统S/N序列号_实现在springboot服务端_设备远程保活监控---Android原生开发工作笔记159
- foobar2000转换APE参数设置
- python之常用标准库
- 经验分享 怎么修改PDF文件中的图片以及文字
- 用参数方程绘制椭球体
- Istio 东西向流量管理
- CodeForces 68 A.Irrational problem(水~)
- 有向图的拓扑排序算法JAVA实现。
- 从零开始自制实现WebServer(十二)---- 剑指定时器小根堆处理 给EventLoop定时任务处理一个温暖的家
- 基于tidbV6.0探索tiflash在多标签组合场景下的使用