C++ Winsock Client for File Transfer
#include\x3ciostream\x3e\n#include\x3cfstream\x3e\n#include\x3cstring\x3e\n#include\x3cWinSock2.h\x3e\n#include\x3cWS2tcpip.h\x3e\n#pragma comment(lib, "ws2_32.lib")\n\n#define BUFFER_SIZE 2048\n\nusing namespace std;\n\nint main()\n{\n // Initialize Winsock\n WSADATA wsaData;\n if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) {\n cerr << "Failed to initialize winsock" << endl;\n return 1;\n }\n\n // Create socket\n SOCKET clientSocket = socket(AF_INET, SOCK_STREAM, 0);\n if (clientSocket == INVALID_SOCKET) {\n cerr << "Failed to create socket" << endl;\n WSACleanup();\n return 1;\n }\n\n // Server address\n sockaddr_in serverAddress;\n serverAddress.sin_family = AF_INET;\n serverAddress.sin_port = htons(8888);\n InetPton(AF_INET, TEXT("127.0.0.1"), &serverAddress.sin_addr.s_addr);\n\n // Connect to server\n if (connect(clientSocket, (sockaddr*)&serverAddress, sizeof(serverAddress)) == SOCKET_ERROR) {\n cerr << "Failed to connect to server" << endl;\n closesocket(clientSocket);\n WSACleanup();\n return 1;\n }\n\n // Send command\n cout << "Enter command (1 for upload, 2 for download, 3 for file list): ";\n string command;\n cin >> command;\n if (send(clientSocket, command.c_str(), command.length(), 0) == SOCKET_ERROR) {\n cerr << "Failed to send command" << endl;\n closesocket(clientSocket);\n WSACleanup();\n return 1;\n }\n\n // Upload file\n if (command == "1") {\n // Enter file name\n cout << "Enter file name to upload: ";\n string fileName;\n cin >> fileName;\n\n // Open file\n ifstream file(fileName, ios::binary);\n if (!file) {\n cerr << "Failed to open file" << endl;\n closesocket(clientSocket);\n WSACleanup();\n return 1;\n }\n\n // Send file name\n if (send(clientSocket, fileName.c_str(), fileName.length(), 0) == SOCKET_ERROR) {\n cerr << "Failed to send file name" << endl;\n closesocket(clientSocket);\n WSACleanup();\n return 1;\n }\n\n // Read and send file data\n char buffer[BUFFER_SIZE];\n while (!file.eof()) {\n file.read(buffer, BUFFER_SIZE);\n int bytesRead = file.gcount();\n if (send(clientSocket, buffer, bytesRead, 0) == SOCKET_ERROR) {\n cerr << "Failed to send file data" << endl;\n file.close();\n closesocket(clientSocket);\n WSACleanup();\n return 1;\n }\n }\n\n // Close file\n file.close();\n\n cout << "File uploaded successfully" << endl;\n }\n // Download file\n else if (command == "2") {\n // Enter file name\n cout << "Enter file name to download: ";\n string fileName;\n cin >> fileName;\n\n // Send file name\n if (send(clientSocket, fileName.c_str(), fileName.length(), 0) == SOCKET_ERROR) {\n cerr << "Failed to send file name" << endl;\n closesocket(clientSocket);\n WSACleanup();\n return 1;\n }\n\n // Receive file data\n ofstream file(fileName, ios::binary);\n if (!file) {\n cerr << "Failed to create file" << endl;\n closesocket(clientSocket);\n WSACleanup();\n return 1;\n }\n\n char buffer[BUFFER_SIZE];\n int bytesRead;\n while ((bytesRead = recv(clientSocket, buffer, BUFFER_SIZE, 0)) > 0) {\n file.write(buffer, bytesRead);\n }\n\n // Close file\n file.close();\n\n if (bytesRead == SOCKET_ERROR) {\n cerr << "Failed to receive file data" << endl;\n closesocket(clientSocket);\n WSACleanup();\n return 1;\n }\n\n cout << "File downloaded successfully" << endl;\n }\n // List files\n else if (command == "3") {\n char buffer[BUFFER_SIZE];\n int bytesRead;\n while ((bytesRead = recv(clientSocket, buffer, BUFFER_SIZE, 0)) > 0) {\n cout.write(buffer, bytesRead);\n }\n\n if (bytesRead == SOCKET_ERROR) {\n cerr << "Failed to receive file list" << endl;\n closesocket(clientSocket);\n WSACleanup();\n return 1;\n }\n }\n\n // Close socket\n closesocket(clientSocket);\n\n // Cleanup Winsock\n WSACleanup();\n\n return 0;\n}
原文地址: https://www.cveoy.top/t/topic/pF0a 著作权归作者所有。请勿转载和采集!