2011-09-13 3 views
0

테스트 목적으로 로컬 무선 네트워크를 통해 작동하도록 채팅 앱을 개발하고 있습니다. 통신 전송을위한 최선의 선택은 무엇입니까? (각 전화기에는 로컬 IP 만있는 유일한 정보라고 가정) 소켓? 그냥 테스트이기 때문에 채팅을 언급테스트를 위해 로컬 무선 네트워크의 두 전화기간에 데이터를 전송하려면 어떻게해야합니까?

, 내 목적은 같은 등 일부 변수의 값, 배열

어떤 아이디어/제안 :

+1

귀하의 질문에 혼란 스럽습니다. 파일 전송이나 단순한 메시지/채팅에 대해 묻고 있습니까? – Hyangelo

+0

@ Hyangelo 당신은 완전히 옳았습니다. 나는 작은 패킷의 데이터 (변수, 배열, 그런 것들)의 전달에 대해 말하고 있습니다. 파일 전송 없음! – Tiago

+0

제목이 파일 전송 대신 데이터를 나타낼 수 있도록 편집을 제출했습니다. – Hyangelo

답변

1

간단한 소켓 및 버퍼링 된 스트림을 사용하십시오. 필요한 JSON 인코딩 된 메시지 세트를 작성하십시오. 해당 메시지를 사용하여 데이터를 랩핑하고 소켓을 통해 보내십시오. 경험으로부터 JSON 메시지의 길이를 나타내는 방법을 통합해야하며, 때때로 메시지 전송/수신 도중에 지연/갭이 발생합니다. 우리가 한 일은 메시지의 처음 4 바이트 (예를 들어, Int)는 후속 메시지의 (바이트) 길이를 나타냅니다. 예 : JSON 문자열이 30 바이트 길이 인 경우 소켓을 통한 모든 전송이 길이 - 페이로드 조합의 쌍으로 이루어 지도록 실제 메시지를 먼저 30 (바이트) 보내십시오.

개인적으로 저는 이것을 Android 프로젝트에서 수행했습니다. ObjectInputStream/ObjectOutputStream 라우트를 계속 진행하면 다른 플랫폼 (예 : iOS 등)과의 호환성이 향상됩니다. 청크로 묶인 base64로 인코딩 된 json 페이로드를 사용하여 파일을 전송하기까지했습니다 (모든 메시지가 여전히 JSON에 있음).

나는 길이 - 페이로드 쌍이 최선의 방법이라고 생각하지 않습니다.

+0

문제는 소켓에서 항상 열린 포트 가용성 문제가 필요하다는 것입니다 ... 맞습니까? 이 응용 프로그램은 많은 무선 랜에서 작동하도록되어 있습니다. 어떻게이 문제를 해결해야하는지 확신 할 수 없습니다. – Tiago

+0

클라이언트가 연결할 수 있도록 서버가 포트를 청취하고 있어야합니다. 서비스 (예 : 서버 세션)를 광고하는 데 필요한 일종의 방법이 필요하다면 특히 jmDns 라이브러리에서 ZeroConf를 살펴볼 수 있습니다. 개인적으로 공개 세션을 브로드 캐스트하기 위해 사용했습니다. – Hyangelo

1

를 사용하여 기존의 채팅 라이브러리를 감사합니다 (같은 데이터를 전송하는 것입니다 Smack) 표준화 된 채팅 프로토콜 (XMPP)의 구현을 제공하고 하위 수준의 세부 사항을 모두 잊어 버립니다.

참고 : FTP는 파일 전송 용이며 사용하는 모든 통신은 거의 TCP를 사용하는 소켓 기반입니다. 유일한 질문은 원시 TCP를 사용하고 직접 프로토콜을 작성하는지 또는 기존 프로토콜과 구현을 사용하여 애플리케이션 세부 사항을 걱정할 수 있는지 여부입니다.

+0

예, FTP가 단지 파일 전송을위한 것임을 완전히 잊었습니다. 불행히도 채팅 라이브러리는 저에게 적합하지 않습니다. 왜냐하면 저는 데이터 전송을 테스트하기 위해 채팅을 개발하고 있기 때문에 채팅에 대해서는별로 신경 쓰지 않아요. 작은 데이터 패킷 (변수, 배열 등)을 전송하면됩니다.) – Tiago

2

아마도 가장 간단한 옵션 중 하나는 소켓을 사용하고 PrintWriterLineNumberReader에 스트림을 래핑 한 다음 JSON 인코딩 데이터를 보내는 것입니다. 작은 변수/배열에 적합해야합니다.

관련 문제