C++ 从C+;中的主机名获取computername+;?

C++ 从C+;中的主机名获取computername+;?,c++,windows,ip-address,hostname,C++,Windows,Ip Address,Hostname,IP地址是192.168.23.4。我可以使用以下代码段从ipaddress获取主机名: sa中的结构sockaddr_; char str[INET_ADDRSTRLEN]; 公司名称(AF_inet,“192.168.23.4”和(sa.sin_addr)); saGNI中的结构sockaddr_; 字符主机名[NI_MAXHOST]; char-servInfo[NI_-MAXSERV]; u_短端口=27015; saGNI.sin_family=AF_INET; saGNI.sin_a

IP地址是
192.168.23.4
。我可以使用以下代码段从ipaddress获取主机名:

sa中的结构sockaddr_; char str[INET_ADDRSTRLEN]; 公司名称(AF_inet,“192.168.23.4”和(sa.sin_addr)); saGNI中的结构sockaddr_; 字符主机名[NI_MAXHOST]; char-servInfo[NI_-MAXSERV]; u_短端口=27015; saGNI.sin_family=AF_INET; saGNI.sin_addr.s_addr=sa.sin_addr.s_addr; saGNI.sin_端口=htons(端口); DWORD dwRetval=getnameinfo((结构sockaddr*)&saGNI, sizeof(结构sockaddr), 主机名, NI_MAXHOST、servInfo、NI_MAXSERV、NI_NUMERICSERV); printf(“主机名:%s”,主机名); 我正在得到表单的输出

ComputerName.domain.com

如何从主机名中获取计算机名

Eg输入

ComputerName.domain.com

乙二醇输出

计算机名

有没有办法直接获取IP地址已知的系统的计算机名


我正在寻找与在远程系统上使用Hostname命令显示的结果相同的结果。

您的意思是,要在第一个句点之前截断字符串吗

std::string host(hostname);
size_t pos = host.find('.');
if (pos != std::string::npos)
{
   host = host.substr(0,pos);
}
strcpy(hostname, host.c_str());

检查手册页面中的getnameinfo

根据手册页面,您应该设置NI_NOFQDN标志

 NI_NOFQDN
          If set, return only the hostname part of the fully qualified
          domain name for local hosts.

如果您对查找运行代码的计算机的主机名感兴趣,可以简化任务:

#include <iostream>
#include <string>
#include <boost/asio.hpp>

int main() {
  std::string hostname = boost::asio::ip::host_name();
  std::cout << "hostname = " << hostname << std::endl;
}
#包括
#包括
#包括
int main(){
std::string hostname=boost::asio::ip::host_name();
标准::cout如emirc所建议,
以下代码正在打印Computername:

struct sockaddr_in sa;
char str[INET_ADDRSTRLEN];
inet_pton(AF_INET, "192.168.23.4", &(sa.sin_addr));

struct sockaddr_in saGNI;
char hostname[NI_MAXHOST];
char servInfo[NI_MAXSERV];
u_short port = 27015;
saGNI.sin_family = AF_INET;
saGNI.sin_addr.s_addr = sa.sin_addr.s_addr;
saGNI.sin_port = htons(port);

DWORD dwRetval = getnameinfo((struct sockaddr *) &saGNI,
    sizeof(struct sockaddr),
    hostname,
    NI_MAXHOST, servInfo, NI_MAXSERV, NI_NOFQDN);
printf("HostName: %s", hostname);
注意: 我已将国旗从 NIU数字服务


NI_NOFQDN

也适用于winsock,以防万一:一行代码:
std::getline(std::stringstream(主机名),主机');
请将答案放在答案块中。稍后,您可以接受自己的答案。另请参阅