2010-07-15 6 views
0

Nexus에서 일부 코드를 실행하고 있습니다. 매우 이상한 문제가 있습니다. "서버"는 전화가 결합 된 멀티 캐스트 소켓에서 UDP 패킷을 보냅니다. 전화가 수신하여 멀티 캐스트 그룹에 잘 보냈지 만 한 번에 많은 수의 패킷을 받으면 전화가 끊어지는 것처럼 보입니다.Android 멀티 캐스트 소켓 문제

예를 들어, 서버는 때때로 80 개 정도의 512 바이트 패킷을 전송합니다. 전화가 패킷을 받기 시작하지만 31 번째 패킷 (~ 16KB의 데이터)에서 수신이 멈 춥니 다 (소켓에 더 이상 아무것도 없다는 것을 나타냅니다). wireshark 테스트 및 처리를 완료 했으므로 패킷 길을 잃지 않고있다. 일부가 손실 되더라도, 모든 테스트가 동일한 결과를 산출한다는 것은 매우 이상합니다. 한 번에 많은 양의 데이터가 소켓에 끼어 들지 만, 소켓은 16KB의 값으로 socket.receive()를 허용합니다. 데이터의.

다양한 값 (최대 1MB)으로 socket.setReceiveBufferSize()를 시도했지만 작동하지 않는 것 같습니다. 흥미롭게도, getReceiveBufferSize()를 호출하면 소켓이 약 100KB 상당의 데이터를 보유해야한다고 알려줍니다.

서버에 전송 방법이 느려지 게한다고 말하면 (테스트 할 때만 배포 할 수 있습니다) 모든 것이 정상적으로 작동합니다. 패킷이 전화 소켓에 모두 걸리지 않았기 때문일 수 있습니다 시간 (즉, 서버간에 패킷을 1/2 초 동안 기다리라고 말합니다.)

다른 누구에게도이 경험이 있습니까? 그렇다면 어떻게 다루었습니까? I 응용 프로그램을 TCP로 전환 할 수 없습니다.

감사합니다.

ps. Java 코드는 정상적인 시스템에서 실행하면 정상적으로 작동합니다 ...

답변

0

Nevermind - 손실이나 이상한 일이 발생하지 않는 폐쇄 된 네트워크로 이동하여 해결했습니다. 네트워크 (나는 끈적 거리기로되어 있었다) 위에 있었다 - 그러나 적어도 그것이 일한다!

관련 문제