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

使用Poco Net连接非80端口TCP套接字时遇ConnectionRefusedException问题咨询

问题根源

你的代码崩溃并非Poco Net语法错误,而是目标端口4001没有对应的TCP服务在监听,连接被拒绝时抛出了未捕获的异常。换成80端口能成功,是因为你的系统上80端口有服务(如Web服务器)在运行。

正确的Poco TCP客户端实现(含异常处理与完整收发)

以下是包含异常捕获、数据发送与接收的完整TCP客户端代码:

#include <Poco/Net/StreamSocket.h>
#include <Poco/Net/SocketAddress.h>
#include <Poco/Exception.h>
#include <iostream>
#include <cstring>

int main(int argc, char** argv)
{
    try {
        // 创建Socket并连接目标地址
        Poco::Net::StreamSocket sock;
        Poco::Net::SocketAddress addr("127.0.0.1", 4001);
        sock.connect(addr);
        std::cout << "成功连接到服务器" << std::endl;

        // 发送数据
        const char* sendData = "Hello from Poco TCP Client!";
        int sentBytes = sock.sendBytes(sendData, std::strlen(sendData));
        std::cout << "已发送 " << sentBytes << " 字节数据" << std::endl;

        // 接收服务器返回数据
        char buf[256] = {0}; // 初始化缓冲区避免垃圾数据
        int receivedBytes = sock.receiveBytes(buf, sizeof(buf));
        std::cout << "收到 " << receivedBytes << " 字节数据: " << buf << std::endl;

        // 关闭连接
        sock.close();
    }
    catch (const Poco::Net::ConnectionRefusedException& e) {
        std::cerr << "连接失败: " << e.what() << std::endl;
        return 1;
    }
    catch (const Poco::Exception& e) {
        std::cerr << "网络异常: " << e.what() << std::endl;
        return 1;
    }
    catch (...) {
        std::cerr << "未知异常发生" << std::endl;
        return 1;
    }

    return 0;
}
关键注意事项
  • 必须捕获异常:Poco网络操作会抛出异常,用try-catch处理可避免程序直接崩溃。
  • 验证端口监听状态:若要连接4001端口,需先确保有TCP服务器在该端口监听,可通过终端命令nc -l 4001启动简易测试服务器。
  • 初始化缓冲区:接收数据前初始化缓冲区,防止输出垃圾内容。
  • 编译链接要求:编译时需链接Poco相关库,示例命令:
    g++ -o tcp_client tcp_client.cpp -lPocoNet -lPocoFoundation
    

内容的提问来源于stack exchange,提问作者Nabila Salmi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 01:42:39