마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

python 서버 - android 클라이언트 소켓통신 질문입니다.

0 추천
좋은 아침입니다.

바로 질문으로 들어가겠습니다.

한번쯤은 꼭 해보셨을것 같아서 질문을 올립니다.

일단 소켓 통신으로 Nio SSL 소켓 통신은 잘 됩니다.

String 값도 잘 주고 받고 File도 잘 주고 받습니다.

헌데 여기서 문제가 서버(Server)쪽에서 구조체(Struct)를

클라이언트로 보내게 될 경우 클라이언트에서 이를 받으면

쓰레기 데이타? 라고 해야하나요

유니코드 바이트 아스키코드 등 String으로 바꿀 수 있는 모든 방법을

동원하여도 이상한 값이 찍힙니다. 이 부분이 왜 이렇게 되는지 혹여야

아시는분이나 그래서 그럴것이다 하는게 있으신분은 모두 답변 부탁드립니다..

이거 못해서 짤리게 생겼습니다....ㅠㅠ

이번주까지 못하면 짜를꺼같아요
개발왕이되고싶은 (1,110 포인트) 님이 2019년 4월 23일 질문

4개의 답변

0 추천

protobuf를 사용해보시는건 어떠신가요?

파이썬, 자바도 지원이 됩니다.

https://github.com/protocolbuffers/protobuf

 

익명사용자 님이 2019년 4월 23일 답변
0 추천
아.. 보통은 패킷을 정의해서 전달하는데, 구조체 자체를 던지면.. 자바에서 받기 좀 난감한데요..

이걸 제대로 읽기 위해서는 struct의 타입별 크기를 알아야 합니다. 우선 byte[]로 넘어오니, int를 예로 들면,  byte[]에서 4byte를 읽는데, Endian(자바는 Big임) 확인하고, struct의 타입별로 읽어주시면 됩니다.
mcsong (44,040 포인트) 님이 2019년 4월 24일 답변
0 추천
http://javolution.org/apidocs/javolution/io/Struct.html

가이드 참고해서 적용해보세요.

isPacked() 오버라이드해서 true로 반환해주시고

엔디안 처리는 byteOrder() 오버라이드해서 처리해 주시면 됩니다.

그리고 주의점은 String(UTF8String) 처리가 UTF-8로 적용되어 있습니다. 유니코드가 아니라면

(un)signed8 배열로 처리 해야 합니다.
racy (1,540 포인트) 님이 2019년 4월 24일 답변
racy님이 2019년 4월 24일 수정
...