资源简介
多客户端需要从服务器下载文件,本设计基于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
相关资源
- STM32F103RC+ADC+DMA多通道采样LCD显示
- Modbus协议官方文档中、英文全
- pcbtemp电流计算软件
- I2C读写AT24C02 基于STM32F103 cube116540
- Scratch源码
- Microsoft Forms 2.0107770
- 实验三 消息中间件应用开发:Active
- WCE注入工具
- ModelGoon-4.4.1-site.zip
- AsyncTask文件控制暂停和继续,在状态
- Visio大全模具(含Cisco、IBM等常用拓扑
- 信号奇异点Lipschitz指数计算
- 基于STM32RCT6的步进电机驱动程序
- 酒店管理系统基于Qt Creator5)
- 用友NC开发API字典
- Navicat Premium 15汉化包.zip55438
- 登录注册界面.zip48872
- 条码字体barcode128
- Rational Rose Common破解文件
- res10_300x300_ssd_iter_140000.caffemodel与dep
- scratch 第1课 翻跟斗的小猫(入门)
- stm32f407上的两个can发送和接收例程
- Scrach 欢乐狙击手.sb2
- 04741计算机网络原理知识点整理.docx(
- Wolfram Mathematica 矩阵初等变换函数(
- pscad近海风电模型 Fortran语言
- 程序员专用字体YaHei.Consolas.1.11b42517
- scratch3.0 源程序(说相声)
- AutoCAD永久去教育版破解补丁
- 开源1A锂电池充电板TP4056原理图+PCB
评论
共有 条评论