2010-08-13 4 views
3

SMS (7 비트)를 160 자보다 길게 보내려면 메시지를 153 자의 메시지 데이터 부분으로 분리하고 각각에 5 octet UDH (사용자 데이터 헤더)는 멀티 파트 SMS의 일부이며 수신 장치에 의해 '재 조립'되어야 함을 설명합니다.연결된 SMS UDH를 생성하여 메시지 텍스트 앞에 붙입니다.

UDH가 메시지 데이터의 일부로 전송되기 때문에 내가 보내려는 서비스가 무엇이든간에 그것을 무시하고이를 수신자 전화기로 보내야합니다. 수신자 전화기는이를 해독하고 긴 SMS의 부분을 연결합니다 .

다음 테스트 코드를 사용하고 있지만 두 가지 별도의 메시지가 표시됩니다. 내가 뭘 잘못하고 있는지에 대한 제안이 있니?

private void sendButton_Click(object sender, EventArgs e) 
{ 
    if ((cellNumberText.Text.Trim().Length == 10) && (messageText.Text.Trim().Length > 0)) 
    { 
     SendSms(cellNumberText.Text.Trim(), BuildUdh(255, 2, 1) + "Hello first time. "); 
     SendSms(cellNumberText.Text.Trim(), BuildUdh(255, 2, 2) + "Hello second time. "); 
    } 
} 

private string BuildUdh(byte messageId, byte partCount, byte partId) 
{ 
    var udg = new byte[5]; 
    udg[0] = 0x00; 
    udg[1] = 0x03; 
    udg[2] = messageId; 
    udg[3] = partCount; 
    udg[4] = partId; 

    return BitConverter.ToString(udg); 
+0

게이트웨이가 UDH를 올바르게 지정하기위한 API 기능을 제공하지 않습니까? – jalf

+0

아니요, 웹 서비스는 'SendSms (문자열 번호, 문자열 메시지)'메서드 하나만을 표시합니다. – ProfK

답변

3

SMS를 보내는 데 사용하는 서비스에 따라 다릅니다. SMSC에 대한 대부분의 콘텐츠 인터페이스 (예 : SMPP 또는 EMI/UCP)에서는 위에 설명 된 기술을 사용할 수 있지만 보내려는 SMS에 사용자 데이터 헤더가 포함되도록 지정해야합니다.

BuildUdh 기능 외에도 Concat Info-element를 올바르게 빌드하지만 First Byte의 UDH의 전체 길이가 누락되었습니다.

private string BuildUdh(byte messageId, byte partCount, byte partId) 
{ 
    var udg = new byte[6]; 
    udg[0] = 0x05;  // Overall length of UDH 
    udg[1] = 0x00;  // IE Concat 
    udg[2] = 0x03;  // IE parameter Length 
    udg[3] = messageId; 
    udg[4] = partCount; 
    udg[5] = partId; 
[..] 

당신은 당신이 당신의 자신의 비트 스터핑을 할 수있는 SMS를 보내 UDHI 세트와 데이터의 140 바이트와 PDU를 제출 휴대폰과의 AT + C 인터페이스를 사용하는 경우.

hth, cheerio Steve

+0

@ 스티브, 감사합니다. UDH의 다른 텍스트는 UDH 길이를 생략했습니다. 어떻게하면 바이트 배열을 문자열로 인코딩하여 앞에 추가해야합니까? 어떤 인코딩을 사용해야합니까? – ProfK

+0

이것은 프로토콜에 따라 다릅니다. EMI/UCP 및 SMPP에 대해 바이트 스트림을 사용합니다. 회사에서 제공하는 것과 같은 일부 웹 인터페이스의 경우 UDH가 16 진수로 코딩됩니다. – Lairsdragon

관련 문제