클라이언트에서 소켓을 이용해서 서버에 접속하면, 서버가 2바이트 아스키로
된 한글 문자열과 영문자, 숫자등의 정보를 클라이언트로 내려줍니다.
클라이언트는 소켓에서 readFully() 함수를 써서 바이트의 배열에 데이타를
담아서, 해석하게 되는 데, 영문자, 숫자 정보는 제대로 해석이 됩니다. 근데
한글 부분을 해석해서 화면에 출력하면 제대로 출력이 되지 않습니다.
자바가 데이타를 읽은 후에 Unicode로 변환해서 화면에 뿌리는 것 같습니다.
따라서, 서버에서 내려온 한글 문자열을 Unicode로 제대로 변환만 해주면 될
것 같습니다.
고수님들 중에 Ascii문자를 Unicode로 제대로 변환하는 방법을 아시거나,
참고 서적 또는 참고할 수 있는 사이트를 알고 계시는 분은 꼭 좀 도와
주세요.
클라이언트에서 한글을 입력받는 부분은 없으면, 서버에서 내려오는 한글
데이타를 제대로 Unicode로 변환해서 화면에 뿌려주기만 하면될 것 같습니다.
많은 지도 부탁드립니다.
우리의 입에서 IMF란 말이 사라질 때까지 근검절약하고, 아나바다 운동을
실천합시다.
BufferedReader in = new BufferedReader(new
InputStreamReader(socket.getInputStream()));
클라이언트에서 이렇게 하면 될 것 같습니다.
InputStreamReader의 역할은 바이트 스트림을 문자스트림으로 바꿔주고,
KSC5601를 유니코드로 바꿔주는 역할을 합니다.
그러니까, 서버에서 보내는 KSC5601바이트 스트림을 클라이언트에서
유니코드 문자스트림으로 바꿔 주는 역할을 합니다.
반대로, 서버로 유니코드가 아닌 KSC5601바이트(!)스트림을 보낼려면,
클라이언트에서
BufferedWriter out = new BufferedWriter(new
OutputStreamWriter(socket.getOutputStream()));
물론 여기서 OutputStreamWriter를 사이에 넣은 것은 유니코드 문자
스트림을 한글 바이트 스트림으로 바꾸기 위해서입니다.
참고적으로 일본문자(shift-jis)를 읽기위해서는
....(new InputStreamReader(socket.getInputStream(), "SJIS")));
뒤의 인자에 encoding문자열을 넣어주면 됩니다.
틀릴 경우에는 다른 분들의 조언 부탁드립니다.
자세한 것은 마소12월호를 보십시요.
JDK1.1.x 버전을 사용하신다면 서버-클라이언트간의 한글 전송에서
굳이 바이트 배열을 주고 받지 않아도 됩니다.
JDK1.0.x 버전에서는 java.io.PrintStream 클래스를 사용하여
소켓으로 부터 생성시키는 출력스트림을 생성하여 문자열의 전송을 처리
했었는데,
JDK1.1.x부터는 java.io.PrintWriter 클래스를 사용하여
2바이트 문자로 구성된 문자열의 전송이 가능해 졌습니다.
따라서 단순히 서버에서 클라이언트로 문자열을 전송하는 것은
java.io.PrintWriter 클래스를 사용하여 간단히 해결할 수 있습니다.
만약 특수한 목적으로 정해진 프로토타입으로 데이터를 전송해야 한다면
송수신용 소켓을 별도로 만들어서 해당 프로토타입의 데이터를
인코딩, 디코딩하는 기능을 넣어주면 되겠지요.
이러한 방법은 JDK1.1.x 부터 소켓및 서버소켓 클래스가 파이널에서 해제되어
이들을 상속받은 새로운 소켓을 만들 수 있게 되었기 때문이죠.
아무튼 특수한 목적에 사용될 소켓에서 구현하는 인코딩, 디코딩은
주로 바이트 연산을 사용하게 될 텐데, 일반적으로 별로 사용할 일은 없다고
봅니다.
대답이 되셨으면 좋겠네요...
jhjang 작성함:
> 자바로 소켓을 이용해서 서버와 통신하는 프로그램을 작성하고 있습니다.
>
> 클라이언트에서 소켓을 이용해서 서버에 접속하면, 서버가 2바이트 아스키로
> 된 한글 문자열과 영문자, 숫자등의 정보를 클라이언트로 내려줍니다.
>
> 클라이언트는 소켓에서 readFully() 함수를 써서 바이트의 배열에 데이타를
> 담아서, 해석하게 되는 데, 영문자, 숫자 정보는 제대로 해석이 됩니다. 근데
> 한글 부분을 해석해서 화면에 출력하면 제대로 출력이 되지 않습니다.
>
> 자바가 데이타를 읽은 후에 Unicode로 변환해서 화면에 뿌리는 것 같습니다.
> 따라서, 서버에서 내려온 한글 문자열을 Unicode로 제대로 변환만 해주면 될
> 것 같습니다.
>
> 고수님들 중에 Ascii문자를 Unicode로 제대로 변환하는 방법을 아시거나,
> 참고 서적 또는 참고할 수 있는 사이트를 알고 계시는 분은 꼭 좀 도와
> 주세요.
>
> 클라이언트에서 한글을 입력받는 부분은 없으면, 서버에서 내려오는 한글
> 데이타를 제대로 Unicode로 변환해서 화면에 뿌려주기만 하면될 것 같습니다.
>
> 많은 지도 부탁드립니다.
>
> 우리의 입에서 IMF란 말이 사라질 때까지 근검절약하고, 아나바다 운동을
> 실천합시다.
--
**********************************************************************
/T /I
/ |/ | .-~/
T\ Y I |/ / _
/T | \I | I Y.-~/
I l /I T\ | | l | T /
T\ | \ Y l /T | \I l \ ` l Y
__ | \l \l \I l __l l \ ` _. |
\ ~-l `\ `\ \ \\ ~\ \ `. .-~ |
\ ~-. "-. ` \ ^._ ^. "-. / \ |
--~-._ ~- ` _ ~-_.-"-." ._ /._ ." ./
>--. ~-. ._ ~>-" "\\ 7 7 ]
^.___~"--._ ~-{ .-~ . `\ Y . / |
<__ ~"-. ~ /_/ \ \I Y : |
^-.__ ~(_/ \ >._: | l______
^--.,___.-~" /_/ ! `-.~"--l_ / ~"-.
(_/ . ~( /' "~"--,Y -=b-. _)
(_/ . \ : / l c"~o \
\ / `. . .^ \_.-~"~--. )
(_/ . ` / / ! )/
/ / _. '. .': / '
~(_/ . / _ ` .-<_
/_/ . ' .-~" `. / \ \ ,z=.
~( / ' : | K "-.~-.______//
"-,. l I/ \_ __{--->._(==.
//( \ < ~"~" //
/' /\ \ \ ,v=. ((
.^. / /\ " }__ //===- `
/ / ' ' "-.,__ {---(==-
.^ ' : T ~" ll
/ . . . : | :! \\
(_/ / | | j-" ~^
**********************************************************************
Room 203, Chunghwa B/D, 1339-7
Seocho-Dong, Seocho-Ku
Seoul, KOREA, 137-072
Java / Network Programmer
Hoonseop, Dolphin, Kim
email dol...@haninfo.com
PC 통신 ID : hinfo(Dacom)
: haninfo(Hitel)
: 외계에서(Unitel)
Tel. 82-2-581-1450
Fax. 3473-6770
P.P 012-200-7213
**********************************************************************