TCP 서버를 만들일이있어서 만들고나니, 접속한 클라이언트마다 국가를 확인해야하는데 국가를 확인할수있는방법이 그리 많지않아서 예제삼아 만들어보았다.
두가지 정도 방법이 있는데 첫번째방법으로는
1. java.net.Socket 으로 찾기
import java.net.Socket;
// ...
Socket clientSocket = serverSocket.accept(); // 클라이언트와 연결 수립
InetAddress clientAddress = clientSocket.getInetAddress();
String clientIpAddress = clientAddress.getHostAddress();
구글링해서 찾은결과 이렇게하면 알수있다는데 이렇게해봤는데 못찾는경우가 많았다.
2. ip주소로 위치정보 얻기
말그대로 ip주소로 위치정보를 얻는것인데 외부 api 를 사용해야하고 일정 트래픽 이상 요청하게되면 유료를 사용해야한다는 단점이있지만, 정확한 국가정보를 알수있다.
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import org.json.JSONObject;
public String getCountryByIP(String ipAddress, String apiKey) {
try {
URL url = new URL("http://api.ipstack.com/" + ipAddress + "?access_key=" + apiKey);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String inputLine;
StringBuilder content = new StringBuilder();
while ((inputLine = in.readLine()) != null) {
content.append(inputLine);
}
in.close();
connection.disconnect();
JSONObject jsonObject = new JSONObject(content.toString());
return jsonObject.getString("country_name");
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
위의 getCountryByIP 메소드로 ip주소와 api 키를 인자로 받아서 처리한다.
String apiKey = "YOUR_API_KEY"; // Ipstack에서 받은 API 키
String country = getCountryByIP(clientIpAddress, apiKey);
System.out.println("클라이언트 국가: " + country);
'Java > Java😊' 카테고리의 다른 글
[Java] call by value 는 있지만, call by reference 는 없다. (0) | 2023.06.07 |
---|---|
[Java] 기본타입과 참조타입에 대한 이해 (데이터타입) (0) | 2023.05.23 |
[Java] enum 개념과 예시 (0) | 2023.05.10 |
[Java] 다중 파일 업로드 (MultipartFile[]) window,linux (0) | 2022.04.20 |
[Java] 현재접속한 IP, Browser, OS, 접속정보 확인 하는 방법 (0) | 2022.04.16 |