socket 文件描述字参数传递使用不正确吗

发布于 2022-09-03 00:08:37 字数 1974 浏览 16 评论 0

在函数里完成了socket的创建,绑定,连接,最后函数返回该套接字文件描述字变量
在另一个函数里调用该函数,并利用该socketid发送消息,在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改成一个全局的就好了, 这是怎么回事呀,想不明白了

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文