兜兜空荡荡 2016-06-27 09:13 采纳率: 0%
浏览 1082

socket 文件描述字传递

在函数里完成了socket的创建,绑定,连接,最后函数返回该套接字文件描述字,在另一个函数里调用该函数,并利用该socket id发送消息,在send成功发送,可是在接收对端的应用中却没有收到信息,但是在对方网卡中却能够抓取到发送的消息. 我把文件描述字的变量改为全局的就好使了, 请问各位大神解释一下这是什么情况呢


 //创建一个tcp socket,并完成客户端与服务器的连接过程
int createSocket()
{
    //socket info to server 
    //agent 设置socket 地址
    struct sockaddr_in client_addr;
    bzero(&client_addr, sizeof(client_addr)); //设置地址结构体为0
    client_addr.sin_family = AF_INET;    //设置internet 协议簇
    client_addr.sin_addr.s_addr = htons(INADDR_ANY);//不设置ip, 监听所用网卡
    client_addr.sin_port = htons(0);    //随机端口
    //创建tcp套接字
    int client_socket = socket(AF_INET, SOCK_STREAM, 0);
    if (client_socket < 0)
    {
        printf("Create Socket Failed.\n");
        LOG_ERROR("Create Socket Failed.");
        return 0;
    }
    //绑定地址
    LOG_DEBUG("to client bind port.");
    if (bind(client_socket, (struct sockaddr*)&client_addr, sizeof(client_addr)))
    {
        printf("Client Bind Port Failed.\n");
        LOG_ERROR("Client Bind Port Failed.");
        return 0;
    }
    LOG_DEBUG("client bind port success.");

    // 服务控制台socket地址
    struct sockaddr_in server_addr;
    bzero(&server_addr, sizeof(server_addr));
    server_addr.sin_family = AF_INET;
    if (inet_aton(g_cfg.serverip().c_str(), &server_addr.sin_addr) == 0) //ip地址转换
    {
        printf("Server IP address error.\n");
        LOG_ERROR("Server IP address error.");
        return 0;
    }
    server_addr.sin_port = htons(g_cfg.serverport());
    socklen_t server_addr_length = sizeof(server_addr);
    //服务器端建立TCP连接
    LOG_DEBUG("to connect server.");
    if (connect(client_socket, (struct sockaddr*)&server_addr, server_addr_length) < 0)
    {
        printf("can not connect to server.\n");
        LOG_ERROR("can not connect to server.");
        return 0;
    }
    LOG_DEBUG("connect server success.");

    return client_socket;
}
在其他函数中调用:
int sock = createSocket();
if ( send(sock, sendMsg.c_str(), 1024, 0) <= 0)
{
     printf("send error\n");
}

send 成功, 对方网卡也能抓到包, 但服务器就是收不到信息, 我把client sococke改成一个全局的就好了, 这是怎么回事呀,想不明白了
  • 写回答

1条回答

  • oyljerry 2016-06-27 10:21
    关注

    传递socket的时候,传递指针或引用等,防止被复制多份

    评论

报告相同问题?

悬赏问题

  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料