资源简介
多客户端需要从服务器下载文件,本设计基于socket通信完成的文件分发。
代码片段和文件信息
#include //for socket
#include //for socket
#include //for bzero
#include //for sockaddr_in
#include //for errno
#include //for
#include //for printf
#include
#include
#include
#include
#include
#include
#include
#include //for mulu
#define MAXBUF 1024
//#define MYPORT 22222
//#define IPADRESS “127.0.0.1“
#define MD5FILE “temp.md5“ //定义存放md5值的文件
#define TEMPFILE “temp“
#define max(xy) ((x>y)?1:0)
#define PATHNAME “/home/raohl/Desktop/client/client“
#define LOGPATH “/home/raohl/Desktop/client/client/log“
#define LOGFILE “client.log“
void setdir(void); //工作环境配置
void useage(void); //使用方法信息
void getcurrenttime(void); //获取当前时间
void writelog(char ptr[]); //记录日志
void can_write(char *filename); //发送文件处理
void handle_sock(int socketchar *filename); //socket处理
int CreateDir(const char *sPathName); //创建目录
int getfilemd5(char *md5valuechar *filename); //获取md5
int getlasttime(char *filelasttimechar *filename);//获取文件最新更新时间
int main(int argcchar **argv)
{
struct sockaddr_in dest;//与服务器连接
int sockfd;//监听sock
int len;
char server_ip[30];
char filename[200];
struct stat tfile;
unsigned int server_port;
char buffer[MAXBUF+1];
if (argc != 4)
{
useage();//help info
printf(“error formatit must be:\n\t\t%s IP port filename\n“argv[0]);
writelog(“Client input format error!!\n“);
exit(EXIT_FAILURE);
}
//获取当前时间
getcurrenttime();
//change work path
setdir();
//get current path env
char *p;
p=getcwd(NULL128);
printf(“current path :%s\n“p);
free(p);
bzero(server_ipsizeof(server_ip));
bzero(filenamesizeof(filename));
strncpy(server_ip argv[1] strlen(argv[1]));
server_port = atoi(argv[2]);
strncpy(filename argv[3] strlen(argv[3]));
//创建本地socket
if ((sockfd=socket(AF_INETSOCK_STREAM0))<0)
{
perror(“SOCKET no exist“);
writelog(“Client Create Socket error!!\n “);
exit(errno);
}
else
printf(“\n\t\t\t...File Client start on...\n Create socket success. SOCKET=%d\n\r“sockfd);
bzero(&destsizeof(dest));
dest.sin_family=AF_INET;
dest.sin_port=htons(atoi(argv[2]));
if (inet_aton(argv[1](struct in_addr *) &dest.sin_addr.s_addr)==0)
{//服务器的IP地址来自程序的参数,取决于服务器设置
perror(“argv[1]“);
writelog(“Client input IP error!!\n“);
exit(errno);
}
//发起连接
if (connect(sockfd (struct sockaddr *) &destsizeof(dest))==-1)
{
perror(“Connect!!!error!!!\n“);
writelog(“Client connect server error!!\n“);
exit(errno);
}
printf(“ Server Already Connected!! Waiting...\n“);
//文件名发送给服务器
bzero(buffersizeof(buffer));
sprintf(buffer“%s“filename);
writelog(“\n文件下载判断中.......\n“);
send(sockfdbufferstrlen(buffer)0);
// 接收md5和最近文件的更新时间
bzero(buffersizeof(buffer));
if((recv(sockfdbufferMAXBUF0))<=0)
{
writelog(“The s
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 9491 2012-08-08 11:10 server.c
文件 9346 2012-08-07 14:22 client.c
----------- --------- ---------- ----- ----
18837 2
相关资源
- ArcGIS.txt
- 硬盘分区全部丢失只剩C盘的恢复方法
- SDLC协议的FPGA实现
- 帆哥模块.ce
- libpng-1.0.10rc1.tar.tar
- DDC相关的VerilogHDL源代码
- MacOS系统镜像
- psd文件修复工具AdvancedPSRepair
- Jpcap 64位,完整一套包括WinpcapJpcapjp
- Multi-View K-Means Clustering on Big Data
- 51单片机IO模拟SPI和25lc1024通信
- linux rootkit源码
- 基于Socket的网络通信大作业 含可运行
- 基于PSCAD的故障选相
- 基于OpenCV实现的图片识别功能源码
- TLC1543程序与仿真图
- source insight 3.x 中文插件包
- linux下shell编程实验报告-考勤系统
- 采用SARScape进行PS处理流程
- kuangbin的经典ACM算法模板几乎涵盖所有
- camera tuning file
- 16X16点阵仿真_C程序
- ArcGIS Server 和Portal 10.5 授权证书 ecp
-
Multi-focus image fusion ba
sed on wavelet t - 经典MVC登录代码
- 科大讯飞XFS5152语音合成SPI驱动的C51源
- Barcode components for QuickReport.
- TMS320F28335PGFA原理图库PCB封装库
- DOS三个基本启动文件COMMAND.COM MS-DOS.
- 控制小直流电机转速微机原理课程设
评论
共有 条评论