자바와 c언어간 문자열 차이점 질문입니다.

ssif의 이미지

C/S기반으로 프로그래밍을 하고 있습니다.
클라이언트는 ms windows에서 돌아가는 자바 애플릿이고 서버는 ms windows에서 동작하는 c언어와 win32기반의 프로그램입니다.

채팅부분을 구현하는데 있어서 한가지 문제점이 발생했습니다.클라이언트에서 서버로 채팅 문자열을 보내고 서버에서 받아서 다시 클라이언트로 되돌려 보냅니다.이때 문제가 발생합니다.클라이언트로 보내진 문자열의 출력 예상 결과는 이렇습니다.

"aaaa"라고 클라이언트가 서버에게 문자열을 전송합니다.
"aaaa"받은 서버가 클라이언트에게 "aaaa"라는 문자열을 되돌려 보냅니다.

클라이언트에서 받은 문자열을 출력해보면 예상은 "aaaa"가 나와야 하지만 실재로는 "a a a a"라고 출력이 됩니다.

왜 이렇게 되는지 잘 모르겠습니다.제가 맞은 부분은 서버 파트라서
자바쪽은 잘 모릅니다.서버쪽에서 어떻게 처리 해주어야 이 문제를 해결 할 수 있을까요?

미리 감사드립니다.

서지훈의 이미지

받는 쪽에서 적당히 공백을 제거 하세요...
지금으로선 이게 정답일듯...

Either that or show me the source...

<어떠한 역경에도 굴하지 않는 '하양 지훈'>

#include <com.h> <C2H5OH.h> <woman.h>
do { if (com) hacking(); if (money) drinking(); if (women) loving(); } while (1);

M.W.Park의 이미지

양자간의 인코딩 문제로 보입니다만...
인코딩을 맞춰주세요.
제 생각엔 자바쪽에서 stream에 읽고 쓸때 서버쪽으로 맞춰주는게 편할듯합니다만, 그 반대로 해도 별 상관없을것같네요.

-----
오늘 의 취미는 끝없는, 끝없는 인내다. 1973 法頂

세이군의 이미지

인코딩 문제입니다.
자바는 기본 인코딩이 UTF-8로 되어 있습니다.
서버 프로그램을 유니코드로 컴파일하여 돌리면 이런 현상없이 가능할 것입니다.

ssif의 이미지

답변 감사합니다.^^
테스트를 더 해봐야 하겠군요.클라이언트가 자바 애플릿 말고도 2가지가 더 있어서 어떻게 해야 예상한 결과를 얻을수 있는지 테스트가 더 필요한것 같습니다.

봄들판에서다

최종호의 이미지

윈도우쪽에서 wchar_t 를 사용하신 게 아닌가 하는 생각이 듭니다.
자바는 내부적으로 16 bit 유니코드 케릭터셋을 사용하지만
인코딩은 일반적으로 native OS의 인코딩을 따라갑니다.
file.encoding 시스템 프로퍼티를 보시면 현재 적용된 인코딩을 아실 수 있습니다.

한글 윈도우 2000의 경우에는 MS949이고, 이는 ksc5601-1987의 확장이므로
아스키 코드영역내에서는 1바이트로 동일한 코드값과 크기를 가집니다.
이는 인코딩이 utf-8인 경우에도 같고요.

만일 자바에서 String s = "abcd" 를 전송한다면,
s.getBytes()를 사용해서 stream에 실었을 텐데,
이때는 아마도 abcd 가 사이에 빈칸(00) 이 없이 정상적으로
윈도우까지 전달되었을 것입니다.

추측으로는 윈도우에서 자바로 전달된 데이터는
a b c d 와 같이 빈칸이 하나씩 들어있지 않을까 싶습니다.

방법은
1. 윈도우에서 제대로 abcd로 내려주든가
2. 자바에서 인코딩을 이에 맞도록 변경해서 문자열을 받든가
하는 것일테고요,
byte[] receivedData = xxxxxx;
String t = new String(receivedData, "UTF-16BE");
정도로 받으시면 되지않을까 합니다.

cjh의 이미지

빈칸이 스페이스(0x20)인지 NULL (0x00)인지 확인해 보시고, 한글을 전송해 보면 어떤 인코딩으로 가고 있는지 확실히 알 수 있겠네요.

어쨌든 서버-클라이언트 간의 인코딩은 명확히 고정해 두는 편이 좋겠습니다.

--
익스펙토 페트로눔

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.