C언어로 만든 서버와 JAVA로 만든 클라이언트의 통신 가능한가요

netbsd00의 이미지

들리는 얘기론 자료형이 틀리기 때문에

둘의 통신이 상당히 어렵다고 하던데

이 말이 사실인지요?

사실이라면 이 문제는 어떻게 해결해야

할까요? 알고 계시는분 도움좀 주세요..

dormael의 이미지

주로 모바일 플랫폼용 서버를 만들어 봤는데.

기본 데이터 타입의 바이트 오더와 부호 비트 관계만 알면 원하는 데이터를 얻는건 어려운 건 아닐것 같습니다. 서버는 자바로 만들었거든요.

물론 첨에는 좀 헤맸습니다.

바이트 오더는 같을거라구 생각했다가...

우선 테스트로 알고있는 자료형의 알고 있는 값을 보내고 받아보아서 둘의 차이를 본 다음(바이트 단위로 보면 이해가 쉽겠죠 ^^) 알맞은 컨버전 메소드나 함수를 만들면 되겠죠.

담부턴 그 함수나 메소드를 이용해 변환해 쓰기만 하믄 되니까요.

-- Signature --
青い空大好き。
蒼井ソラもっと好き。
파란 하늘 너무 좋아.
아오이 소라 더좋아.

dreampia의 이미지

그다지 어렵지 않습니다.
간단하게 모든 data를 string 형태로 주고 받을 경우에는 문제가 안 됩니다.
단지 C에서 정수/실수/struct 등의 형태로 data를 전송할 경우에 byte order, structure padding 등에 대한 문제가 있습니다.

>/dev/null 2>&1

fender의 이미지

커스텀 xml이나 웹서비스를 이용하는 것도 괜찮은 방법입니다.

----------------------------
[서명] 그놈 한국 사용자 모임 - 그놈에 대한 모든 것! - 게시판, IRC, 위키, 갤러리 등등...

nachnine의 이미지

그냥 string을 이용하면 해결됩니다.

젤 간단한 방법이죠

cedar의 이미지

fender wrote:
커스텀 xml이나 웹서비스를 이용하는 것도 괜찮은 방법입니다.

저도 Web Service를 추천합니다. 바로 이런 문제를 해결하기 위해 나온 것이죠. C/C++에서 웹서비스를 쓰는 것도 자바나 닷넷에 비해 약간 더 번거로울
뿐 그렇게 어렵지 않습니다.
see2002의 이미지

자바에서 JNI(Java Native Interface)를 이용할수도 있습니다.
서버(C/C++)와 클라이언트(Java)간에 통신을 하는 소켓모듈을
C/C++로 작성하고 자바는 JNI를 이용하여 이를 호출하면 됩니다.
어쩌면 간단하면서도 확실한 방법이지만, 다양한 플랫폼에서 실행되는
자바의 장점은 포기를 해야합니다.

mach의 이미지

dormael wrote:

바이트 오더는 같을거라구 생각했다가...


자바는 가상머신, 즉, 빅엔디안(RISC 및 모토롤라계열등), 리틀엔디안(x86기종등)을 가지는 하드웨어들과 준하는, 말그대로 가상머신입니다.
자바에서는 빅엔디안을 채택하고 있습니다.
자바가상머신 = 빅엔디안

------------------ P.S. --------------
지식은 오픈해서 검증받아야 산지식이된다고 동네 아저씨가 그러더라.

mach의 이미지

어렵다면, 인코딩때문입니다.
아시다시피 자바는 2바이트 코드를 기본으로 합니다. 유니코드지요.
유니코드 인코딩중 자바머신 내부에서 UTF16에 빅엔디안을 사용합니다.
C는 1바이트 코드를 사용하지요. ISO8859-1이 기본이겠지요.

대안은 자바의 인코딩(16비트)에 맞추던가, 아니면 C의 인코딩(8비트)에 맞추던가,
또는 제 3의 방법으로 어떤 표준 비슷한 UTF-8에 맞추면 되겠습니다요.

------------------ P.S. --------------
지식은 오픈해서 검증받아야 산지식이된다고 동네 아저씨가 그러더라.

choissi의 이미지

이런거 하나 만들어 보면 큰 흐름을 잡는데 좋겠죠

http://www.ezdoum.com/stories.php?story=03/06/30/6597026

소스가 궁금하시면
Jad - the fast JAva Decompiler 로 디컴파일을 해보세요
http://www.ezdoum.com/stories.php?story=03/06/30/4181464

울랄라~ 호기심 천국~!!
http://www.ezdoum.com