相关疑难解决方法(0)

获取机器的IP地址

此问题与之前询问的获取本地计算机的IP地址 -Question 几乎相同.但是,我需要找到Linux机器的IP地址.

那么:我如何 - 在C++中编程方式 - 检测运行我的应用程序的linux服务器的IP地址.服务器至少有两个IP地址,我需要一个特定的IP地址(给定网络中的一个(公共网络)).

我确信有一个简单的功能可以做到这一点 - 但在哪里?


为了让事情更清楚:

  • 服务器显然会有"localhost":127.0.0.1
  • 服务器将具有内部(管理)IP地址:172.16.xx
  • 服务器将具有外部(公共)IP地址:80.190.xx

我需要找到外部IP地址来绑定我的应用程序.显然我也可以绑定到INADDR_ANY(实际上这就是我现在所做的).不过,我更愿意检测公共地址.

c++ linux networking ip-address

91
推荐指数
7
解决办法
17万
查看次数

如何获取客户端程序的本地TCP端口和IP地址?

我正准备一个简单的工作项目,并试图熟悉Unix开发环境中套接字编程的基础知识.此时,我有一些基本的服务器端代码和客户端代码设置进行通信.目前,我的客户端代码成功连接到服务器代码,服务器代码向它发送测试消息,然后退出.完善!这正是我想要完成的.现在,我正在使用用于获取有关两个环境(服务器和客户端)的信息的函数.我想获取本地IP地址并动态分配客户端的TCP端口.我发现这样做的功能是getsockname()......

//setup the socket
if ((sockfd = socket(p->ai_family, p->ai_socktype, p->ai_protocol)) == -1) 
{
   perror("client: socket");
   continue;
}

//Retrieve the locally-bound name of the specified socket and store it in the sockaddr structure
sa_len = sizeof(sa);
getsock_check = getsockname(sockfd,(struct sockaddr *)&sa,(socklen_t *)&sa_len) ;
if (getsock_check== -1) {
    perror("getsockname");
    exit(1);
}

printf("Local IP address is: %s\n", inet_ntoa(sa.sin_addr));
printf("Local port is: %d\n", (int) ntohs(sa.sin_port));
Run Code Online (Sandbox Code Playgroud)

但输出始终为零......

Local IP address is: 0.0.0.0
Local port is: 0
Run Code Online (Sandbox Code Playgroud)

有没有人看到我可能会做的事情或肯定做错了?

非常感谢您的帮助!

c unix sockets

3
推荐指数
1
解决办法
7036
查看次数

标签 统计

c ×1

c++ ×1

ip-address ×1

linux ×1

networking ×1

sockets ×1

unix ×1