90 lines
2.5 KiB
C++

#include <winsock2.h>
#include <ws2tcpip.h>
#include <chrono>
#include <cstdio>
#include <fstream>
#include <iostream>
#include <thread>
constexpr int BUFFER_SIZE = 4096;
int main(int argc, char** argv)
{
if (argc == 1) {
std::cout << "Need Param, Example: send 127.0.0.1 9696 E:\\2.bmp\n";
return 0;
}
// 初始化Winsock
WSADATA wsaData;
if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) {
std::cerr << "Failed to initialize Winsock." << std::endl;
return 1;
}
// 创建套接字
SOCKET clientSocket = socket(AF_INET, SOCK_STREAM, 0);
if (clientSocket == INVALID_SOCKET) {
std::cerr << "Failed to create socket." << std::endl;
WSACleanup();
return 1;
}
// 设置服务器地址
sockaddr_in serverAddress{};
serverAddress.sin_family = AF_INET;
serverAddress.sin_port = htons(std::stoi(std::string(argv[2])));
if (inet_pton(AF_INET, argv[1], &(serverAddress.sin_addr)) <= 0) {
std::cerr << "Invalid server address." << std::endl;
closesocket(clientSocket);
WSACleanup();
return 1;
}
// 连接到服务器
if (connect(clientSocket, reinterpret_cast<sockaddr*>(&serverAddress),
sizeof(serverAddress)) == SOCKET_ERROR) {
std::cerr << "Failed to connect to server." << std::endl;
closesocket(clientSocket);
WSACleanup();
return 1;
}
// 打开要发送的文件
FILE* file = std::fopen(argv[3], "rb");
if (!file) {
std::cerr << "Failed to open file : " << argv[3] << std::endl;
closesocket(clientSocket);
WSACleanup();
return 1;
}
int Second = 3;
std::cout << Second << " Second after to start send .....\n";
std::this_thread::sleep_for(std::chrono::milliseconds(Second * 1000));
// 读取文件内容并发送到服务器
size_t allLen = 0;
char buffer[BUFFER_SIZE];
while (!std::feof(file)) {
int nSize = std::fread(buffer, sizeof(char), BUFFER_SIZE, file);
if (nSize > 0) {
allLen += nSize;
if (send(clientSocket, buffer, nSize, 0) == SOCKET_ERROR) {
std::cerr << "Failed to send data to server." << std::endl;
break;
}
std::cout << "already send Size = " << allLen << "\n";
}
}
// 关闭套接字和文件
std::fclose(file);
closesocket(clientSocket);
WSACleanup();
std::cout << "Send Done, Size = " << allLen << std::endl;
return 0;
}