특정 아이피로 HttpClient.excute(HttpPost) 실행

안녕하세요. 초급 자바 개발자 입니다. 프로그래밍을 하다 보면 생각해야 할게 정말 많은 것 같습니다. 그 중 많은 부분을 차지 하는게 네트워크 분야 입니다. 이번에 진행되는 프로젝트에서도 네트워크 관련 이슈 사항들이 나왔습니다. 단위 테스트 할 때는 정상적으로 동작하던 솔루션이   통합 테스트에서 안 되는 문제가 발생했습니다. 문제의 원인은 네트워크 라우팅에서 생기는 문제… 고객사에서 라우팅 테이블을 변경 할 수 없다고 합니다. 그래서 나온 대체 방안이 데이터를 보내기 전에 아이피 설정을 변경해서 전송하자 입니다. (이전까지 네트워크 라우팅 문제는 테이블 설정으로 해결을 했습니다. 하지만 서버에 저희 솔루션만 뿐만 아니라 다른 솔루션도 함께 설치가 되어 테이블 변경이 불가능 했습니다.)

먼저 제 노트북의 랜카드 설정을 보시죠. 해당 설정은 무선랜카드와 유선랜카드를 둘다 잡은 경우 입니다.

IP

네트워크 문제로 모든 데이터는 192.168.1.55을 Source로 전송 해야 한다면 아래와 같이 소스를 넣으면 됩니다.

 

File f = new File(user.getAdminController().getWebDir() + fileName);

HttpPost post = new HttpPost(pushURL);

FileBody fileBody = new FileBody(f);

MultipartEntity reqEntity = new MultipartEntity();

reqEntity.addPart(mcidFileName, fileBody);

post.setEntity(reqEntity);

/*

 * 다수의 랜카드 중에 네트워크 파일 전송이 가능한 아이피로 전송한다.

 * since 2011.03.25

 * author Coozplz

 */

// 반복 횟수를 줄이기 위해 Flag를 설정한다.

boolean isFind = false; 

// 모든 랜카드 정보를 얻는다.

Enumeration networkInterfaces = NetworkInterface.getNetworkInterfaces();

 // 기본은 첫번째로 한다.

InetAddress addr = InetAddress.getLocalHost();

while(networkInterfaces.hasMoreElements()) {

    // 랜카드중에 하나를 꺼낸다.

    NetworkInterface networkInterface = (NetworkInterface) networkInterfaces.nextElement();

    Enumeration ipEnum = networkInterface.getInetAddresses();

    while(ipEnum.hasMoreElements()) {

        InetAddress temp = (InetAddress) ipEnum.nextElement();

        // 아이피가 동일한지 확인한다.

        if(temp.getHostAddress().startsWith("192.168.1.55")){

            addr = temp;

            isFind = true;

            break;

        }

    }

    if(isFind) {

        break;

    }

}

 

HttpClient client = new DefaultHttpClient();

client.getParams().setParameter("http.connection.timeout", 1000);

client.getParams().setParameter("http.socket.timeout", 1000);

client.getParams().setParameter("http.protocol.version", HttpVersion.HTTP_1_1);

client.getConnectionManager().closeIdleConnections(2000, TimeUnit.MILLISECONDS);

 

// 찾은 InetAddress를 설정한다.

client.getParams().setParameter(ConnRouteParams.LOCAL_ADDRESS, addr); 

post.getParams().setParameter(ConnRouteParams.LOCAL_ADDRESS, addr);

 

HttpResponse response = client.execute(post);

client.getConnectionManager().shutdown();

위처럼 하면 192.168.1.55 아이피로 전송을 합니다. 참 쉽죠~~~~

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

%s에 연결하는 중