본문 바로가기

디버깅

[Java] java.net.SocketException: Unexpected end of file from server (URL Encoding)

반응형



사실 소켓 Exception은 여러가지 이유로 발생합니다.

제 경우 get방식의 파라미터로 쿼리를 날리는 과정에서 파라미터의 한글 데이터를 UTF-8로 인코딩 처리하지 않아서 발생하였는데요.


너무나 당연한 것이었는데 어떤 서버에서는 그냥 한글로 넘겨도 에러가 발생하지 않고

어떤 서버에서는 에러가 발생해서.. 정확한 이유를 찾는데 시간이 조금 걸렸습니다.



해결방법은 파라미터값을 string변수에 담을 때 인코딩처리를 해서 담아주면 됩니다.


해당예제는 UTF-8로 처리하며 유니코드와 euc-kr도 같은 방법으로 가능합니다.



======================================================================================




서버의 인코딩 방식이 utf-8 이라면 클라이언트도 utf-8로 보내야한다.

그래야 서버가 디코딩하고 또다시 utf-8로 인코딩하는 번거로움도 없어지고 서로의 규약을 맞출수 있다.

예)
URL url = new URL("http://www.test.com/login.jsp?id=홍길동&pass=지리산 호랑이");

예문과 같이 하게되면 홍길동과 지리산 호랑이가 한글이고 이것의 인코딩 방식이 자바의 인코딩 방식을 따르기 때문에 서버에서는 이상한 문자로 받아들일수가 있다.

이 경우
String id=URLEncoder.encode("홍길동", "UTF-8");
String pass=URLEncoder.encode("지리산 호랑이", "UTF-8");
URL url = new URL("http://www.test.com/login.jsp?id="+id+"&pass="+pass);

이런식으로 한글을 인코딩하여 url 에 써주어야한다.
위의 GET 방식뿐만 아니라 POST 방식도 마찬가지다

필자의 경우는 서버와 클라이언트 둘다 UTF-8 로 문자 인코딩 방식을 맞추었다.
개발자에 따라 자신이 원하는 인코딩 방식을 정하고 그에 맞게 URLEncoder를 이용하여 한글을 인코딩하기 바란다.


아래는 검색하다가 이거다 싶어서 퍼왔다.  저 자세한 내용은 출처에 있으니 참고하시길..

String url = "http://example.com";
String charset = "UTF-8";
String param1 = "value1";
String param2 = "value2";
// ...
String query = String.format("param1=%s&param2=%s",
     
URLEncoder.encode(param1, charset),
     
URLEncoder.encode(param2, charset));



출처: http://onecellboy.tistory.com/113 [신불사 - 신현호라 불리는 사나이]

반응형