windows端代码:
#include <winsock2.h>
#include <iostream>
#pragma comment(lib, "ws2_32.lib") // 链接ws2_32.lib库文件
int main()
{
WSADATA wsaData;
if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0)
{
std::cerr << "Failed to initialize Winsock.\n";
return 1;
}
// 配置远程CentOS服务器的IP地址和端口号
const char* SERVER_IP = "192.168.229.129";
const int SERVER_PORT = 10001;
// 创建Socket对象并连接到服务器
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{};
sockaddr_in serverAddr;
serverAddr.sin_family = AF_INET;
serverAddr.sin_port = htons(SERVER_PORT);
serverAddr.sin_addr.s_addr = inet_addr(SERVER_IP);
if (connect(sock, reinterpret_cast<sockaddr*>(&serverAddr), sizeof(serverAddr)) != 0)
{
std::cerr << "Failed to connect to server.\n";
closesocket(sock);
WSACleanup();
return 1;
}
// 向服务器发送数据
const char* message = "Hello, CentOS!";
if (send(sock, message, strlen(message), 0) == SOCKET_ERROR)
{
std::cerr << "Failed to send message.\n";
closesocket(sock);
WSACleanup();
return 1;
}
// 关闭Socket连接
closesocket(sock);
WSACleanup();
return 0;
}
centos端代码:
// #include <iostream>
// #include <cstring>
// #include <unistd.h>
// #include <arpa/inet.h>
// #include <sys/socket.h>
// #include <netinet/in.h>
// int main()
// {
// // 配置监听的IP地址和端口号
// const char* HOST_IP = "192.168.1.154";
// const int HOST_PORT = 10001;
// // 创建Socket对象并开始监听
// // int listenSock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
// int listenSock = socket(AF_INET, SOCK_DGRAM, 0);
// if (listenSock == -1)
// {
// std::cerr << "Failed to create socket.\n";
// return 1;
// }
// sockaddr_in serverAddr;
// memset(&serverAddr, 0, sizeof(serverAddr));
// serverAddr.sin_family = AF_INET;
// serverAddr.sin_port = HOST_PORT;
// serverAddr.sin_addr.s_addr = htonl(INADDR_ANY);
// // serverAddr.sin_family = AF_INET;
// // serverAddr.sin_port = htons(HOST_PORT);
// // serverAddr.sin_addr.s_addr = inet_addr(HOST_IP);
// if (bind(listenSock, (sockaddr *)&serverAddr, sizeof(serverAddr)) != 0)
// // if (bind(listenSock, reinterpret_cast<sockaddr*>(&serverAddr), sizeof(serverAddr)) == -1)
// {
// std::cerr << "Failed to bind to port.\n";
// close(listenSock);
// return 1;
// }
// if (listen(listenSock, 5) == -1)
// {
// std::cerr << "Failed to listen on port.\n";
// close(listenSock);
// return 1;
// }
// // 接受客户端的连接请求
// sockaddr_in clientAddr;
// socklen_t clientAddrLen = sizeof(clientAddr);
// int connSock = accept(listenSock, reinterpret_cast<sockaddr*>(&clientAddr), &clientAddrLen);
// if (connSock == -1)
// {
// std::cerr << "Failed to accept connection request.\n";
// perror("accept");
// close(listenSock);
// return 1;
// }
// // 接收客户端发送的数据并打印
// char buffer[1024]{};
// int recvSize = recv(connSock, buffer, sizeof(buffer), 0);
// if (recvSize <= 0)
// {
// std::cerr << "Failed to receive message.\n";
// close(connSock);
// close(listenSock);
// return 1;
// }
// std::cout << "Received: " << buffer << '\n';
// // 关闭Socket连接
// close(connSock);
// close(listenSock);
// return 0;
// }
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#define PORT 10001 // use the port number you want to use
int main() {
// Create a socket
int serverSocket = socket(AF_INET, SOCK_STREAM, 0);
if (serverSocket == -1) {
std::cerr << "socket creation failed" << std::endl;
return 1;
}
// Prepare the server address structure
struct sockaddr_in serverAddr;
serverAddr.sin_family = AF_INET;
serverAddr.sin_addr.s_addr = INADDR_ANY;
serverAddr.sin_port = htons(PORT);
// Bind the socket to the specified address and port
int result = bind(serverSocket, (struct sockaddr *)&serverAddr, sizeof(serverAddr));
if (result == -1) {
std::cerr << "bind failed" << std::endl;
close(serverSocket);
return 1;
}
// Listen for incoming connections
result = listen(serverSocket, 1);
if (result == -1) {
std::cerr << "listen failed" << std::endl;
close(serverSocket);
return 1;
}
std::cout << "Server listening on port " << PORT << std::endl;
// Accept incoming connections
int clientSocket = accept(serverSocket, NULL, NULL);
if (clientSocket == -1) {
std::cerr << "accept failed" << std::endl;
close(serverSocket);
return 1;
}
std::cout << "Connection accepted" << std::endl;
// Receive data from the client
char buffer[1024] = {0};
result = read(clientSocket, buffer, sizeof(buffer));
if (result == -1) {
std::cerr << "read failed" << std::endl;
close(clientSocket);
close(serverSocket);
return 1;
}
// Output the received data
std::cout << "Received message: " << buffer << std::endl;
// Send a response to the client
const char* response = "Message received!";
result = send(clientSocket, response, strlen(response), 0);
if (result == -1) {
std::cerr << "send failed" << std::endl;
close(clientSocket);
close(serverSocket);
return 1;
}
// Clean up
close(clientSocket);
close(serverSocket);
return 0;
}