資源簡介
多客戶端需要從服務器下載文件,本設計基于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
評論
共有 條評論