2013-04-11 64 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產生影響。