• 大小: 7KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-07
  • 语言: 其他
  • 标签: linux  c  文件传输  

资源简介

多客户端需要从服务器下载文件,本设计基于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


评论

共有 条评论