使用winsock我希望我的服務器應用程序只接受來自某個特定子網(比如192.168.0.0/24
)的連接。每次只接受來自特定子網的連接
檢查客戶端的地址我
accept
連接:我想到的兩種選擇。
while (true) { SOCKET clientSocket = accept(serverSocket, (SOCKADDR *)&clientAddress, &addressLenght); if (clientSocket == INVALID_SOCKET || clientAddress.sin_addr.S_un.S_un_b.s_b1 != 192 || clientAddress.sin_addr.S_un.S_un_b.s_b2 != 168 || clientAddress.sin_addr.S_un.S_un_b.s_b3 != 0) { closesocket(clientSocket); continue; } ... }
找出本地地址對應的網絡和
bind
SOCKADDR_IN serverAddress; serverAddress.sin_family = AF_INET; serverAddress.sin_port = htons(13666); serverAddress.sin_addr.S_un.S_addr = inet_addr("192.168.0.1"); result = bind(serverSocket, (SOCKADDR *)&serverAddress, sizeof(serverAddress));
我有什麼其他選擇使用它作爲name
說法?
P.S .:我被告知有更好的解決方案。但我無法弄清楚。
我希望地址實際上是從一個配置文件中加載的,否則每次網絡需要重組並因此重新編號時,網絡管理員都會「愛」你! –
@EmilioGaravaglia是的,當然。上面的代碼僅僅是一個例子。 – Igonato
「有人告訴我有更好的解決方案」 - 但他們不會費心去解釋至少一點? –