//*******************************************************客户端
#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;
}