Ejemplo n.º 1
0
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;
}
Ejemplo n.º 2
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;
}