2013-08-29 3 views
1

서버에서 UDP 패킷을 지속적으로 '수신 대기'하거나 '수신 대기'하는 클라이언트를 구현하는 방법을 파악하려고합니다.서버에서 UDP 패킷을 계속 수신합니다.

내가받을 때까지 socket.receive(packet)을 계속 유지해야 할 필요가 있습니까? 다시 한 번 열면됩니까?

의미있는 시간을 설정하여 최소한의 시간이 걸릴 수 있습니까?

내가해야 할 일은 :

나중에 얼마나 높은 볼륨에 따라 패킷

+0

Java NIO를 사용해 보셨습니까? – Nick

+0

chrylis는 Java NIO를 제안했지만 복잡성을 처리 할 수 ​​없다고 생각합니다. – benzabill

+0

이 구현에 성공했습니다. 안드로이드에 udp 리스너를 구현하고 장시간 작동하면 패킷 수신을 중단합니다. http://stackoverflow.com/questions/39271860/udp-broadcast-listener-stops-listening-after-long-time?noredirect=1#comment65880436_39271860 –

답변

1

의 번호를 받게 무기한 양, 서버에서 특정 패킷을 요청하고 할 수 있어야 귀하의 트래픽은 니오 (NIO)를 바라 볼 수도 있습니다. 이해하고 고용하는 것이 훨씬 더 복잡한 옵션입니다.

기본 응용 프로그램 만있는 경우 receive(packet)에 차단되는 스레드를 시작하십시오. 반환 할 때마다 (패킷이 도착했습니다) 패킷을 일종의 처리기로 보냅니다. 트래픽이 적은 경우 다른 스레드가 수신하는 BlockingQueue 일 수 있습니다. 트래픽이 많으면 ExecutorService으로 작업을 보내 병렬로 처리 할 수 ​​있습니다.

+0

트래픽이 매우 낮은 앱입니다. 나는 초보자 인 안드로이드 프로그래머이므로 수신 (패킷)은 내가 원하는 것이라고 생각한다. 내가 패킷을 받으면, 내가 필요로하는 곳으로 가서 그것을 듣고 유지해야한다. 내가 실제로하고있는 것은 전송 및 수신을위한 스레드를 설정하는 바운드 서비스를 사용하는 것입니다. 그런 다음 해당 서비스를 통해 정보를 반환합니다 ... – benzabill

+0

보내고 받기 위해 "스레드"를 사용하지 마십시오. 하나의 전용 스레드를 하나의 메소드에서 차단하고, 패킷이 들어올 때 패킷을 수신하여 다른 스레드의 핸들러로 전달합니다. – chrylis

+0

내가 "쓰레드"라고 말했을 때 나는 보내는 쓰레드가 있고 그 다음에는 다른 쓰레드를 가지고 있다는 것을 의미했다. 핸들러를 사용하여 패킷을 되돌려 보내는 것은 좋은 생각입니다! 어떻게 내가 패킷을 계속 듣고 있는지 설명 할 수 있을까요? socket.receive (패킷)의 (무한) 루프가있는가요? – benzabill

관련 문제