请用C++制作一个 客户端在cmd输入指令回车后发送给服务端服务端接收后给名为xxx的程序伪造从键盘输入信息信息为客户端发送来的信息相当于客户端远程输入并且实时将这个程序返回的信息发送给客户端让客户端在cmd显示。
以下是一个简单的C++代码示例,展示了如何创建一个客户端和服务端来实现你的需求。请注意,这只是一个基本示例,可能需要根据你的具体需求进行修改和优化。
客户端代码:
#include <iostream>
#include <winsock2.h>
#pragma comment(lib, "ws2_32.lib")
int main() {
// 初始化Winsock
WSADATA wsaData;
if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) {
std::cout << "Failed to initialize Winsock" << std::endl;
return 1;
}
// 创建套接字
SOCKET clientSocket = socket(AF_INET, SOCK_STREAM, 0);
if (clientSocket == INVALID_SOCKET) {
std::cout << "Failed to create socket" << std::endl;
WSACleanup();
return 1;
}
// 服务器地址和端口
sockaddr_in serverAddress{};
serverAddress.sin_family = AF_INET;
serverAddress.sin_port = htons(8888);
serverAddress.sin_addr.s_addr = inet_addr("127.0.0.1");
// 连接到服务器
if (connect(clientSocket, (sockaddr*)&serverAddress, sizeof(serverAddress)) == SOCKET_ERROR) {
std::cout << "Connection failed" << std::endl;
closesocket(clientSocket);
WSACleanup();
return 1;
}
// 循环接收用户输入并发送给服务器
std::string userInput;
while (true) {
std::cout << "Enter a command: ";
std::getline(std::cin, userInput);
// 发送用户输入给服务器
send(clientSocket, userInput.c_str(), userInput.size(), 0);
// 接收服务器返回的信息
char buffer[4096];
memset(buffer, 0, sizeof(buffer));
int bytesRead = recv(clientSocket, buffer, sizeof(buffer), 0);
if (bytesRead > 0) {
std::cout << "Server response: " << buffer << std::endl;
}
}
// 关闭套接字
closesocket(clientSocket);
// 清理Winsock
WSACleanup();
return 0;
}
服务端代码:
#include <iostream>
#include <winsock2.h>
#include <windows.h>
#pragma comment(lib, "ws2_32.lib")
int main() {
// 初始化Winsock
WSADATA wsaData;
if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) {
std::cout << "Failed to initialize Winsock" << std::endl;
return 1;
}
// 创建套接字
SOCKET serverSocket = socket(AF_INET, SOCK_STREAM, 0);
if (serverSocket == INVALID_SOCKET) {
std::cout << "Failed to create socket" << std::endl;
WSACleanup();
return 1;
}
// 监听端口
sockaddr_in serverAddress{};
serverAddress.sin_family = AF_INET;
serverAddress.sin_port = htons(8888);
serverAddress.sin_addr.s_addr = INADDR_ANY;
if (bind(serverSocket, (sockaddr*)&serverAddress, sizeof(serverAddress)) == SOCKET_ERROR) {
std::cout << "Failed to bind socket" << std::endl;
closesocket(serverSocket);
WSACleanup();
return 1;
}
// 开始监听连接
if (listen(serverSocket, SOMAXCONN) == SOCKET_ERROR) {
std::cout << "Failed to listen" << std::endl;
closesocket(serverSocket);
WSACleanup();
return 1;
}
std::cout << "Server started, waiting for connections..." << std::endl;
// 接受客户端连接
SOCKET clientSocket = accept(serverSocket, nullptr, nullptr);
if (clientSocket == INVALID_SOCKET) {
std::cout << "Failed to accept client connection" << std::endl;
closesocket(serverSocket);
WSACleanup();
return 1;
}
std::cout << "Client connected" << std::endl;
// 循环接收客户端发送的指令并执行
char buffer[4096];
std::string commandOutput;
while (true) {
memset(buffer, 0, sizeof(buffer));
int bytesRead = recv(clientSocket, buffer, sizeof(buffer), 0);
if (bytesRead <= 0) {
std::cout << "Client disconnected" << std::endl;
break;
}
// 执行客户端发送的指令
std::string command(buffer);
commandOutput = "";
std::cout << "Received command: " << command << std::endl;
// 这里可以根据你的需求使用不同的方式执行命令,这里只是简单示例
FILE* pipe = _popen(command.c_str(), "r");
if (pipe) {
char buffer[128];
while (!feof(pipe)) {
if (fgets(buffer, 128, pipe) != nullptr)
commandOutput += buffer;
}
_pclose(pipe);
}
// 将程序返回的信息发送给客户端
send(clientSocket, commandOutput.c_str(), commandOutput.size(), 0);
}
// 关闭套接字
closesocket(clientSocket);
closesocket(serverSocket);
// 清理Winsock
WSACleanup();
return 0;
}
请注意,这个示例只能在Windows系统上运行,并且需要在代码中手动设置IP地址和端口号。你可以根据需要进行修改
原文地址: https://www.cveoy.top/t/topic/hVAC 著作权归作者所有。请勿转载和采集!