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);
}
その場合、アップロードとダウンロードのプロセスは、ローカルファイルの読み取りと書き込みに似ています。
ソースコードが必要な友達は私に連絡することができます。他の友達もメッセージを残し、交換し、学ぶことを歓迎します