2012-10-25 53 views
4

我有一個端口上運行的服務器端口7761在我的服務器與ip說10.2.110.43 現在有很多客戶端運行在不同的服務器上等待端口7761上的連接,以ascii格式將數據寫入該端口。服務器套接字接受來自特定ip的連接java

我想要serversocket驗證client-ipadress,然後接受來自客戶端的連接。

有沒有辦法做到這一點?

+1

什麼阻止你在代碼中驗證客戶端IP? – Manish

回答

5

如果您不介意在SecurityManager下運行,並且IP地址列表是靜態的,您可以通過security.policy文件完成此操作。只需將SocketPermission "accept"授予您想要接受連接的IP地址即可。然而,在代碼或防火牆中按照其他答案中的建議進行操作可能更可取。

+0

我也一直在代碼中這樣做,但認爲你這樣建議的方式實際上要乾淨得多。你也可以更容易地配置範圍,因爲列表在文件中(儘管做類似的代碼也很容易)。 – PSIXO

4

我們看到在下面的代碼,我們不能前accept()之後檢查對口地址:

Socket client = serverSocket.accept() 
if(acceptedClients.contains(client.getInetAddress()) { 
    ... 
} 
else { 
    client.close(); 
} 

隨着acceptedClients衆所周知InetAddress類的集合。

3

如果您不希望連接到達您的Java ServerSocket#accept(),除非它來自特定的IP,則必須將防火牆配置爲執行此操作。

建立連接後,您可以隨時驗證IP地址,如果不是來自正確的IP,請立即關閉IP地址。

相關問題