c++ api gethostname

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++ api gethostname相关的知识,希望对你有一定的参考价值。

#include <sys/utsname.h>
#include <netdb.h>
#include <sys/socket.h>
void main()

char hostName[100];
gethostname(hostName,sizeof(hostName));
cout<<"local machine name is"<<hostName<<endl;

问题是:为什么我会打印出一堆乱码?
你的程序有错,在VC6下根本不能运行,我刚学Api,不会改,请指点下好吗?先谢谢了!
00.obj : error LNK2001: unresolved external symbol _WSACleanup@0
00.obj : error LNK2001: unresolved external symbol _WSAGetLastError@0
00.obj : error LNK2001: unresolved external symbol _gethostname@8
00.obj : error LNK2001: unresolved external symbol _WSAStartup@8
Debug/00.exe : fatal error LNK1120: 4 unresolved externals

参考技术A 用SOCKECT第一个函数就应该用WSAStartup,
既然要用,那么就释放。
你可以不用,那么就是乱码
------------------------
#include <winsock.h>
#include <iostream.h>
void main()

char hostname[256];
WSAData wsaData;
WSAStartup(MAKEWORD(1,1), &wsaData); //!!!<-你忘了用这个
int res=gethostname(hostname, sizeof(hostname));
if (res !=0)
cout << WSAGetLastError();

else
cout << hostname;
WSACleanup(); //用完记得释放


---------------------

还有hostName长度为255,所以不要截取一半。

Java 8 InetAddress.getHostName 不适用于本地主机

【中文标题】Java 8 InetAddress.getHostName 不适用于本地主机【英文标题】:Java 8 InetAddress.getHostName doesn't work for localhost 【发布时间】:2015-05-19 21:05:45 【问题描述】:

我刚刚将java 7升级到8。所有测试用例都无法连接到本地数据库。

我发现了一个与 java 8 升级相关的错误报告,它指向“localhost”问题,因此我将所有数据库 url 的 localhost 更改为 127.0.0.1。然后就可以了。

https://jira.atlassian.com/browse/CWD-3981

InetAddress.getHostName 行为改变了 java 7->8 的效果 除非你有 localhost 的 FQHN,否则它会在 8 中返回 localhost 作为 /etc/hosts 中的第一个别名

根据此链接,如果我正确设置 /etc/hosts,我仍然可以使用 localhost。这是我的 /etc/hosts:

127.0.0.1 localhost.localdomain localhost
255.255.255.255 broadcasthost
::1             localhost
fe80::1%lo0 localhost

这是正确的设置吗?

这是我在 application.conf 中的数据库 url。

db.default.url="postgres://postgres:postgres@localhost:5432/prdata"

【问题讨论】:

我不明白你的问题。你引用的那句话说getHostName确实返回"localhost"除非你采取行动来实现不同的目标。如果你想要使用"localhost",为什么你认为你必须做点什么? 我编辑了这个问题。这只是我发现的一篇与我得到的错误有关的帖子。然后我将 application.conf 中的数据库 url 从 localhost 更改为 127.0.0.1,它现在可以工作了。但我想知道为什么。 【参考方案1】:

我不确定在数据库连接期间是否调用了 getHostName..

您是否尝试过连接网址上的“jdbc”?

来自文档:

# Default database configuration using PostgreSQL database engine
db.default.driver=org.postgresql.Driver
db.default.url="jdbc:postgresql://database.example.com/playdb"

所以我猜你的应该是这样的:

db.default.url="jdbc:postgresql://localhost/prdata"

我尝试使用 play-2.4 + Java 8 应用程序,如果“jdbc”不存在,我会收到“配置错误[无法连接到数据库]”。

【讨论】:

以上是关于c++ api gethostname的主要内容,如果未能解决你的问题,请参考以下文章

编写 C++ API - 如何保持对 API 内部对象的外部引用?

C++ 中不容忽视的API 错误设计

Unix C++ 第三方 API 调用

C++ API 到 C# 的自动转换?

使用 LLVM c++ API 创建“类”定义

tensorRT C++ API