#include <iostream>
#include <fstream>
#include <winsock2.h>
#include <ws2tcpip.h> // 包含inet_pton()
#pragma comment(lib, "ws2_32.lib")
int main() {
WSADATA wsaData;
SOCKET sock;
struct sockaddr_in serverAddr;
char sendBuf[4096]; // 假设文件内容不会超过4096字节
int sendlen, bytesRead;
// 初始化Winsock
WSAStartup(MAKEWORD(2, 2), &wsaData);
// 创建套接字
sock = socket(AF_INET, SOCK_STREAM, 0);
// 设置服务器地址
serverAddr.sin_family = AF_INET;
serverAddr.sin_port = htons(12345);
// 使用inet_pton()转换IPv4地址
inet_pton(AF_INET, "127.0.0.1", &serverAddr.sin_addr);
// 连接到服务器
connect(sock, (struct sockaddr*)&serverAddr, sizeof(serverAddr));
// 打开文件以读取数据
std::ifstream file("C:/Users/jiang/Desktop/input.txt", std::ios::binary);
// 检查文件是否成功打开
if (!file.is_open()) {
std::cerr << "无法打开文件: input.txt" << std::endl;
closesocket(sock);
WSACleanup();
return 1;
}
// 读取文件内容到sendBuf
file.read(sendBuf, sizeof(sendBuf));
bytesRead = static_cast<int>(file.gcount());
// 关闭文件
file.close();
// 发送数据
sendlen = send(sock, sendBuf, bytesRead, 0);
// 检查是否成功发送数据
if (sendlen == SOCKET_ERROR) {
std::cerr << "发送数据失败" << std::endl;
closesocket(sock);
WSACleanup();
return 1;
}
std::cout << "数据已成功发送到服务器" << std::endl;
// 清理
closesocket(sock);
WSACleanup();
return 0;
}
sever
#include <iostream>
#include <fstream>
#include <string>
#include <winsock2.h>
#pragma comment(lib, "ws2_32.lib")
int main() {
WSADATA wsaData;
SOCKET listenSocket, clientSocket;
struct sockaddr_in serverAddr, clientAddr;
int clientAddrSize = sizeof(clientAddr);
char buf[1024];
int recvlen;
// 初始化Winsock
WSAStartup(MAKEWORD(2, 2), &wsaData);
// 创建监听套接字
listenSocket = socket(AF_INET, SOCK_STREAM, 0);
// 设置服务器地址
serverAddr.sin_family = AF_INET;
serverAddr.sin_port = htons(12345);
serverAddr.sin_addr.s_addr = INADDR_ANY;
// 绑定套接字
bind(listenSocket, (struct sockaddr*)&serverAddr, sizeof(serverAddr));
// 监听连接
listen(listenSocket, SOMAXCONN);
// 接受连接
clientSocket = accept(listenSocket, (struct sockaddr*)&clientAddr, &clientAddrSize);
// 接收数据
recvlen = recv(clientSocket, buf, 1024, 0);
// 检查是否成功接收到数据
if (recvlen == SOCKET_ERROR) {
std::cerr << "接收数据失败" << std::endl;
closesocket(clientSocket);
closesocket(listenSocket);
WSACleanup();
return 1;
}
// 构造桌面上的output.txt文件的完整路径
std::string filePath = "C:/Users/jiang/Desktop/output.txt";
// 打开文件以写入数据
std::ofstream file(filePath, std::ios::binary);
// 检查文件是否成功打开
if (!file.is_open()) {
std::cerr << "无法打开文件: " << filePath << std::endl;
closesocket(clientSocket);
closesocket(listenSocket);
WSACleanup();
return 1;
}
// 写入接收到的数据到文件
file.write(buf, recvlen);
// 关闭文件
file.close();
std::cout << "数据已成功写入到 " << filePath << std::endl;
// 清理
closesocket(clientSocket);
closesocket(listenSocket);
WSACleanup();
return 0;
}