用c++写一个本地server服务

以下是一个简单的 C++ 本地服务器示例代码:

#include <iostream>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <string.h>

int main() {
    int server_socket = socket(AF_INET, SOCK_STREAM, 0);
    if (server_socket == -1) {
        std::cerr << "Failed to create server socket.\n";
        return 1;
    }

    sockaddr_in server_address;
    server_address.sin_family = AF_INET;
    server_address.sin_port = htons(8080);
    server_address.sin_addr.s_addr = INADDR_ANY;

    if (bind(server_socket, (sockaddr*) &server_address, sizeof(server_address)) == -1) {
        std::cerr << "Failed to bind server socket.\n";
        return 1;
    }

    if (listen(server_socket, SOMAXCONN) == -1) {
        std::cerr << "Failed to listen on server socket.\n";
        return 1;
    }

    while (true) {
        sockaddr_in client_address;
        socklen_t client_address_size = sizeof(client_address);
        int client_socket = accept(server_socket, (sockaddr*) &client_address, &client_address_size);
        if (client_socket == -1) {
            std::cerr << "Failed to accept client socket.\n";
            continue;
        }

        char buffer[1024];
        ssize_t bytes_read = recv(client_socket, buffer, sizeof(buffer), 0);
        if (bytes_read == -1) {
            std::cerr << "Failed to read from client socket.\n";
            close(client_socket);
            continue;
        }

        std::string response = "Hello, world!";
        if (send(client_socket, response.c_str(), response.length(), 0) == -1) {
            std::cerr << "Failed to send response to client socket.\n";
            close(client_socket);
            continue;
        }

        close(client_socket);
    }

    close(server_socket);
    return 0;
}
 

这个简单的服务器会监听 8080 端口,当有连接时,会向连接的客户端发送一个 "Hello, world!" 的字符串。注意,这个服务器是非常简陋的,只是一个简单的演示。在实际生产环境中,你需要考虑处理并发连接、处理错误情况、输入验证等一系列问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
这里是一个简单的本地聊天系统的 C++ 代码示例,使用了 socket 编程实现: ```c++ #include <iostream> #include <cstring> #include <string> #include <sys/socket.h> #include <arpa/inet.h> #include <unistd.h> #include <thread> using namespace std; const int BUFFER_SIZE = 1024; // 缓冲区大小 void receive(int sock) { char buffer[BUFFER_SIZE]; while (true) { memset(buffer, 0, BUFFER_SIZE); // 清空缓冲区 int ret = recv(sock, buffer, BUFFER_SIZE, 0); if (ret == -1) { // 接收失败 cout << "接收消息失败!" << endl; break; } if (ret == 0) { // 对方关闭了连接 cout << "连接已关闭!" << endl; break; } cout << "收到消息:" << buffer << endl; } } int main() { int server_sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); // 创建套接字 if (server_sock == -1) { cout << "创建套接字失败!" << endl; return -1; } sockaddr_in server_addr{}; // 服务器地址 server_addr.sin_family = AF_INET; server_addr.sin_port = htons(8888); // 端口号 server_addr.sin_addr.s_addr = htonl(INADDR_ANY); // 任意地址 // 绑定套接字和地址 int ret = bind(server_sock, (sockaddr*)&server_addr, sizeof(server_addr)); if (ret == -1) { cout << "绑定套接字失败!" << endl; return -1; } // 监听连接请求 ret = listen(server_sock, 5); if (ret == -1) { cout << "监听连接请求失败!" << endl; return -1; } sockaddr_in client_addr{}; // 客户端地址 socklen_t client_addr_len = sizeof(client_addr); // 接受连接请求 int client_sock = accept(server_sock, (sockaddr*)&client_addr, &client_addr_len); if (client_sock == -1) { cout << "接受连接请求失败!" << endl; return -1; } char buffer[BUFFER_SIZE]; thread t(receive, client_sock); // 开启一个线程用于接收消息 t.detach(); // 分离线程 while (true) { memset(buffer, 0, BUFFER_SIZE); // 清空缓冲区 cout << "请输入消息:"; cin.getline(buffer, BUFFER_SIZE); if (strcmp(buffer, "exit") == 0) { // 用户输入 exit 退出程序 break; } ret = send(client_sock, buffer, strlen(buffer), 0); if (ret == -1) { // 发送失败 cout << "发送消息失败!" << endl; break; } } close(client_sock); // 关闭套接字 close(server_sock); return 0; } ``` 该程序使用了一个主线程和一个子线程分别用于发送和接收消息。主线程通过 `cin.getline` 获取用户输入的消息,并通过 `send` 函数将消息发送给客户端。子线程通过 `recv` 函数接收客户端发送的消息,并输出到控制台上。 需要注意的是,该代码只是一个简单的示例,实际的聊天系统需要考虑更多的安全性和用户体验等因素。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值