生成连接的SMS UDH并将其添加到消息文本中

时间:2010-08-13 22:17:51

标签: c# .net sms

为了发送长度超过160个字符的SMS(7位),您必须将消息分成153个字符的消息数据部分,并使用5个字节的UDH(用户数据头)为每个消息添加前缀,并解释这些是多部分SMS的一部分,应由接收设备“重新组装”。

由于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);

1 个答案:

答案 0 :(得分:4)

这取决于您用来发送短信的服务。在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;
[..]

如果您使用手机及其AT + C接口发送短信,您必须自己进行位填充,并提交带有UDHI设置和140字节数据的PDU。

hth,cheerio Steve