2013-04-11 62 views
2

我想设置本地主机的名称。我使用sethostname()函数,但我得到一个错误如下:未找到sethostname标识符错误

error C3861: 'sethostname': identifier not found. 

下面的代码片段:

WSADATA wsa; 
///Initialise winsock/// 
if (WSAStartup(MAKEWORD(2,2),&wsa) != 0) 
    { 
     //Socket Initialization Failed/// 
     exit(EXIT_FAILURE); 
    } 
char setname[128]="Ayesha-PC"; 
sethostname(setname, sizeof (setname)); 
+1

你确定'sethostname'存在于桌面winsock上吗?我可以看到它[记录为WinCE](http://msdn.microsoft.com/en-us/library/aa450918.aspx),但它不出现在[桌面winsock2函数列表](http:// msdn.microsoft.com/en-us/library/windows/desktop/ms741394(v=vs.85).aspx) – simonc 2013-04-11 10:11:58

+0

我认为这是问题所在。是否有任何其他可以设置主机名的桌面winsock功能? :( – Ayse 2013-04-11 10:13:44

+1

@AyeshaHassan你的主机名以及它在你的NAT上注册的方式可能是不同的......假设你有两台单一NAT(你的连接)名字相同的计算机,那么你认为它们可以共享同一个名字吗?表他们注册一些其他的名字,例如第一个'Ayesha-PC-1'第二''Ayesha-PC-2'。使用你的IP你可以退休你的主机名读取关于[getaddrinfo函数](http://msdn.microsoft.com /en-us/library/windows/desktop/ms738520(v=vs.85).aspx)和其他相关函数来检索名称。你需要'IP'来'name'翻译函数一个DNS问题..一个有趣的Q + 1. – 2013-04-11 10:30:16

回答

4

Windows使用它设置的主机名自己的机制。您使用的功能是SetComputerNameSetComputerNameEx

更改在下次重新启动时生效。您可以使用ExitWindowsEx来请求重启。

您需要具有管理员权限才能调用这些例程,重启要求的原因是因为很多windows子系统在启动后不会检查主机名,并且会继续使用旧名称(这与此类似在Linux中);它也可能对域名中的DNS产生影响。