2016-08-08 2 views
0

2 명이 wifi-hotspot (핫스팟으로 하나, wifi로 다른 사람과 연결)에서 메시지를 교환 할 수있는 프로젝트를하고 있습니다 (나중에 파일을 만들 것입니다). Android 서비스가 있습니까?

나는, 서버와 클라이언트에 대한 또 다른 하나 (내부, 한 정보, 정보를 읽을 수있는 또 다른 하나를 보내 두 개의 스레드)이 개 서비스를 사용하여 소켓 연결을 만들었습니다. 통신은 양방향이어야하며 그 중 하나에서 시작할 수 있으며 여기에 문제가 있습니다.

는 기본적으로 beggining에, 나는 서비스를 시작하고 수신 (내가 작업을 설정하는 방법에 그것을 확인 onStartCommand, 만들 수있는 스레드 알고)있는 스레드를 시작합니다. 그런 다음 사람이 버튼을 누르면 버튼을 누르면 메시지를 보낼 수 있습니다. 사람이 메시지를 보내면 다시 서비스를 시작하고 메시지를 보낼 스레드를 시작할 수 있도록 작업을 SEND로 설정합니다.

문제는 서비스를 다시 시작하면 (송신하려면) 이미 사용중인 소켓 예외 (이미 setReuseAddress (true)를 시도하고 있지만 작동하지 않음)가 표시된다는 것입니다. 나는 비슷한 문제가 스트림을 위해, 그들은 "관련"되지 않습니다 수 (한면에서의 OutputStream은 다른 측면에서의 InputStream에 대응 아니다 - 그들은 헤더는 생성 될 때마다 교환).

어떻게 내가 이것을 해결할 수 있다고 생각하니? 나는 스트림과 소켓을 정적으로 놓고 이미 만들어 졌는지 확인하지만 너무 일관성이없는 것 같다. 너희들이 필요하면, 내가 코드를 게시 할 수 있지만, 소켓이 사용하는 경우 종류의

답변

0

간단하게 확인 할 수 여부와 닫습니다 그것을

문제는 내가 그 소켓을 닫을 수 있다는 것입니다
private boolean isPortInUse(String host, int port) { 
    // Assume no connection is possible. 
    boolean result = false; 

    try { 
    (new Socket(host, port)).close(); 
    result = true; 
    } 
    catch(SocketException e) { 
    // Could not connect. 
    } 

    return result; 
} 
+0

, 왜냐하면 나는 아직도 나에게 보내지는 어떤 것을 "듣고"싶기 때문이다. 내가 말했듯이, 그것은 양방향 통신이고 envolved 부분 중 하나는 데이터를 보낼 수 있습니다. –

+0

는 한 OnCreate에서 소켓을 생성()와() OnstartCommand에서 그들을 가져 그래서 때마다 서비스를 다시 시작 후 OnstartCommand() 호출하고 당신은 내가 한 정확히 즉 소켓 –

+0

을 다시 사용할 수 있습니다. 도와 주셔서 대단히 감사합니다. –

관련 문제