C ++はファイル転送にソケット、ftpを使用し、ファイルのアップロードとダウンロードの機能を実現します

C ++はファイル転送にソケット、ftpを使用し、ファイルのアップロードとダウンロードの機能を実現します

ソケットはサーバー側とクライアント側に分ける必要があります。

サービス-ターミナル

1サーバー(ローカル)アドレス構造を宣言して初期化します

 
  sockaddr_in server_addr; 
  server_addr.sin_family = AF_INET; 
  server_addr.sin_addr.S_un.S_addr = INADDR_ANY; 
  server_addr.sin_port = htons(PORT); 

// 2ソケットを初期化します


  WSADATA wsaData; 
  WORD socketVersion = MAKEWORD(2, 0); 
  if(WSAStartup(socketVersion, &wsaData) != 0) 
  {
    
     
    printf("Init socket dll error!"); 
    exit(1); 
  } 

3ソケットを作成します

// 创建socket 
  SOCKET m_Socket = socket(AF_INET, SOCK_STREAM, 0); 
    if (SOCKET_ERROR == m_Socket) 
    {
    
     
      printf("Create Socket Error!"); 
    exit(1); 
    } 

4バインディングモニター

//监听 
  if (SOCKET_ERROR == listen(m_Socket, 10)) 
  {
    
     
    printf("Server Listen Failed: %d", WSAGetLastError()); 
    exit(1); 
  } 

5情報を読んで、クライアントがファイルを読み取る必要があるのか​​、ファイルをダウンロードする必要があるのか​​を判断します

	char buffer[BUFFER_SIZE]; 
	memset(buffer, 0, BUFFER_SIZE); 
    if (recv(m_New_Socket, buffer, BUFFER_SIZE, 0) < 0) 
    {
    
     
      printf("Client Receive Data Failed!"); 
      break; 
    } 
	
	std::cout<<buffer<<endl;

クライアント

1ソケットを初期化します

// 初始化socket dll 
  WSADATA wsaData; 
  WORD socketVersion = MAKEWORD(2, 0); 
  if(WSAStartup(socketVersion, &wsaData) != 0) 
  {
    
     
    printf("Init socket dll error!"); 
    exit(1); 
  } 

2ソケットを作成し、サーバーを指定します

//创建socket 
	  SOCKET c_Socket = socket(AF_INET, SOCK_STREAM, 0); 
	  if (SOCKET_ERROR == c_Socket) 
	  {
    
     
		  printf("Create Socket Error!"); 
		  system("pause"); 
		  exit(1); 
	  } 
 
	  //指定服务端的地址 
	  sockaddr_in server_addr; 
	  server_addr.sin_family = AF_INET; 
	  server_addr.sin_addr.S_un.S_addr = inet_addr(SERVER_IP); 
	  server_addr.sin_port = htons(PORT); 

3サーバーに接続します

if (SOCKET_ERROR == connect(c_Socket, (LPSOCKADDR)&server_addr, sizeof(server_addr))) 
	  {
    
     
		  printf("Can Not Connect To Client IP!\n"); 
		  system("pause"); 
		  exit(1); 
	  } 

4アップロードするかダウンロードするかを問わず、サーバーに指示を要求します。

		if(send(c_Socket, buffer, BUFFER_SIZE, 0) < 0) 
		{
    
     
			  printf("Send File Name Failed\n"); 
			  system("pause"); 
			  exit(1); 
		} 

その場合、アップロードとダウンロードのプロセスは、ローカルファイルの読み取りと書き込みに似ています。

ソースコードが必要な友達は私に連絡することができます。他の友達もメッセージを残し、交換し、学ぶことを歓迎します

ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/u011718690/article/details/114387114