C言語-Windowsネットワークプログラミング-実験UDPに基づくSocketsプログラミング:サーバとクライアントがファイルを転送する
74262 ワード
腐った人と協力するコード.実は前の実験にも協力コードがあったので、よく見ていませんでした.コードスタイルも直さなかった彼が先に貼ってくれ
モジュール1は、サーバ側のファイルをUDPを使用してクライアントクライアントに転送するために正しいパスワードを入力する必要があるモジュール2は、サーバがテキスト情報を入力して転送する過去にファイル名を定義するのと同じようにパスワードを入力する必要がある
サーバ側
クライアント
以上です.いらいらする.
モジュール1は、サーバ側のファイルをUDPを使用してクライアントクライアントに転送するために正しいパスワードを入力する必要があるモジュール2は、サーバがテキスト情報を入力して転送する過去にファイル名を定義するのと同じようにパスワードを入力する必要がある
サーバ側
#include
#include
#include
#include
#include
#pragma comment (lib,"Ws2_32.lib")
void Stop_Connect(SOCKET &s) //
{
closesocket(s); //
WSACleanup(); //
}
void File_InFo(char FileRoute[],char FileName[],int &RouteLen,int &NameLen)
{
int i=0,j=0;
printf("
( :\\ \\ ):");
scanf("%s",FileRoute);
printf("%s
",FileRoute);
RouteLen=strlen(FileRoute);
for(i=RouteLen-1;i>=0;i--)
{
if(FileRoute[i]=='\\')
break;
else
NameLen++;
}
for(i=RouteLen-NameLen;i<RouteLen;i++)
{
FileName[j]=FileRoute[i];
j++;
}
}
int main()
{
char FileName[50]={0}; //
char FileRoute[100]={0};
int NameLen=0; //
int RouteLen=0; //
char flag; //
int i=0;
int j=0;
int n=1;
int x;
int y;
char c[20]={0};
int TransMode=0; // (1); (2)
int FileSize=0; // ;
int SendTimes=0;
int Size=0;
system("title UDP ");
//system("mode con cols=49 lines=30");
char sendbuf[65000] = {0}; //
char recvbuf[1500] = {0}; //
char password[7]; // 6
WSADATA wsaData; // WSADATA
int iResult = WSAStartup(MAKEWORD(2,2),&wsaData); // winsock
if(iResult!=0)
{
printf(" 。 :%d
",iResult);
return 1;
}
SOCKET s; //
s = socket(AF_INET, SOCK_DGRAM,0); // UDP
sockaddr_in addr,addr2; //
addr.sin_family=AF_INET;
addr.sin_port=htons(75);
addr.sin_addr.S_un.S_addr=INADDR_ANY;
int addr2Len = sizeof(addr2); //
bind( s,(sockaddr*)&addr,sizeof(addr) ); //
if(iResult==0) //
{
printf("UDP
");
}
char str[] = "
UDP ...
";
for(i=0;str[i]!='\0';i++) //
{
printf("%c",str[i]);
Sleep(35);
}
iResult = recvfrom( s,recvbuf,sizeof(recvbuf),0,(sockaddr*)&addr2,&addr2Len ); // ip
if(iResult != 0)
{
printf(" %s[%s] !
",recvbuf,inet_ntoa(addr2.sin_addr) );
memset(recvbuf,0,sizeof(recvbuf));
}
// puts(recvbuf);
printf("
(1)
(2)
:");
scanf("%d",&TransMode);
if(TransMode==1)
{
File_InFo(FileRoute,FileName,RouteLen,NameLen);
FILE *fp;
while(1)
{
if((fp=fopen(FileRoute,"r"))==NULL)
{
printf(" ! Y , N , :");
getchar();
scanf("%c",&flag);
if(flag=='N' || flag=='n')
{
Stop_Connect(s);
return -1;
}
else
{
File_InFo(FileRoute,FileName,RouteLen,NameLen);
}
}
else break;
}
fseek(fp,0,SEEK_END);
FileSize=ftell(fp); //
fclose(fp);
if(float(FileSize/65000.0)==int(FileSize/65000))
SendTimes=FileSize/65000;
else
SendTimes=FileSize/65000+1;
printf(" :%d",FileSize);
printf(" :%d
",SendTimes);
x=SendTimes;
i=1;
while(1) // ,
{
y=x%10;
x=x/10;
c[i]=y+48;
if(x==0)
break;
i++;
}
c[0]=i+48;
sendto(s,c,sizeof(c),0,(sockaddr*)&addr2,addr2Len); //
getchar();
printf("
6 /3 :");
gets(password);
sendto(s,password,sizeof(password),0,(sockaddr*)&addr2,addr2Len);
sendto(s,FileName,sizeof(FileName),0,(sockaddr*)&addr2,addr2Len);
printf("
!
");
int num=4;
printf("
...
");
while(num!=0)
{
recvfrom( s,recvbuf,sizeof(recvbuf),0,(sockaddr*)&addr2,&addr2Len );
if(recvbuf[0] =='*')
printf("%s
",recvbuf);
if(recvbuf[0]=='#')
{
puts(recvbuf);
break;
}
if(recvbuf[0] =='!')
{
puts(recvbuf);
Stop_Connect(s); //
return 0;
}
memset(recvbuf,0,sizeof(recvbuf));
num--;
}
n=SendTimes;
FILE *fp1;
int i=1;
fp1=fopen(FileRoute,"rb");
while(1)
{
fseek(fp1, (i-1)*65000, SEEK_SET);
fread(sendbuf, 65000,1,fp1);
sendto(s,sendbuf,sizeof(sendbuf),0,(sockaddr*)&addr2,addr2Len);
i++;
Sleep(100);
if(i>n)
break;
}
fclose(fp1);
printf(" , ...
");
Stop_Connect(s);
return 0;
}
getchar();
if(TransMode==2)
{
printf("
:");
gets(FileName);
printf(" :");
gets(sendbuf);
printf(" 6 /3 :");
gets(password);
Size=strlen(sendbuf);
x=1;
i=1;
while(1) // ,
{
y=x%10;
x=x/10;
c[i]=y+48;
if(x==0)
break;
i++;
}
c[0]=i+48;
sendto(s,c,sizeof(SendTimes),0,(sockaddr*)&addr2,addr2Len); //
sendto(s,password,sizeof(password),0,(sockaddr*)&addr2,addr2Len);//
sendto(s,FileName,sizeof(FileName),0,(sockaddr*)&addr2,addr2Len);
printf("
!
");
int num=4;
printf("
...
");
while(num!=0)
{
recvfrom( s,recvbuf,sizeof(recvbuf),0,(sockaddr*)&addr2,&addr2Len );
if(recvbuf[0] =='*')
printf("%s
",recvbuf);
if(recvbuf[0] =='#')
{
puts(recvbuf);
break;
}
if(recvbuf[0] =='!')
{
puts(recvbuf);
Stop_Connect(s); //
return 0;
}
memset(recvbuf,0,sizeof(recvbuf));
num--;
}
sendto(s,sendbuf,Size,0,(sockaddr*)&addr2,addr2Len); //
printf("
, ...
");
}
printf("
!
");
Stop_Connect(s); //
return 0;
}
クライアント
#include
#include
#include
#pragma comment (lib,"Ws2_32.lib")
int main()
{
system("title UDP ");
char FileName[50]={0};
char sendbuf[1500] = {0}; //
char recvbuf[65000] = {0}; //
char Name[] = "Client"; //
char password[7]; // 6
int RecvTimes=0;
char c[20]={0};
int n=0;
int i;
int x;
int flag=0;
char SendInFo[2]={0};
int Size;
WSADATA wsaData; // WSADATA
int iResult = WSAStartup(MAKEWORD(2,2),&wsaData); // winsock
if(iResult!=0)
{
printf(" 。 :%d
",iResult);
return 1;
}
SOCKET s; //
s = socket(AF_INET, SOCK_DGRAM,0); // UDP
sockaddr_in addr,addr2; //
addr.sin_family=AF_INET;
addr.sin_port=htons(75);
addr.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");
int addr2Len = sizeof(addr2); //
if(s!=0) //
{
printf("UDP
");
}
sendto(s,Name,sizeof(Name),0,(sockaddr*)&addr,addr2Len); //
recvfrom(s,c,sizeof(c),0,(sockaddr*)&addr2,&addr2Len);
x=c[0]-48; //
int z;
int j=0;
for(i=1;i<=x;i++)
{
z=c[i]-48;
for(j=1;j<i;j++)
{
z=z*10;
}
n+=z;
}
printf(" :%d
",n);
recvfrom(s,password,sizeof(password),0,(sockaddr*)&addr2,&addr2Len); //
recvfrom(s,FileName,sizeof(FileName),0,(sockaddr*)&addr2,&addr2Len);
/* RecvTimes=int(c[0]);
n=RecvTimes;
*/
char test1[]="* ...";
char test2[]="# , ";
char test3[]="! , ";
int num=3;
while(num!=0)
{
printf("
:");
char temp[6];
gets(temp);
if( strcmp(temp,password)==0 )
{
printf("
");
printf("
...
");
sendto(s,test2,sizeof(test2),0,(sockaddr*)&addr,addr2Len);
flag=1;
break;
}
else
{
num--;
printf(" !");
sendto(s,test1,sizeof(test1),0,(sockaddr*)&addr,addr2Len);
if(num==0)
{
printf(" , , !
");
sendto(s,test3,sizeof(test1),0,(sockaddr*)&addr,addr2Len);
printf("
!
");
closesocket(s); //
WSACleanup(); //
return 0;
}
else
printf(" %d
",num);
}
}
FILE *fp1=fopen(FileName,"ab");
for(i=1;i<=n;i++)
{
memset(recvbuf,0,sizeof(recvbuf));
Size=recvfrom(s,recvbuf,sizeof(recvbuf),0,(sockaddr*)&addr,&addr2Len);
fseek(fp1, (i-1)*65000, SEEK_SET);
fwrite(recvbuf,Size,1,fp1);
}
fclose(fp1);
// puts(recvbuf);
// puts(password);
printf("
-------------------------------------------------
");
printf(" %s !
",FileName);
printf("
-------------------------------------------------
");
printf("
!
");
closesocket(s); //
WSACleanup(); //
return 0;
}
以上です.いらいらする.