int main(int argc, char **argv) { int s, ds; struct sockaddr_in server; struct in_addr dst_ip; unsigned short port = 5000; unsigned short port2 = 5001; dst_ip.s_addr = inet_addr(argv[1]); printf("アドレスをバイト列に変換\n"); printf("addres to byte ... %d\n", dst_ip.s_addr); printf("バイト列をIPv4形式の文字列に変換\n"); printf("byte to address ... %s\n", inet_ntoa(dst_ip)); // メッセージ送受信用ソケット生成 if ((s = socket(AF_INET, SOCK_STREAM, 0)) < 0) { fprintf(stderr, "ソケットの作成に失敗しました。\n"); exit(1); } // サーバ接続 memset(&server, 0, sizeof(server)); server.sin_family = AF_INET; server.sin_addr.s_addr = dst_ip.s_addr; server.sin_port = port; if (connect(s, (struct sockaddr *) &server, sizeof(server)) < 0) { fprintf(stderr, "サーバへの接続に失敗しました。\n"); exit(1); } printf("connect ... %s\n", inet_ntoa(server.sin_addr)); for (;;) { char buf[BUF_SIZE_256]; printf("> "); fgets(buf, BUF_SIZE_256, stdin); send(s, buf, strlen(buf), 0); buf[strlen(buf)-1] = '\0'; if (strcmp("exit", buf) == 0) { printf("サーバとの接続を切断します。\n"); close(s); break; } // ファイル受信用のソケットを作成 if ((ds = socket(AF_INET, SOCK_STREAM, 0)) < 0) { fprintf(stderr, "ソケットの作成に失敗しました。\n"); exit(1); } // サーバへファイル受信用(ポート番号5001)で接続 server.sin_port = port2; if (connect(ds, (struct sockaddr *) &server, sizeof(server)) < 0) { fprintf(stderr, "データ通信用のソケット生成に失敗しました。\n"); exit(1); } // データ受信 jusin(ds, getFileName(buf)); printf("ファイル受信が完了しました。\n"); close(ds); } return 0; }
int main(int argc, char **argv) { int s, ds,s3; struct sockaddr_in server; struct in_addr dst_ip; unsigned short port = atoi(argv[2]); unsigned short port2 = atoi(argv[3]); unsigned short port3 = atoi(argv[4]); unsigned long size; DIR *dir; struct dirent *dp; char path[64] = "./fd_input/"; char fname[256]; //char buf[BUF_SIZE_256]="lena.jpg"; dst_ip.s_addr = inet_addr(argv[1]); printf("アドレスをバイト列に変換\n"); printf("addres to byte ... %d\n", dst_ip.s_addr); printf("バイト列をIPv4形式の文字列に変換\n"); printf("byte to address ... %s\n", inet_ntoa(dst_ip)); // メッセージ送受信用ソケット生成 if ((s = socket(AF_INET, SOCK_STREAM, 0)) < 0) { fprintf(stderr, "ソケットの作成に失敗しました。\n"); exit(1); } // サーバ接続 memset(&server, 0, sizeof(server)); server.sin_family = AF_INET; server.sin_addr.s_addr = dst_ip.s_addr; server.sin_port = port; if (connect(s, (struct sockaddr *) &server, sizeof(server)) < 0) { fprintf(stderr, "サーバへの接続に失敗しました。\n"); exit(1); } printf("connect ... %s\n", inet_ntoa(server.sin_addr)); dir = opendir(path); if (dir == NULL){ printf("error: path cannot open\n"); exit(-1); } for (;;) // face detection { char buf[BUF_SIZE_256]={0}; // printf("> "); /* 送信するファイル名を取得 */ // fgets(buf, BUF_SIZE_256, stdin); //size=filesize(getFileName(buf)); //printf("%d",size); dp = readdir(dir); // printf("d_name :%s\n",dp->d_name); if( dp == NULL){ printf("found null\n"); break; } if( (strcmp(".",dp->d_name)==0) || ((strcmp("..",dp->d_name)==0))){ // printf("found . or ..\n"); continue; } strcpy(buf,dp->d_name); strcpy(fname,path); strcat(fname,buf); //printf("file name :%s\n",buf); /* ファイル名を送信 */ send(s, buf, strlen(buf), 0); //buf[strlen(buf)-1] = '\0'; if (strcmp("exit", buf) == 0) { printf("サーバとの接続を切断します。\n"); close(s); break; } size=filesize(fname); //printf("%d",size); send(s,&size,sizeof(long),0); server.sin_port=port3; //ファイル送信様のソケットを作成 if ((s3 = socket(AF_INET, SOCK_STREAM, 0)) < 0) { fprintf(stderr, "ソケットの作成に失敗しました。\n"); exit(1); } if (connect(s3, (struct sockaddr *) &server, sizeof(server)) < 0) { fprintf(stderr, "データa通信用のソケット生成に失敗しました。\n"); exit(1); } tranceport(s3,fname); // ファイル受信用のソケットを作成 if ((ds = socket(AF_INET, SOCK_STREAM, 0)) < 0) { fprintf(stderr, "ソケットの作成に失敗しました。\n"); exit(1); } // サーバへファイル受信用(ポート番号5001)で接続 server.sin_port = port2; if (connect(ds, (struct sockaddr *) &server, sizeof(server)) < 0) { fprintf(stderr, "データb通信用のソケット生成に失敗しました。\n"); exit(1); } recv(ds,&size,sizeof(long),0); //printf("受信するファイルサイズStoC:%d\n",size); // データ受信 jusin(ds, getFileName(buf),size); //printf("ファイル受信が完了しました。\n"); close(ds); } closedir(dir); return 0; }