首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >尝试为套接字c++设置IP地址时绑定失败

尝试为套接字c++设置IP地址时绑定失败
EN

Stack Overflow用户
提问于 2015-12-11 19:05:10
回答 2查看 2.2K关注 0票数 0

所以我对sockets和C++还是个新手。我正在尝试在一台计算机上设置一个套接字,该套接字获取该计算机的IP地址,以便我可以从另一台计算机连接到该计算机。我正在设置IP地址和端口。然而,当涉及到绑定时,它总是失败。

因此,我将IP地址设置为我的计算机的IP地址,并设置了端口。

代码语言:javascript
运行
复制
#define DEFAULT_PORT "8080"
#define DEFAULT_IP "165.120.216.66"

然后我调用WSAStartup,一切似乎都很顺利。然后解析服务器地址和端口。

代码语言:javascript
运行
复制
ZeroMemory(&hints, sizeof(hints));
hints.ai_family = AF_INET;
hints.ai_socktype = SOCK_STREAM;
hints.ai_protocol = IPPROTO_IP;
hints.ai_flags = AI_PASSIVE;

然后是getaddrinfo并创建套接字。一切都很顺利

代码语言:javascript
运行
复制
status = getaddrinfo(DEFAULT_IP, DEFAULT_PORT, &hints, &data);   
MySocket = socket(data->ai_family, data->ai_socktype, data->ai_protocol);

然而,当涉及到绑定时,它总是失败,我就是不知道为什么。

代码语言:javascript
运行
复制
status = bind(MySocket, data->ai_addr, (int)data->ai_addrlen);

另外,有没有方法可以获得运行它的机器的IP地址,而不是对IP进行编码?

EN

回答 2

Stack Overflow用户

发布于 2015-12-11 19:21:25

如果我没理解错的话,这应该是服务器端。因此,您希望能够从另一台计算机connect到此套接字?然后,您不需要对特定地址执行bind操作,之后应该开始使用listen。例如:

代码语言:javascript
运行
复制
status = getaddrinfo(NULL, DEFAULT_PORT, &hints, &data); // get data for the local address 
MySocket = socket(data->ai_family, data->ai_socktype, data->ai_protocol);
bind(sockfd, res->ai_addr, res->ai_addrlen);
listen(sockfd, 10)
票数 1
EN

Stack Overflow用户

发布于 2015-12-11 19:08:20

只需将地址设置为INADDR_ANY:"0.0.0.0“。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34222042

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档