You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++实现同时连接192.168.10.131服务器双端口的需求语义疑问

题目语义澄清与实现方案

语义判定

原题目明确要求通过两个不同socket同时连接IP为192.168.10.131的服务器的2345、4325两个端口,核心动作是「连接」,目标对象是指定IP服务器的两个端口,因此你的第一种理解是正确的:你需要编写客户端程序,创建两个独立socket,分别主动连接远端服务器192.168.10.131的两个监听端口。
你误解的第二种场景完全不符合题目描述,题目中192.168.10.131是被连接的服务端,而非主动发起连接的客户端。如果确实需要实现第二种场景,只需要把下述客户端代码部署在192.168.10.131机器上,将connect的目标IP修改为对端服务器IP即可,逻辑完全一致。

实现思路

  • 创建两个socket实例,分别调用connect接口,目标端口对应配置为htons(2345)和htons(4325),目标IP固定为192.168.10.131
  • 两个连接可以放到独立线程中运行,避免I/O阻塞互相影响;如果性能要求更高也可以用select/epoll等IO多路复用方案在单线程内管理两个连接的读写,两种实现都符合要求

简化实现代码示例

#include <iostream>
#include <thread>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <cstring>

void connect_remote_port(int target_port) {
    // 创建TCP socket
    int sock_fd = socket(AF_INET, SOCK_STREAM, 0);
    if (sock_fd < 0) {
        perror("socket创建失败");
        return;
    }

    // 配置对端服务器地址
    sockaddr_in server_addr;
    bzero(&server_addr, sizeof(server_addr));
    server_addr.sin_family = AF_INET;
    server_addr.sin_port = htons(target_port);
    if (inet_pton(AF_INET, "192.168.10.131", &server_addr.sin_addr) <= 0) {
        perror("非法的服务器IP地址");
        close(sock_fd);
        return;
    }

    // 发起连接
    if (connect(sock_fd, (sockaddr*)&server_addr, sizeof(server_addr)) < 0) {
        perror("连接服务器失败");
        close(sock_fd);
        return;
    }

    std::cout << "成功连接到服务器:192.168.10.131:" << target_port << ",socket fd为:" << sock_fd << std::endl;

    // 此处可以添加自定义的读写逻辑
    // ...

    // 关闭socket
    close(sock_fd);
}

int main() {
    // 两个线程分别连接两个端口
    std::thread t1(connect_remote_port, 2345);
    std::thread t2(connect_remote_port, 4325);

    t1.join();
    t2.join();
    return 0;
}

内容的提问来源于stack exchange,提问作者Pankaj Belwal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 23:15:07