2016-08-04 2 views
1

사람들이 파일을 공유 할 수있는 앱을 만들고 있습니다. 지금은 텍스트 만 공유하려하지만 곧 파일로 변경하겠습니다. 하지만 소켓 연결을 만드는 데 문제가 있습니다 (2 개의 장치는 이미 핫 스폿을 통해 연결되어 있습니다. 그 중 하나는 핫 스폿이고 다른 하나는 핫 스폿입니다).Android - 서버와 클라이언트간에 데이터 전송

나는 정상적인 자바 소켓 연결을하려고했으나, 전화기가 잠자기 상태가되면 소켓이 닫히거나/시간 초과된다는 것을 여기서 읽었다. 당신이 그 문제에 대해 권고 한 해결책은 인 텐트 서비스를 사용하는 것이 었습니다.

두 IntentServices, ClientCommService 및 ServerCommService를 만들었습니다. 나는 onHandleIntent() 메소드 내부에서 소켓을 생성하고 들어오는 메시지를 기다리거나 기다리는 (스트림 객체를 만들고 소켓을 시작해야 함) 것을 권고한다. 내 문제는 내가 또한 메시지를 보내고 싶습니다 및 논리를 넣어 this.out.writeObject() 메시지를 보내야할지 모르겠다. 모든 구성원 (서버 또는 클라이언트)이 시작할 수있는 양방향 통신을 만들고 싶기 때문에 이는 중요합니다.

질문 2 : 내가 stackoverflow에서 본 몇 가지 접근 방식은 서버용 IntentService 만 만들었습니다. 왜?

답변

0

휴대 전화가 잠자기 후에도 서비스를 계속 사용하려면 IntentService 대신 Service을 만들어야합니다.

또한 서비스를 STICKY 서비스로 유지해야합니다.

@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 

    return START_STICKY; 
} 

이 서비스는 주 스레드에서 실행되므로 코드를 처리하지 않으면 UI 스레드가 중단되지 않습니다.

클라이언트/서버 로직을 onStartCommand 메소드에 넣을 수 있습니다.

+0

따라서 IntentService가 작동하지 않습니까? 그건 그렇고, 내가 어디에 논리를 보내야합니까? 양방향 연결이 필요합니다. 도움을 주셔서 감사합니다 –

+0

IntentService는 대기열을 관리하므로 FIFO 시스템이되지만 더 많은 작업이있을 수 있습니다. 클라이언트와 서버 로직이 독립적으로 호출 할 때 클라이언트 서버 로직을 onStartCommand 메소드 내에 작성할 수 있습니다. – dhams

+0

업데이트 : networkonmainthread 예외를 줄 것이므로 논리를 onStartCommand에 넣을 수 없습니다. 나는 그것을 작동하도록 관리하지만, 이제는 다른 문제가 발생했습니다. 왜냐하면 (다른 시간에 해고되는) 서비스 내에 2 개의 스레드가 있기 때문에, 이미 사용중인 소켓에 문제가 있습니다. –

관련 문제