[완료]c server와 java client간의 통신 문제 질문 입니다.
안녕하세요
java와 c간의 TCPIP통신을 하고 있는데요 커넥트가 안되는 문제가 발생했었는데 그건 제 실수로
해결이 되었고 이번에 서로 통신을 해보니까 특이한 사항이 생겨서 질문을 드립니다.
구조는 에코 서버입니다. C가 서버이구요 자바가 클라이언트 입니다.
처음 서버가 열리구 클라이언트가 접속을 하고 자바에서 메세지를 입력받아서 서버에 전송을 하게 되어
있습니다.
그런데 서버측에서는 accept 때와 매번 메세지가 전송이 될때 마다 특이한 문자가 들어옵니다.
혹시나 해서 아래처럼 반복문으로 바이너리 값을 찍어봤습니다.
printf("[%02x]\n",(char *)message[i]);
ы
[ffffffac]
[ffffffed]
[00]
[05]
thi
[74]
[00]
[02]
[68]
[69]
thello
[74]
[00]
[05]
[68]
[65]
[6c]
[6c]
[6f]
이런식으로 나옵니다. 접속할때
"ы" 이문자와 [ffffffac][ffffffed][00][05]
바이너리 값을 찍는게 서툴러서 접속때는 어떤값인지 모르겠지만 메세지를 보낼때는 확실히
나타납니다. 74 00 02 ,74 00 05 이렇게 붙는 패턴을 보니까 3번재 02, 05 메세지의 길이를
나타내네요 74와 00의 의미는 모르겠지만..
클라이언트에게로 그대로 다시 전달해서 클라이언트에서 화면을 찍을때는 정상적인 값으로 보입니다.
어떠한 문자열에 대한 차이 때문이거나 전송방식의 차이가 있는거 같은데
C에서는 앞부분도 문자열로 취급하고 출력하기에 가령 값을 저장한다든지에서 문제가 생길꺼 같은데요
이부분을 통일 시켜줄수 없을까요? 되도록이면 java단에서...서버는 직장상사가 C로 짜는거라 어케 고쳐
달라 말이 안됩니다.ㅠㅠ
일단 결과를 봐서는 감이 잘 안옵니다만
printf 에서 찍는건 값이 아닌 주소인듯 하구요.
확인하실게 두가지 정도 인것 같습니다.
첫번째는 바이트 오더링이고 두번째는 스트링의 경우 자바 스트림에 '\0'이 포함되는지 여부
첫번째는 직장 상사 할애비라도 서로 맞춰야 하는 부분입니다. 스트링의 경우는 byte 배열을
확인하여 끝에 널캐릭터가 있는지 확인하세요.
-------------
포탈이는 불사신
-------------
포탈이는 불사신
해봤지만
일단 string 에다가 마지막에 "\0"을 붙여줬지만 안됩니다.
ex) sendData + "\0" //sendData는 전송될 데이터를 가지고 있음
그리고 바이터오더링 문제일거 같지 않는게 아직 완성이 아니라서 서버도 제가 만들었고 클라이언트도 제가 만들었습니다 같은 OS에서 돌아가기에 같은 인디언으로 바이트 오더링문제는 안걸릴꺼 같습니다.
그리구 위에서 제가 주소값을 찍어서 다시 헥사값으로 찍었습니다.
여전히 74 00 07 이런값이 뜨고 마지막에 07같은경우에는 전송될 숫자의 길이 입니다.
위랑 다르게 마지막에 ? 표가 붙었는데 클라이언트가 string 에다가 마지막"\0"를 붙여줬더니 생겼습니다.
헥사값은 80이네요
ы
[ac]
[ed]
[00]
[05]
thello?
[74]
[00]
[07]
[68]
[65]
[6c]
[6c]
[6f]
[c0]
[80]
hijung?
[74]
[00]
[08]
[68]
[69]
[6a]
[75]
[6e]
[67]
[c0]
[80]
자바*는 어떤
자바*는 어떤 기계에서 돌리든지 빅 엔디안이라고 들은 것 같아요.
http://kldp.org/node/98068
댓글 달기