windows端到centos端的socket通信例子

 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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值