socket 文件描述字参数传递使用不正确吗
在函数里完成了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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论