C言語-Windowsネットワークプログラミング-実験UDPに基づくSocketsプログラミング:サーバとクライアントがファイルを転送する

74262 ワード

腐った人と協力するコード.実は前の実験にも協力コードがあったので、よく見ていませんでした.コードスタイルも直さなかった彼が先に貼ってくれ
モジュール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; }

以上です.いらいらする.