3+ :문제는 내가 발견하고 내 응용 프로그램에서 구현하고자하는 java.nio의 비 차단 서버에 문제가 있어요
그래서 여기에 무엇 일어나는 : Every-so-often, 그것은 작동합니다. 서버에 연결할 수 있으며, 작은 악수 일뿐 아니라 메시지를주고받을 준비가되어 있습니다. 하지만 종종 연결 메시지를받지도 못합니다. 핸드 셰이크가 작동하는 방법은 다음과 같습니다.
Server sends cipher for encryption
Server sends "connected" to test connection and encryption
Client sends username
Server sends acknowledgment
Client sends password
Server sends acknowledgement
Server sends login success if that's the case
Client sends acknowledgment of login
Server asks for uuid
Client provides uuid
Server says it's ready
Client says it's ready
The handshake is complete and message transfer can begin
암호화에 jasypt가 사용됩니다.
Android 2.2, 2.3 및 Mac OS X (Java 1.6)에서 사용 가능합니다. Android 3.0 이상 버전에서는 각 서버 라이프 사이클 (시작, 실행, 종료) 동안 한 번 작동합니다. 안드로이드가 네트워크를 어떻게 운영하는지에 대한 중요한 변화가 있었지만, 내가 아는 유일한 것은 당신이 메인 쓰레드에서 네트워크를 할 수 없다는 것입니다 (이것은 아닙니다, 이것이 서비스에서 생성 된 쓰레드입니다). 서버가 실제로 연결된 메시지를 보내고 있다고 tcpdump
으로 확인했습니다.
어떤 도움도 좋을 것입니다. 이상하게도 안드로이드 3 이상에서만 작동합니다.
사전에 도움을 주셔서 감사합니다.
편집 : 핸드 셰이크가 실패한 부분을 분명히하지 않았습니다. 클라이언트가 암호를 수신하면 실패합니다. 디버깅을 통해, 나는 그것이 읽기 버퍼에있는 유일한 것은 아니기 때문에 클라이언트는 연결된 메시지를 받고 있음을 알고
Cipher:
[0, 16, 102, 69, 106, 80, 101, 56, 77, 72, 118, 117, 77, 75, 85, 100, 57, 78,
Connected:
0, 32, 53, 106, 43, 69, 104, 122, 87, 100, 109, 67, 85, 90, 121, 65, 83, 57, 98, 65, 78, 73, 103, 103, 66, 55, 103, 54, 55, 106, 54, 108, 54, 53, ...(Rest of buffer is zeros)...]
0,16
및 0,32
메시지 길이 (16, 32, 각각)입니다. 이는 TwoByteMessageLength.java에 정의되어 있습니다.
또한 암호화가 실패한 것은 아니기 때문에 'EncryptionOperationNotPossibleException
예외가 발생합니다. (내가 무엇을 의미하는지에 관해 알기 위해 질문을보고)
이 두 메시지를 한 번에오고 있었다 :
클라이언트 Android 측에 어떤 예외가 발생하면 핸드 셰이크에 오류가있는 것으로 표시되어 있고 보유하고있는 위치가 있습니까? 작업 중 Android wakelock? –
Android 측면에서 예외가 발생하지 않습니다. 깨우기 잠금을 갖고 있지 않으며 핸드 셰이크가 실패한 부분에 대한 질문을 편집했습니다. –
SSL을 사용하지 않는 데는 어떤 이유가 있습니까? – EJP