2012-03-23 5 views
0

내가 logica smpp lib를 사용하여 ESME를 작성하지만, 심각한 문제가 있어요 - 를 SMSC는 ESME [FIN, ACK]에 보낼 때, ESME는 정확한 답변을하지 않습니다.Сorrect 폐쇄 TCP 연결을 던져 자바

여기에 TCP 덤프 :

2751.016216 ESME -> SMSC   SMPP SMPP Submit_sm 
2751.019818   SMSC -> ESME SMPP SMPP Submit_sm - resp: "Throttling error (ESME exceeded allowed message limits)" 
2751.136172 ESME -> SMSC   TCP 42265 > 5001 [ACK] Seq=1651885221 Ack=3959508692 Win=123 Len=0 
2774.588453   SMSC -> ESME TCP 5001 > 42265 [FIN, ACK] Seq=3959508692 Ack=1651885221 Win=32768 Len=0 
2774.741502 ESME -> SMSC   TCP 42265 > 5001 [ACK] Seq=1651885221 Ack=3959508693 Win=123 Len=0 
2821.032427 ESME -> SMSC   SMPP SMPP Submit_sm 
2821.033502   SMSC -> ESME TCP 5001 > 42265 [RST] Seq=3959508693 Ack=0 Win=32768 Len=22 

어떻게이 문제를 해결하려면? 이 패킷을 처리 할 수 ​​있습니까? 모든 혜택을 환영합니다. 클래스 TCPIPConnection에서

+1

opensmpp에는 몇 가지 심각한 문제가 있습니다.이 특정 동작이 테스트 중에 있었지만 다른 showstoppers (텍스트 인코딩의 잘못된 처리와 같은)가있는 경우 기억이 안납니다. 우리는 처음부터 smpp 프로토콜을 다시 구현하는 것을 끝내었다. – mitchnull

답변

0

, 방법 - public ByteBuffer receive()이 같은 수행해야합니다

    bytesRead = inputStream.read(receiveBuffer, 0, bytesToRead); 
        if (bytesRead == -1){ 
         //close connection here 
        } 
0

프레임 워크를 사용하는 요점은/Logica의 lib 디렉토리와 같은 라이브러리는 낮은 수준의 API/TCP의 FIN 수준에서 당신을 분리하는 것을 자세한 내용은 그렇지 않으면 프레임 워크를 사용하여 부가가치가 없습니다. 우리는이 길을 밟아 왔으며 재능있는 TCP 프로그래머가 없다면 TCP 수준에서 작동하는이 길은 생산성이 떨어질 것입니다.

나는 오픈 소스 SMPP lib를 보았습니다. 클라우드 어퍼 (cloudhopper) (트위터에 의해 만들어졌고 이후 오픈 소스로 제공됨)는 수년 이래 매우 큰 플랫폼에서 사용되고 있습니다. 그것은 많은 주요 통신 사업자에서 견고하고 생산이 입증되었습니다. 여기에는 사용자 정의에 사용할 수있는 샘플 클라이언트가 있습니다. 연결 관리 : 세션 당 처음 SMPP 연결이있을 때 연결을 캐시하십시오. submitSM PDU (SMS 보내기)를 수행 할 때 예외 유형을 확인합니다. 연결 예외이며 단순히 SMPP 세션/연결을 다시 바인딩하고 다시 입력해야합니다. 활동 시간이 길면 (예 : 40 초 이상) 상대방의 SMPP 서버/SMSC가 연결을 버릴 수 있습니다. 다시 연결하려면 두 가지 옵션이 있습니다. a) 다음 번 PDU 제출을 수행하고 다시 연결하고 캐시를 업데이트 한 다음 submitSm PDU를 전송하거나 b) 기본 옵션입니다. enquireLink pDU를 주기적으로 수행하는 별도의 스레드가 있습니다. 예를 들어 45 초마다 연결이 활성 상태로 유지됩니다. enquireLink 및 submitSM PDU는 동일한 캐시 된 SMPP 세션/연결을 사용한다는 가정이 있습니다. 물론 enquireLink PDU가 끊어진 연결을 발견하면 다시 바인딩하고 공통 SMPP 세션/연결을 업데이트해야합니다. 나는이 접근 방식이 여러 해에 걸쳐 여러 애플리케이션에서 잘 작동하는 것을 보아 왔습니다.