Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1113
  • 博文数量: 3
  • 博客积分: 65
  • 博客等级: 民兵
  • 技术积分: 35
  • 用 户 组: 普通用户
  • 注册时间: 2012-08-17 18:36
文章分类
文章存档

2012年(3)

我的朋友
最近访客

分类: WINDOWS

2012-08-17 18:47:13

//*******************************************************客户端

#include
#include
#include
#include
#include
#include
#include

#define BUFFER_SIZE 1024
#define FILE_NAME_MAX_SIZE 512

int user_number=0;

int client_download();
int client_upload();

int client_login()
{
 WORD wVersionRequested;
 WSADATA wsaDATA;
 int err;

 wVersionRequested = MAKEWORD(1,1);

 err=WSAStartup(wVersionRequested,&wsaDATA);
 if(err!=0)
 {
  return 0;
 }

 if(LOBYTE(wsaDATA.wVersion)!=1 ||HIBYTE(wsaDATA.wVersion)!=1)
 {
  WSACleanup();
  return 0;
 }

 SOCKET sockClient=socket(AF_INET,SOCK_STREAM,0);

 SOCKADDR_IN addrSrv;
 addrSrv.sin_addr.S_un.S_addr=inet_addr("192.168.220.128");
 addrSrv.sin_family=AF_INET;
 addrSrv.sin_port=htons(8888);
 connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));

 char buffer[100];
 char name[20],passwd[20];
 memset(buffer,'\0',100);
 while(1)
 {
 /*recv(sockClient,recvBuf,100,0);
 printf("%s\n",recvBuf);
 send(sockClient,"This is duanmaotao!!",strlen("This is duanmaotao!!")+1,0);*/
 if(recv(sockClient,buffer,100,0))
 {
  printf("%s",buffer);
  memset(buffer,'\0',100);
  scanf("%s",name);
  send(sockClient,name,20,0);
  while(1)
  {
   if(recv(sockClient,buffer,100,0))
   {
     printf("%s",buffer);
     scanf("%s",passwd);
     send(sockClient,passwd,20,0);
     memset(buffer,'\0',100);
     while(1)
     {
      // log information
      char number[25];
      memset(number,'\0',25);
      /* recv(sockClient,number,25,0);
      user_number=atoi(number);*/
      

      if(recv(sockClient,buffer,100,0))
      {
       system("cls");
       char temp[BUFFER_SIZE];
       strcpy(temp,buffer);
       printf("%s",temp);
       if(temp[0]=='*')
       {
        printf("-------------------------------------------------------------------------------\n");
        printf("Please choose the service!!\n");
        printf("1 download\n");
        printf("2 upload\n");//暂时不考虑其他的情况
        printf("3 exit\n");
        memset(buffer,'\0',100);
        scanf("%s",buffer);
        send(sockClient,buffer,100,0);
        if(buffer[0]=='1')
        {
         recv(sockClient,number,25,0);
         user_number=atoi(number);
         //printf("You are the %dth client\n",user_number);
         client_download();
        }
        if(buffer[0]=='2')
        {
         recv(sockClient,number,25,0);
         user_number=atoi(number);
         //printf("You are the %dth client\n",user_number);
         client_upload();
        }
        if(buffer[0]=='3')
        {
         printf("Servic end!!!\n");
         return 1;
        }
        return 1;
       }
       else
        return -1;
      } 
     }
     break;
   }
  
   }
    break;
  }
 }
 
 closesocket(sockClient);
 WSACleanup();
 return 1;
}

void main()
{
 client_login();
 
}

int client_download()
{
    int to_fd,file_fd;
    int bytes_read,bytes_write;
    char buffer[BUFFER_SIZE];
    char *ptr;

 WORD wVersionRequested;
 WSADATA wsaDATA;
 int err;

 wVersionRequested = MAKEWORD(1,1);

 err=WSAStartup(wVersionRequested,&wsaDATA);
 if(err!=0)
 {
  return 0;
 }

 if(LOBYTE(wsaDATA.wVersion)!=1 ||HIBYTE(wsaDATA.wVersion)!=1)
 {
  WSACleanup();
  return 0;
 }

 SOCKET sockClient=socket(AF_INET,SOCK_STREAM,0);

 SOCKADDR_IN addrSrv;
 addrSrv.sin_addr.S_un.S_addr=inet_addr("192.168.220.128");
 addrSrv.sin_family=AF_INET;
 addrSrv.sin_port=htons(7777+user_number);
 connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
   
 memset(buffer,'\0',1024);
 recv(sockClient,buffer,1024,0);
 system("cls");
 printf("-------------------------------------------------------------------------------\n");
 printf("%s\n",buffer);

 char file_name[20];
 memset(file_name,'\0',20);
 printf("Please input the file's name:  ");
 scanf("%s",file_name);
 send(sockClient,file_name,strlen(file_name),0);

    if((to_fd=_open(file_name,_O_RDWR  | _O_BINARY |_O_CREAT,_S_IREAD | _S_IWRITE ))==-1)
    {
  printf("File can not open!\n");
        return 0;
    }
    while(bytes_read=recv(sockClient,buffer,BUFFER_SIZE,0))
    {
        if((bytes_read==-1))     break;
        else if(bytes_read>0)
        {
            ptr=buffer;
            while(bytes_write=_write(to_fd,ptr,bytes_read))
            {
                if((bytes_write==-1))     break;
                else if(bytes_write==bytes_read)     break;
                else if(bytes_write>0)
                {
                    ptr+=bytes_write;
                    bytes_read-=bytes_write;
                }
            }
            if(bytes_write==-1)    break;
        }
    }
 if(bytes_write!=-1&&bytes_read!=-1)
 {
  printf("Client has received %s from %s\n",file_name,inet_ntoa(addrSrv.sin_addr));
 }

 if((file_fd=_open("./file/filename.txt",_O_RDWR | _O_BINARY |_O_APPEND))==-1)
 {
   printf("File information can not found");
   return 0;
 }
 memset(buffer,'\0',BUFFER_SIZE);
 _read(file_fd,buffer,BUFFER_SIZE);
 if(strstr(buffer,file_name)==NULL)
 {
  char temp[25];
  memset(temp,'\0',25);
  sprintf(temp,"\r\n%s",file_name);
  _write(file_fd,temp,strlen(temp));
 }
 _close(file_fd);
 closesocket(sockClient);
 WSACleanup();
    _close(to_fd);
    return 1;
}

int client_upload()
{
 WORD wVersionRequested;
 WSADATA wsaDATA;
 int err;

 wVersionRequested = MAKEWORD(1,1);

 err=WSAStartup(wVersionRequested,&wsaDATA);
 if(err!=0)
 {
  return 0;
 }

 if(LOBYTE(wsaDATA.wVersion)!=1 ||HIBYTE(wsaDATA.wVersion)!=1)
 {
  WSACleanup();
  return 0;
 }

 SOCKET sockSrv=socket(AF_INET,SOCK_STREAM,0);

 SOCKADDR_IN addrSrv;
 addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
 addrSrv.sin_family=AF_INET;
 addrSrv.sin_port=htons(7777+user_number);

 bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));

 listen(sockSrv,5);

 SOCKADDR_IN addrClient;

 int len=sizeof(SOCKADDR);
    int from_fd,file_fd;
    int bytes_read,bytes_write;
    char buffer[BUFFER_SIZE];
    char *ptr;
 char file_name[20];
 memset(file_name,'\0',20);
 memset(buffer,'\0',BUFFER_SIZE);

 if((file_fd=_open("./file/filename.txt",_O_RDONLY | _O_BINARY))==-1)
 {
   printf("File information can not found");
   return 0;
 }
 _read(file_fd,buffer,BUFFER_SIZE);
 system("cls");
 printf("-------------------------------------------------------------------------------\n");
 printf("%s\n",buffer);
    memset(buffer,'\0',BUFFER_SIZE);
 while(1)
 {
  SOCKET sockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len);
  //printf("Connect to server %s... \n",inet_ntoa(addrClient.sin_addr));
  printf("Please input the filename:  ");
  scanf("%s",file_name);
  send(sockConn,file_name,strlen(file_name)+1,0);
   
  if((from_fd=_open(file_name,_O_RDONLY | _O_BINARY))==-1)
  {
   printf("File not found");
   return 0;
  }
  while(bytes_read=_read(from_fd,buffer,BUFFER_SIZE))
  {
   if((bytes_read==-1))     break;
   else if(bytes_read>0)
   {
    ptr=buffer;
    while(bytes_write=send(sockConn,ptr,bytes_read,0))
    {
     if((bytes_write==-1))     break;
     else if(bytes_write==bytes_read)    
     {
      break;
     }
     else if(bytes_write>0)
     {
      ptr+=bytes_write;
      bytes_read-=bytes_write;
     }
    }
    if(bytes_write==-1)    break;
   }
  }
  if(bytes_write!=-1&&bytes_read!=-1)
  {
   printf("Client has transfered %s to %s\n",file_name,inet_ntoa(addrClient.sin_addr));
   closesocket(sockConn);
   break;
  }
 }
    _close(from_fd);
    return 1;
}

阅读(190) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~