65 lines
1.6 KiB
C++
65 lines
1.6 KiB
C++
#define _WINSOCK_DEPRECATED_NO_WARNINGS
|
|
#include <iostream>
|
|
#include <fstream>
|
|
#include <WinSock2.h>
|
|
|
|
#pragma comment(lib, "Ws2_32.lib")
|
|
|
|
int main(int argc, char* argv[]) {
|
|
if (argc != 4) {
|
|
std::cerr << "Usage: " << argv[0] << " <host> <port> <file_path>\n";
|
|
return 1;
|
|
}
|
|
|
|
const char* host = argv[1];
|
|
const char* port = argv[2];
|
|
const char* file_path = argv[3];
|
|
|
|
WSADATA wsaData;
|
|
if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) {
|
|
std::cerr << "WSAStartup failed\n";
|
|
return 1;
|
|
}
|
|
|
|
SOCKET sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
|
|
if (sock == INVALID_SOCKET) {
|
|
std::cerr << "Failed to create socket\n";
|
|
WSACleanup();
|
|
return 1;
|
|
}
|
|
|
|
sockaddr_in serverAddr;
|
|
serverAddr.sin_family = AF_INET;
|
|
serverAddr.sin_addr.s_addr = inet_addr(host);
|
|
serverAddr.sin_port = htons(atoi(port));
|
|
|
|
if (connect(sock, reinterpret_cast<sockaddr*>(&serverAddr), sizeof(serverAddr)) == SOCKET_ERROR) {
|
|
std::cerr << "Failed to connect to server\n";
|
|
closesocket(sock);
|
|
WSACleanup();
|
|
return 1;
|
|
}
|
|
|
|
std::ifstream file(file_path, std::ios::binary);
|
|
if (!file) {
|
|
std::cerr << "Failed to open file: " << file_path << "\n";
|
|
closesocket(sock);
|
|
WSACleanup();
|
|
return 1;
|
|
}
|
|
|
|
char buffer[1024];
|
|
while (!file.eof()) {
|
|
file.read(buffer, sizeof(buffer));
|
|
int bytesRead = file.gcount();
|
|
send(sock, buffer, bytesRead, 0);
|
|
}
|
|
|
|
file.close();
|
|
closesocket(sock);
|
|
WSACleanup();
|
|
|
|
std::cout << "File sent successfully.\n";
|
|
|
|
return 0;
|
|
} |