因为项目需要,客户端需要定时向服务器更新本地信息(注意网上大多可参考的是服务器发往客户端的,实际上区别不太大)。
我是编程小白,所以利用简单的socket编程和linux自带的定时发送应用crontab来实现。
废话不多说,上源码。
客户端client.cpp
//
// Created by harold on 16-11-15.
//
#include
#include
#include
#include
#include
#include
#define BUF_SIZE 1024 int main() { //check file FILE *fp = fopen("/home/server/test/1.txt", "rb"); if (fp == NULL) { printf("Cannot open file, press any key to exit!\n"); system("pause"); exit(0); } //create socket int sock = socket(AF_INET, SOCK_STREAM, 0); //send request to server(specific ip and port) struct sockaddr_in serv_addr; memset(&serv_addr, 0, sizeof(serv_addr)); serv_addr.sin_family = AF_INET; serv_addr.sin_addr.s_addr = inet_addr("127.0.0.1");//server's IP address. serv_addr.sin_port = htons(1234);//server's port connect(sock, (struct sockaddr *) &serv_addr, sizeof(serv_addr)); //send file char buffer[BUF_SIZE] = {0}; int nCount; while ((nCount = fread(buffer, 1, BUF_SIZE, fp)) > 0) { send(sock, buffer, nCount, 0); } fclose(fp); printf("File Transfer Finished!\n"); //close socket close(sock); return 0; }
服务器端server.cpp
#include
#include
#include
#include
#include
#include
#include
#define BUF_SIZE 1024 int main() { FILE *fp = fopen("/home/server/test/2.txt","wb"); if(fp==NULL){ printf("Cannot open file, press any key to exit!\n"); system("pause"); exit(0); } //create socket int serv_sock = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); //bind socket with IP and port struct sockaddr_in serv_addr; memset(&serv_addr,0,sizeof(serv_addr)); serv_addr.sin_family=AF_INET; serv_addr.sin_addr.s_addr=inet_addr("127.0.0.1");//ip address serv_addr.sin_port=htons(1234);//port bind(serv_sock,(struct sockaddr*)&serv_addr,sizeof(serv_addr)); //Into the listening state,waiting for client listen(serv_sock,20); //receiving request struct sockaddr_in clnt_addr; socklen_t clnt_addr_size=sizeof(clnt_addr); int clnt_sock=accept(serv_sock,(struct sockaddr*)&clnt_addr,&clnt_addr_size); //return response char buffer[BUF_SIZE]={0}; int nCount; while ((nCount = recv(clnt_sock, buffer, BUF_SIZE, 0)) > 0) { fwrite(buffer,nCount,1, fp); } fclose(fp); printf("Recieve File From Client Finished!\n"); //close socket close(clnt_sock); close(serv_sock); return 0; }
其中1.txt为客户端发送的文件,2.txt为服务器端接收的文件。