c++ tcp服务端V1

Server.cpp文件点击查看代码
#include "Server.h"
#include <iostream>
#include <ws2tcpip.h>

#pragma comment(lib, "ws2_32.lib")
using namespace std;

Server::Server(const std::string& host, uint16_t port)
        : m_address(host), m_port(port), m_fd(INVALID_SOCKET) {
// 初始化网络库
    WSADATA data;
    if (WSAStartup(MAKEWORD(2, 2), &data) != 0) {
        cerr << "socket error" << WSAGetLastError() << endl;
        return;
    }

// 创建socket
    m_fd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    if (m_fd == INVALID_SOCKET) {
        cerr << "socket error: " << WSAGetLastError() << endl;
        return;
    }

// 绑定ip 端口
    struct sockaddr_in addr;
    addr.sin_family = AF_INET;
    addr.sin_port = htonl(port);  // 大端和小端存储, 本地是小端
    inet_pton(AF_INET, host.data(), &addr.sin_addr);  // ip地址
    if (bind(m_fd, (struct sockaddr *) &addr, sizeof(addr)) == SOCKET_ERROR) {
        cerr << "bind error: " << WSAGetLastError() << endl;
        return;
    }

    if (listen(m_fd, 10) == SOCKET_ERROR) {
        cerr << "listen error: " << WSAGetLastError() << endl;
        return;
    };
}
Server::~Server()
{
WSACleanup();
}
int Server::run() {
    char buf[BUFSIZ];
    while (m_running) {
        // 接受连接
        struct sockaddr_in client_addr;
        socklen_t addr_len = sizeof(client_addr);
        SOCKET sock = accept(m_fd, (struct sockaddr *)&client_addr, &addr_len);
//        SOCKET sock = accept(m_fd, NULL, NULL);
        if (sock == INVALID_SOCKET) {
            cerr << "accept error: " << WSAGetLastError() << endl;
            continue;
        }

        // 读取客户端ip
        char client_ip[INET_ADDRSTRLEN];
        inet_ntop(AF_INET, &client_addr.sin_addr, client_ip, INET_ADDRSTRLEN);
        cout << " Client connected from: " << client_ip << endl;

        int nread = recv(sock, buf, BUFSIZ, 0);
        if (nread > 0 ) {
            printf("data is %.*s nread is:%d\n", nread, buf, nread);
        }
        else if (nread <=0) {
            cout << "client close" << endl;
            closesocket(sock);
        }
    }
    return 0;
}

int main() {
    Server server = Server("127.0.0.1", 8080);
    server.run();
}



posted @ 2026-02-21 08:39  coding天荒地老  阅读(8)  评论(0)    收藏  举报