2013-06-12 2 views
0

자바 서버와 일부 유닉스 및 Windows 클라이언트간에 소켓 데이터를 공유하기 때문에 플랫폼 독립적 인 소켓 통신이 어떻게 작동하는지 이해하려고합니다. 소켓은 설계 상 플랫폼에 독립적이지만 데이터 표현은 기계와 관련되어 있으므로 한 시스템에서 지원되는 데이터 형식이 다른 시스템에서 반드시 지원 될 필요가 없기 때문에 TCP 데이터가 실제 데이터 형식을 추상화하는 경우 유리합니다 .플랫폼 독립적 인 소켓 통신 프로토콜

예를 들어, C++ 클라이언트 프로그램에서 서명되지 않은 int 값을 Java 서버로 보내려면이 숫자를 음수로 해석해야한다고 서버에 알려야합니다. 이런 종류의 추상화는 어떻게 작동합니까? 제한된 지식으로 나는 숫자를 문자로 보내고 수신자에게 어떤 종류의 데이터를 받았는지 알려주는 일종의 고유 한 문자 시퀀스를 추가 할 것이지만 이것이 가능한 접근법인지는 모른다.

좀 더 구체적으로 : 나는 다음과 같은 내용이 포함 된 메시지 보내 싶습니다 수신기가 정확히 알 수 있도록

  1. 메시지 짧은 신호 또는 명령 어떤 종류의 시작 부분에서 무엇 따라야 할 데이터와 관련이 있습니다.
  2. 그런 다음 임의의 길이의 일부 텍스트 콘텐츠.
  3. 텍스트 뒤에 숫자가 올 수 있지만 별도로 해석해야합니다 ( ).
  4. 마지막에 메시지가 끝나는 서버에 으로 끝나는 표시가있을 수 있습니다.

TCP는 데이터를 바이트 청크로 처리합니다. 이것은 클라이언트 기계가 자바의 빅 엔디안 바이트 순서를 고려한다면이 문자가 다른 기계에서 같은 방식으로 해석되는 UTF-8로 인코딩 된 문자를 1 바이트로 쓸 때 의미가 있습니까? 모든 입력과 도움에 감사드립니다.

+2

JSON, protobuf. – ctn

+0

"소켓은 설계 상 플랫폼에 독립적이지만 데이터 표현은 기계와 관련이 있습니다."- 이렇게 선택하면! 이 문제가없는 데이터 형식을 선택하면됩니다. @ctn에 따르면 JSON 또는 protobuf를 선택할 수 있습니다. 문제 해결됨. – fge

+0

Protobuf는 이것을 읽을 때 내가 생각하고 있던 것입니다. – dwxw

답변

0

소켓 독립되지만,하지에 전송 된 데이터 (유형 길이, 바이트 순서, 문자열 인코딩, ...)

봐에서 Thrift, Protobuf 또는 교차 언어와 바이너리 데이터를 보내려면 Avro 및 교차 플랫폼 기능 번호

+0

나는 그 문제를 안다. 그러나 어떻게 작동 하는지를 알고 싶기 때문에 라이브러리를 사용하고 싶지 않았다. 테스트 목적으로 나는 단순한 데이터를 보내고 싶다. – user1812379

관련 문제