为了发送长度超过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);
答案 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