メール猫ソフトの実現(C#)7 bitPDUのコード
15047 ワード
前の时间は简単なクラスライブラリを完成して、メールの猫のメールの送信と受信を完成することができますが、クラスライブラリはまだ完璧ではありません.例えば、英語のメールの送信はUSC 2コードで、1つのメールに最大70文字を送信できます.7 bitで符号化すれば1本あたり160文字を送信することができ、本稿では前のクラスにPDUの符号化を加えた.スキーム:以前と同様に、一部のコードのみが追加されています.PDUクラスは、UserDataのsetアクセサを変更し、7 bit符号化を完了するとともに、7 bit符号化関数を追加します.プログラムの可読性を向上させるために、関数名の一部を変更しました.GSMModemクラスがSendMsgに加わるリロードは、7 bit符号化かUSC 2符号化かを判断するパラメータを加える.具体的な方案は前の文章を参照する:ショートメール猫ソフトの実現(C#)<四>PDUフォーマットコードC#実現 ショートメール猫ソフトの実現(C#)<5>PDUフォーマット復号C#実現 ショートメール猫ソフトの実現(C#)<六>受信メールの送信C#実現(API) PDUクラス: UserDataプロパティ:UserDataは、7 bit符号化符号化アルゴリズム:高低交換のためにsetアクセサのみを変更し、高さ8ビットごとに1文字とすればよい.例:Test:T:0101010100 e:0101100101 s:011110011 t:011110100最高位0に行き、7ビットT:101010100 e:1100101 s:1100101 t:110100高低位交換:tseT 1110100 1110011 1100101 1010100高位から8ビットごとに1ビットグループに取る:1 1010100 11 110010 100 11100 D 4 F 29 C 0 E符号化完了!ソースコードは次のとおりです.
<!--
.codearea{ color:black; background-color:white; line-height:18px; border:1px solid #4f81bd; margin:0; width:auto !important; width:100%; overflow:auto; text-align:left; font-size:12px; font-family: "Courier New","Consolas","Fixedsys","BitStream Vera Sans Mono", courier,monospace,serif}
.codearea pre{ color:black; line-height:18px; padding:0 0 0 12px !important; margin:0em; background-color:#fff !important}
.linewrap pre{white-space:pre-wrap; white-space:-moz-pre-wrap; white-space:-pre-wrap; white-space:-o-pre-wrap; word-wrap:break-word; word-break:normal}
.codearea pre.alt{ background-color:#f7f7ff !important}
.codearea .lnum{color:#4f81bd;line-height:18px}
-->
加入後はフィールドuserDataを読み込むだけで対応部分の符号化が完了します.
PDU 7 BitEncoder関数:7 bit符号化メソッドコードを新たに追加すると以下のようになります.
<!--
.codearea{ color:black; background-color:white; line-height:18px; border:1px solid #4f81bd; margin:0; width:auto !important; width:100%; overflow:auto; text-align:left; font-size:12px; font-family: "Courier New","Consolas","Fixedsys","BitStream Vera Sans Mono", courier,monospace,serif}
.codearea pre{ color:black; line-height:18px; padding:0 0 0 12px !important; margin:0em; background-color:#fff !important}
.linewrap pre{white-space:pre-wrap; white-space:-moz-pre-wrap; white-space:-pre-wrap; white-space:-o-pre-wrap; word-wrap:break-word; word-break:normal}
.codearea pre.alt{ background-color:#f7f7ff !important}
.codearea .lnum{color:#4f81bd;line-height:18px}
-->
メソッドは対応する属性の付与のみを完了し,フィールド文字列すなわち7 bitの復号を直接返す.
その他の変更:
<!--
.codearea{ color:black; background-color:white; line-height:18px; border:1px solid #4f81bd; margin:0; width:auto !important; width:100%; overflow:auto; text-align:left; font-size:12px; font-family: "Courier New","Consolas","Fixedsys","BitStream Vera Sans Mono", courier,monospace,serif}
.codearea pre{ color:black; line-height:18px; padding:0 0 0 12px !important; margin:0em; background-color:#fff !important}
.linewrap pre{white-space:pre-wrap; white-space:-moz-pre-wrap; white-space:-pre-wrap; white-space:-o-pre-wrap; word-wrap:break-word; word-break:normal}
.codearea pre.alt{ background-color:#f7f7ff !important}
.codearea .lnum{color:#4f81bd;line-height:18px}
-->
従来のメソッド名はPDUencoderからPDUUSC 2 Encoderに変更され、プログラムの読み取りが向上しました. GSMModemクラス: 列挙:メールタイプ(USC 2コードか7 bitコードか)を区別しやすいように列挙タイプを加える
<!--
.codearea{ color:black; background-color:white; line-height:18px; border:1px solid #4f81bd; margin:0; width:auto !important; width:100%; overflow:auto; text-align:left; font-size:12px; font-family: "Courier New","Consolas","Fixedsys","BitStream Vera Sans Mono", courier,monospace,serif}
.codearea pre{ color:black; line-height:18px; padding:0 0 0 12px !important; margin:0em; background-color:#fff !important}
.linewrap pre{white-space:pre-wrap; white-space:-moz-pre-wrap; white-space:-pre-wrap; white-space:-o-pre-wrap; word-wrap:break-word; word-break:normal}
.codearea pre.alt{ background-color:#f7f7ff !important}
.codearea .lnum{color:#4f81bd;line-height:18px}
-->
ネーミングスペースGSMMODEMに列挙タイプMsgTypeを加える
SendMsgリロード:
<!--
.codearea{ color:black; background-color:white; line-height:18px; border:1px solid #4f81bd; margin:0; width:auto !important; width:100%; overflow:auto; text-align:left; font-size:12px; font-family: "Courier New","Consolas","Fixedsys","BitStream Vera Sans Mono", courier,monospace,serif}
.codearea pre{ color:black; line-height:18px; padding:0 0 0 12px !important; margin:0em; background-color:#fff !important}
.linewrap pre{white-space:pre-wrap; white-space:-moz-pre-wrap; white-space:-pre-wrap; white-space:-o-pre-wrap; word-wrap:break-word; word-break:normal}
.codearea pre.alt{ background-color:#f7f7ff !important}
.codearea .lnum{color:#4f81bd;line-height:18px}
-->
タイプがAUSSC 2であれば、元の送信方法を呼び出してUSC 2でメールを符号化し、A 7 BitタイプであればPDUencodingクラスの7 bit符号化関数で、プログラムはまだ実装されていないので、次のブログで詳細なソースコードを提供しますもちろん、元のPDUクラスの符号化方法を呼び出す場所は相応に変更します.
添付資料:プロジェクトファイル
1: set
2: {
3: if (DataCodingScheme == "08" || DataCodingScheme == "18") //USC2 : USC2
4: {
5: userData = string.Empty;
6: Encoding encodingUTF = Encoding.BigEndianUnicode;
7:
8: byte[] Bytes = encodingUTF.GetBytes(value);
9:
10: for (int i = 0; i < Bytes.Length; i++)
11: {
12: userData += BitConverter.ToString(Bytes, i, 1);
13: }
14: userDataLenghth = (userData.Length / 2).ToString("X2");
15: }
16: else //7bit 7bit
17: {
18: userData = string.Empty;
19: userDataLenghth = value.Length.ToString("X2"); //7bit :
20:
21: Encoding encodingAsscii = Encoding.ASCII;
22: byte[] bytes = encodingAsscii.GetBytes(value);
23:
24: string temp = string.Empty; //
25: string tmp;
26: for (int i = value.Length; i > 0; i--) //
27: {
28: tmp = Convert.ToString(bytes[i - 1], 2);
29: while (tmp.Length < 7) // 7 ,
30: {
31: tmp = "0" + tmp;
32: }
33: temp += tmp;
34: }
35:
36: for (int i = temp.Length ; i > 0; i -= 8) // 8
37: {
38: if (i > 8)
39: {
40: userData += Convert.ToInt32(temp.Substring(i-8, 8), 2).ToString("X2");
41: }
42: else
43: {
44: userData += Convert.ToInt32(temp.Substring(0, i), 2).ToString("X2");
45: }
46: }
47:
48: }
49: }
<!--
.codearea{ color:black; background-color:white; line-height:18px; border:1px solid #4f81bd; margin:0; width:auto !important; width:100%; overflow:auto; text-align:left; font-size:12px; font-family: "Courier New","Consolas","Fixedsys","BitStream Vera Sans Mono", courier,monospace,serif}
.codearea pre{ color:black; line-height:18px; padding:0 0 0 12px !important; margin:0em; background-color:#fff !important}
.linewrap pre{white-space:pre-wrap; white-space:-moz-pre-wrap; white-space:-pre-wrap; white-space:-o-pre-wrap; word-wrap:break-word; word-break:normal}
.codearea pre.alt{ background-color:#f7f7ff !important}
.codearea .lnum{color:#4f81bd;line-height:18px}
-->
加入後はフィールドuserDataを読み込むだけで対応部分の符号化が完了します.
PDU 7 BitEncoder関数:7 bit符号化メソッドコードを新たに追加すると以下のようになります.
1: public string PDU7BitEncoder(string phone, string Text)
2: {
3: if (Text.Length > 160)
4: {
5: throw new Exception(" 160");
6: }
7: dataCodingScheme = "00";
8: DestinationAddress = phone;
9: UserData = Text;
10:
11: return serviceCenterAddress + protocolDataUnitType
12: + messageReference + destinationAddress + protocolIdentifer
13: + dataCodingScheme + validityPeriod + userDataLenghth + userData;
14: }
<!--
.codearea{ color:black; background-color:white; line-height:18px; border:1px solid #4f81bd; margin:0; width:auto !important; width:100%; overflow:auto; text-align:left; font-size:12px; font-family: "Courier New","Consolas","Fixedsys","BitStream Vera Sans Mono", courier,monospace,serif}
.codearea pre{ color:black; line-height:18px; padding:0 0 0 12px !important; margin:0em; background-color:#fff !important}
.linewrap pre{white-space:pre-wrap; white-space:-moz-pre-wrap; white-space:-pre-wrap; white-space:-o-pre-wrap; word-wrap:break-word; word-break:normal}
.codearea pre.alt{ background-color:#f7f7ff !important}
.codearea .lnum{color:#4f81bd;line-height:18px}
-->
メソッドは対応する属性の付与のみを完了し,フィールド文字列すなわち7 bitの復号を直接返す.
その他の変更:
1: public string PDUUSC2Encoder(string phone, string Text)
<!--
.codearea{ color:black; background-color:white; line-height:18px; border:1px solid #4f81bd; margin:0; width:auto !important; width:100%; overflow:auto; text-align:left; font-size:12px; font-family: "Courier New","Consolas","Fixedsys","BitStream Vera Sans Mono", courier,monospace,serif}
.codearea pre{ color:black; line-height:18px; padding:0 0 0 12px !important; margin:0em; background-color:#fff !important}
.linewrap pre{white-space:pre-wrap; white-space:-moz-pre-wrap; white-space:-pre-wrap; white-space:-o-pre-wrap; word-wrap:break-word; word-break:normal}
.codearea pre.alt{ background-color:#f7f7ff !important}
.codearea .lnum{color:#4f81bd;line-height:18px}
-->
従来のメソッド名はPDUencoderからPDUUSC 2 Encoderに変更され、プログラムの読み取りが向上しました.
1: public enum MsgType { AUSC2, A7Bit }; // AUSC2 A7Bit:7 ( AUSC2, 7Bit 160 ,USC2 70)
<!--
.codearea{ color:black; background-color:white; line-height:18px; border:1px solid #4f81bd; margin:0; width:auto !important; width:100%; overflow:auto; text-align:left; font-size:12px; font-family: "Courier New","Consolas","Fixedsys","BitStream Vera Sans Mono", courier,monospace,serif}
.codearea pre{ color:black; line-height:18px; padding:0 0 0 12px !important; margin:0em; background-color:#fff !important}
.linewrap pre{white-space:pre-wrap; white-space:-moz-pre-wrap; white-space:-pre-wrap; white-space:-o-pre-wrap; word-wrap:break-word; word-break:normal}
.codearea pre.alt{ background-color:#f7f7ff !important}
.codearea .lnum{color:#4f81bd;line-height:18px}
-->
ネーミングスペースGSMMODEMに列挙タイプMsgTypeを加える
SendMsgリロード:
1: public void SendMsg(string phone, string msg, MsgType msgType)
2: {
3: if (msgType == MsgType.AUSC2)
4: {
5: SendMsg(phone, msg);
6: }
7: else
8: {
9:
10: }
11: }
<!--
.codearea{ color:black; background-color:white; line-height:18px; border:1px solid #4f81bd; margin:0; width:auto !important; width:100%; overflow:auto; text-align:left; font-size:12px; font-family: "Courier New","Consolas","Fixedsys","BitStream Vera Sans Mono", courier,monospace,serif}
.codearea pre{ color:black; line-height:18px; padding:0 0 0 12px !important; margin:0em; background-color:#fff !important}
.linewrap pre{white-space:pre-wrap; white-space:-moz-pre-wrap; white-space:-pre-wrap; white-space:-o-pre-wrap; word-wrap:break-word; word-break:normal}
.codearea pre.alt{ background-color:#f7f7ff !important}
.codearea .lnum{color:#4f81bd;line-height:18px}
-->
タイプがAUSSC 2であれば、元の送信方法を呼び出してUSC 2でメールを符号化し、A 7 BitタイプであればPDUencodingクラスの7 bit符号化関数で、プログラムはまだ実装されていないので、次のブログで詳細なソースコードを提供しますもちろん、元のPDUクラスの符号化方法を呼び出す場所は相応に変更します.
添付資料:プロジェクトファイル