2012-10-25 2 views
4

포트에서 실행중인 서버 소켓이 7761이고 내 서버에서는 ip가 10.2.110.43 입니다. 이제 다른 서버에서 실행되는 많은 클라이언트가 포트 7761에서 연결을 기다리고 있습니다. 데이터를 해당 포트에 ASCII 형식으로 씁니다.특정 소켓에서 연결을 받아들이는 서버 소켓

serversocket이 client-ipadress를 확인한 다음 클라이언트의 연결을 수락하기를 원합니다.

할 방법이 있습니까? 우리는 다음 코드에서 볼

+1

코드에서 클라이언트 IP를 확인하는 것을 중단하는 것은 무엇입니까? – Manish

답변

5

SecurityManager에서 실행해도 괜찮으며 IP 주소 목록이 정적 인 경우 security.policy 파일을 통해이를 수행 할 수 있습니다. 연결을 수락하려는 IP 주소에만 SocketPermission "accept"을 부여하면됩니다. 그러나 다른 답변에서 제안 된대로 코드 또는 방화벽에서 수행하는 것이 더 바람직합니다.

+0

나는 코드에서이 일을 해왔지만 실제로는 훨씬 더 청결하다는 제안을하고있다. 목록에 파일이 있기 때문에 범위를 더 쉽게 구성 할 수도 있습니다 (코드와 비슷하지만 매우 쉽습니다). – PSIXO

4

, 우리는 후accept()하지만 전에 대응 의 주소를 확인할 수 없습니다 : acceptedClients

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

잘 알려진의 InetAddress의 컬렉션을.

3

특정 IP에서 오는 것이 아니라면 연결을 Java ServerSocket#accept()에 연결하지 않으려면 방화벽에서이 작업을 수행하도록 구성해야합니다.

연결이 설정된 후 항상 IP 주소의 유효성을 검사하고 올바른 IP 주소가 아닌 경우 즉시 닫을 수 있습니다.

관련 문제