├── README.md
├── Eterm通讯协议.xlsx
├── SocketAgent
├── .gitignore
├── App.config
├── Properties
│ └── AssemblyInfo.cs
├── Program.cs
├── SocketAgent.csproj
├── AgentServer2.cs
└── AgentServer.cs
├── SocketClient
├── App.config
├── AVanaly.cs
├── Properties
│ └── AssemblyInfo.cs
├── Loging.cs
├── Client.cs
├── Program.cs
├── SocketClient.csproj
├── AnalysisMachine.cs
├── ChineseToPinyin.cs
└── EncodeMachine.cs
├── .gitignore
├── ETermSimulator
├── Program.cs
├── Point.cs
├── Properties
│ └── AssemblyInfo.cs
├── DETRResp.cs
├── ETermSimulator.csproj
├── Eterm.cs
├── BaseResp.cs
├── ChineseToPinyin.cs
└── EncodeMachine.cs
├── EtermSimulatorTest
├── obj
│ └── Debug
│ │ └── EtermSimulatorTest.csproj.FileListAbsolute.txt
├── Properties
│ └── AssemblyInfo.cs
├── ETermSimulatorTest.csproj
└── BaseRespTest.cs
├── ConsoleApp
├── Properties
│ └── AssemblyInfo.cs
├── ConsoleApp.csproj
├── ChineseToPinyin.cs
├── Program.cs
└── ChineseSpell.cs
└── ETermSimulator.sln
/README.md:
--------------------------------------------------------------------------------
1 | ETermSimulator
2 | ==============
3 |
4 | ETermSimulator
5 |
--------------------------------------------------------------------------------
/Eterm通讯协议.xlsx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MudanLabs/ETermSimulator/HEAD/Eterm通讯协议.xlsx
--------------------------------------------------------------------------------
/SocketAgent/.gitignore:
--------------------------------------------------------------------------------
1 | *.suo
2 | *.dll
3 | *.exe
4 | *.obj
5 | *.user
6 | *.pdb
7 | *.xml
8 | *.cache
9 | /obj
10 | /bin
11 |
--------------------------------------------------------------------------------
/SocketClient/App.config:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/SocketClient/AVanaly.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 |
6 | namespace SocketClient
7 | {
8 | public class AVanaly
9 | {
10 | //
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | *.suo
2 |
3 | *.dll
4 |
5 | *.exe
6 |
7 | *.obj
8 |
9 | *.user
10 |
11 | *.pdb
12 |
13 | *.xml
14 |
15 | *.cache
16 |
17 | /obj
18 | /bin
19 | ETermSimulator/bin
20 | ETermSimulator/obj
21 | ConsoleApp/bin/
22 | ConsoleApp/obj/
23 | SocketClient/bin/
24 | SocketClient/obj/
--------------------------------------------------------------------------------
/ETermSimulator/Program.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 |
6 | namespace ETermSimulator
7 | {
8 | class Program
9 | {
10 | static void Main(string[] args)
11 | {
12 | ETermSimulator.Eterm e = new Eterm();
13 | e.Connection("127.0.0.1", 350);
14 | Console.WriteLine("exit");
15 | }
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/SocketAgent/App.config:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
14 |
15 |
--------------------------------------------------------------------------------
/ETermSimulator/Point.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 |
6 | namespace ETermSimulator
7 | {
8 | public struct Point
9 | {
10 | public Point(Int16 row, Int16 column)
11 | {
12 | _Row = row;
13 | _Column = column;
14 | }
15 | private Int16 _Row;
16 | public Int16 Row { get { return _Row; } private set { _Row = value; } }
17 |
18 | private Int16 _Column;
19 | public Int16 Column { get { return _Column; } private set { _Column = value; } }
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/EtermSimulatorTest/obj/Debug/EtermSimulatorTest.csproj.FileListAbsolute.txt:
--------------------------------------------------------------------------------
1 | D:\Projects\ETermSimulator\EtermSimulatorTest\bin\Debug\EtermSimulatorTest.dll
2 | D:\Projects\ETermSimulator\EtermSimulatorTest\bin\Debug\EtermSimulatorTest.pdb
3 | D:\Projects\ETermSimulator\EtermSimulatorTest\obj\Debug\EtermSimulatorTest.csprojResolveAssemblyReference.cache
4 | D:\Projects\ETermSimulator\EtermSimulatorTest\obj\Debug\EtermSimulatorTest.dll
5 | D:\Projects\ETermSimulator\EtermSimulatorTest\obj\Debug\EtermSimulatorTest.pdb
6 | D:\Projects\ETermSimulator\EtermSimulatorTest\bin\Debug\ETermSimulator.exe
7 | D:\Projects\ETermSimulator\EtermSimulatorTest\bin\Debug\ETermSimulator.pdb
8 |
--------------------------------------------------------------------------------
/ConsoleApp/Properties/AssemblyInfo.cs:
--------------------------------------------------------------------------------
1 | using System.Reflection;
2 | using System.Runtime.CompilerServices;
3 | using System.Runtime.InteropServices;
4 |
5 | // 有关程序集的常规信息通过以下
6 | // 特性集控制。更改这些特性值可修改
7 | // 与程序集关联的信息。
8 | [assembly: AssemblyTitle("ConsoleApp")]
9 | [assembly: AssemblyDescription("")]
10 | [assembly: AssemblyConfiguration("")]
11 | [assembly: AssemblyCompany("")]
12 | [assembly: AssemblyProduct("ConsoleApp")]
13 | [assembly: AssemblyCopyright("Copyright © 2013")]
14 | [assembly: AssemblyTrademark("")]
15 | [assembly: AssemblyCulture("")]
16 |
17 | // 将 ComVisible 设置为 false 使此程序集中的类型
18 | // 对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型,
19 | // 则将该类型上的 ComVisible 特性设置为 true。
20 | [assembly: ComVisible(false)]
21 |
22 | // 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID
23 | [assembly: Guid("9df8b575-dc43-41d4-8568-07b3ab8c6659")]
24 |
25 | // 程序集的版本信息由下面四个值组成:
26 | //
27 | // 主版本
28 | // 次版本
29 | // 生成号
30 | // 修订号
31 | //
32 | // 可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值,
33 | // 方法是按如下所示使用“*”:
34 | // [assembly: AssemblyVersion("1.0.*")]
35 | [assembly: AssemblyVersion("1.0.0.0")]
36 | [assembly: AssemblyFileVersion("1.0.0.0")]
37 |
--------------------------------------------------------------------------------
/SocketAgent/Properties/AssemblyInfo.cs:
--------------------------------------------------------------------------------
1 | using System.Reflection;
2 | using System.Runtime.CompilerServices;
3 | using System.Runtime.InteropServices;
4 |
5 | // 有关程序集的常规信息通过以下
6 | // 特性集控制。更改这些特性值可修改
7 | // 与程序集关联的信息。
8 | [assembly: AssemblyTitle("SocketAgent")]
9 | [assembly: AssemblyDescription("")]
10 | [assembly: AssemblyConfiguration("")]
11 | [assembly: AssemblyCompany("")]
12 | [assembly: AssemblyProduct("SocketAgent")]
13 | [assembly: AssemblyCopyright("Copyright © 2013")]
14 | [assembly: AssemblyTrademark("")]
15 | [assembly: AssemblyCulture("")]
16 |
17 | // 将 ComVisible 设置为 false 使此程序集中的类型
18 | // 对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型,
19 | // 则将该类型上的 ComVisible 特性设置为 true。
20 | [assembly: ComVisible(false)]
21 |
22 | // 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID
23 | [assembly: Guid("4d60cf95-ac25-4e51-abff-7a1a7cbfb31e")]
24 |
25 | // 程序集的版本信息由下面四个值组成:
26 | //
27 | // 主版本
28 | // 次版本
29 | // 生成号
30 | // 修订号
31 | //
32 | // 可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值,
33 | // 方法是按如下所示使用“*”:
34 | // [assembly: AssemblyVersion("1.0.*")]
35 | [assembly: AssemblyVersion("1.0.0.0")]
36 | [assembly: AssemblyFileVersion("1.0.0.0")]
37 |
--------------------------------------------------------------------------------
/SocketAgent/Program.cs:
--------------------------------------------------------------------------------
1 | using System.Configuration;
2 | using System.Net;
3 | using System.Net.Sockets;
4 |
5 |
6 | namespace MDLabs.EtermSimulator.SocketAgent
7 | {
8 | class Program
9 | {
10 | static void Main(string[] args)
11 | {
12 | TcpListener agentServer = GetTcpListener();
13 | agentServer.Start();
14 | int collectionId = 0;
15 | while (true)
16 | {
17 | new AgentServer2(agentServer.AcceptTcpClient(), collectionId);
18 | collectionId++;
19 | }
20 | }
21 | private static TcpListener GetTcpListener()
22 | {
23 | string ip = ConfigurationManager.AppSettings["ListenerIP"];
24 | int port = int.Parse(ConfigurationManager.AppSettings["ListenerPort"]);
25 | if (string.IsNullOrWhiteSpace(ip))
26 | {
27 | return new TcpListener(IPAddress.Any, port);
28 | }
29 | else
30 | {
31 | return new TcpListener(IPAddress.Parse(ip), port);
32 | }
33 | }
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/ETermSimulator/Properties/AssemblyInfo.cs:
--------------------------------------------------------------------------------
1 | using System.Reflection;
2 | using System.Runtime.CompilerServices;
3 | using System.Runtime.InteropServices;
4 |
5 | // 有关程序集的常规信息通过以下
6 | // 特性集控制。更改这些特性值可修改
7 | // 与程序集关联的信息。
8 | [assembly: AssemblyTitle("ETermSimulator")]
9 | [assembly: AssemblyDescription("")]
10 | [assembly: AssemblyConfiguration("")]
11 | [assembly: AssemblyCompany("")]
12 | [assembly: AssemblyProduct("ETermSimulator")]
13 | [assembly: AssemblyCopyright("Copyright © 2013")]
14 | [assembly: AssemblyTrademark("")]
15 | [assembly: AssemblyCulture("")]
16 |
17 | // 将 ComVisible 设置为 false 使此程序集中的类型
18 | // 对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型,
19 | // 则将该类型上的 ComVisible 特性设置为 true。
20 | [assembly: ComVisible(false)]
21 |
22 | // 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID
23 | [assembly: Guid("9f4be0b8-7335-4d81-96af-a0721e16638b")]
24 |
25 | // 程序集的版本信息由下面四个值组成:
26 | //
27 | // 主版本
28 | // 次版本
29 | // 生成号
30 | // 修订号
31 | //
32 | // 可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值,
33 | // 方法是按如下所示使用“*”:
34 | // [assembly: AssemblyVersion("1.0.*")]
35 | [assembly: AssemblyVersion("1.0.0.0")]
36 | [assembly: AssemblyFileVersion("1.0.0.0")]
37 |
--------------------------------------------------------------------------------
/SocketClient/Properties/AssemblyInfo.cs:
--------------------------------------------------------------------------------
1 | using System.Reflection;
2 | using System.Runtime.CompilerServices;
3 | using System.Runtime.InteropServices;
4 |
5 | // 有关程序集的常规信息通过以下
6 | // 特性集控制。更改这些特性值可修改
7 | // 与程序集关联的信息。
8 | [assembly: AssemblyTitle("SocketClient")]
9 | [assembly: AssemblyDescription("")]
10 | [assembly: AssemblyConfiguration("")]
11 | [assembly: AssemblyCompany("Microsoft")]
12 | [assembly: AssemblyProduct("SocketClient")]
13 | [assembly: AssemblyCopyright("Copyright © Microsoft 2013")]
14 | [assembly: AssemblyTrademark("")]
15 | [assembly: AssemblyCulture("")]
16 |
17 | // 将 ComVisible 设置为 false 使此程序集中的类型
18 | // 对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型,
19 | // 则将该类型上的 ComVisible 特性设置为 true。
20 | [assembly: ComVisible(false)]
21 |
22 | // 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID
23 | [assembly: Guid("b726448c-8f03-4da3-99b0-529cb8163252")]
24 |
25 | // 程序集的版本信息由下面四个值组成:
26 | //
27 | // 主版本
28 | // 次版本
29 | // 生成号
30 | // 修订号
31 | //
32 | // 可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值,
33 | // 方法是按如下所示使用“*”:
34 | // [assembly: AssemblyVersion("1.0.*")]
35 | [assembly: AssemblyVersion("1.0.0.0")]
36 | [assembly: AssemblyFileVersion("1.0.0.0")]
37 |
--------------------------------------------------------------------------------
/EtermSimulatorTest/Properties/AssemblyInfo.cs:
--------------------------------------------------------------------------------
1 | using System.Reflection;
2 | using System.Runtime.CompilerServices;
3 | using System.Runtime.InteropServices;
4 |
5 | // 有关程序集的常规信息通过以下特性集
6 | // 控制。更改这些特性值可修改
7 | // 与程序集关联的信息。
8 | [assembly: AssemblyTitle("EtermSimulatorTest")]
9 | [assembly: AssemblyDescription("")]
10 | [assembly: AssemblyConfiguration("")]
11 | [assembly: AssemblyCompany("")]
12 | [assembly: AssemblyProduct("EtermSimulatorTest")]
13 | [assembly: AssemblyCopyright("Copyright © 2013")]
14 | [assembly: AssemblyTrademark("")]
15 | [assembly: AssemblyCulture("")]
16 |
17 | // 将 ComVisible 设置为 false 会使此程序集中的类型
18 | // 对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型,
19 | // 请将该类型上的 ComVisible 特性设置为 true。
20 | [assembly: ComVisible(false)]
21 |
22 | // 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID
23 | [assembly: Guid("01d9a8f3-d431-4649-9fea-3b192ffa682d")]
24 |
25 | // 程序集的版本信息由以下四个值组成:
26 | //
27 | // 主版本
28 | // 次版本
29 | // 生成号
30 | // 修订号
31 | //
32 | // 可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值,
33 | // 方法是按如下所示使用“*”:
34 | // [assembly: AssemblyVersion("1.0.*")]
35 | [assembly: AssemblyVersion("1.0.0.0")]
36 | [assembly: AssemblyFileVersion("1.0.0.0")]
37 |
--------------------------------------------------------------------------------
/ETermSimulator/DETRResp.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 |
6 | namespace ETermSimulator
7 | {
8 | public class DETRResp:BaseResp
9 | {
10 | public IEnumerator AirlineTicketDatas { get; set; }
11 | }
12 | public class AirlineTicketData
13 | {
14 | public string TicketCode { get; set; }
15 | public string PassengerName { get; set; }
16 | public string PassengerIDCard { get; set; }
17 | public decimal Fare { get; set; }
18 | public decimal TaxAirport { get; set; }
19 | public decimal TaxFuel { get; set; }
20 | public string ReceiptNo { get; set; }
21 | public string PnrCode { get; set; }
22 | public AirticketFlightSailData AirticketFlightSailData { get; set; }
23 | }
24 | public class AirticketFlightSailData
25 | {
26 | public string FlightCode { get; set; }
27 | public DateTime DepDate { get; set; }
28 | public string DepAirportCode { get; set; }
29 | public string ArrAirportCode { get; set; }
30 | public string Cabin { get; set; }
31 | public string FlightSailState { get; set; }
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/SocketClient/Loging.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 | using SocketClient;
6 |
7 | namespace SocketClient
8 | {
9 | public class Loging
10 | {
11 | public string logUserName = "o77777777";
12 | public string Password = "password";
13 | string strworkport = "60a44cac46ab";//这个地方时登陆人的mac地址(其中的大写一律转换成小写,中间的分隔符去掉)
14 | string strport = "192.168.80.21";//这个地方可能会不一样(登陆人的ip地址)
15 | //用户名,密码应该是传递过来的
16 | public byte[] Loing() //string userName,string password(这个地方暂时先不传)
17 | {
18 | EncodeMachine machine=new EncodeMachine ();
19 | byte[] Send = machine.LogEncode(logUserName, Password, strworkport, strport);
20 | return Send;
21 | }
22 | #region 第一组测试(猜测估计没错的话,应该是测试发送数据能不能正常接收,类似于三次握手)
23 | public byte[] TestA()
24 | {
25 | byte[] firstTest = { 1, 254, 0, 17, 20, 16, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
26 | return firstTest;
27 | }
28 | #endregion
29 | #region 第二组测试
30 | public byte[] TestB()
31 | {
32 | byte[] secondTest = { 1, 254, 0, 17, 20, 16, 0, 2, 12, 0, 0, 0, 0, 0, 0, 0, 0, 1, 254, 0, 17, 20, 16, 0, 2, 41, 0, 0, 0, 0, 0, 0, 0, 0, 1, 254, 0, 17, 20, 16, 0, 2, 32, 0, 0, 0, 0, 0, 0, 0, 0 };
33 | return secondTest;
34 | }
35 | #endregion
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/SocketClient/Client.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 | using System.Net;
6 | using System.Net.Sockets;
7 |
8 | namespace SocketClient
9 | {
10 | public class Client
11 | {
12 | public Socket client { get; set; }
13 | public void Connect()
14 | {
15 | client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//建立流式套接字
16 | IPAddress address = IPAddress.Parse("192.168.80.21");
17 | int port = 350;
18 | IPEndPoint ipend = new IPEndPoint(address, port);
19 | try
20 | {
21 | client.Connect(ipend);
22 | SendOrReceive();
23 | Console.WriteLine("连接成功!");
24 | }
25 | catch (SocketException EX)
26 | {
27 | Console.WriteLine("未连接上");
28 | }
29 |
30 | }
31 |
32 | public void SendOrReceive()
33 | {
34 | string wantsend = "avshacgo";
35 | var aa=Encoding.ASCII.GetBytes(wantsend);
36 | client.Send(aa,aa.Length,SocketFlags.None);
37 | Console.WriteLine("发送信息");//发送出去的东西不知道是否已经发上上去,并且获取不到返回回来的信息。
38 | string strdata="";
39 |
40 | while(true)
41 | {
42 | byte[] data = new Byte[2048];
43 | int recv = client.Receive(data);//这个返回的是长度
44 | if(recv<=0)
45 | {
46 | Console.WriteLine("失败");
47 | break;
48 | strdata = Encoding.ASCII.GetString(data, 0, recv); //这个地方获取不到信息
49 | Console.WriteLine(strdata);
50 | }
51 |
52 | }
53 | //收不到信息(是那个环节出现了问题)
54 | }
55 | }
56 | }
57 |
--------------------------------------------------------------------------------
/SocketClient/Program.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 | using System.Threading.Tasks;
6 | using SocketClient;
7 | using System.Net.Sockets;
8 | using System.Configuration;
9 | using System.Net;
10 |
11 | namespace SocketClient
12 | {
13 | class Program
14 | {
15 | static void Main(string[] args)
16 | {
17 | TcpClient tcp = GetTcpService();
18 |
19 | byte[] receiveBuffer=new byte[tcp.ReceiveBufferSize];
20 | Loging log = new Loging();
21 | receiveBuffer = log.Loing();
22 | tcp.GetStream().Write(receiveBuffer, 0, receiveBuffer.Length);
23 |
24 | //receiveBuffer = log.TestA();
25 | //tcp.GetStream().Write(receiveBuffer, 0, receiveBuffer.Length);
26 | //receiveBuffer = log.TestB();
27 | //tcp.GetStream().Write(receiveBuffer, 0, receiveBuffer.Length);
28 |
29 | // 我都把这种事情看成常态了,看来这样还真不行,女人,真得有自己的一份职业,有自己的一席之地才行啊,要不,连个家都没有,在家里还有受气,这样可真不行
30 |
31 | //EncodeMachine machine = new EncodeMachine();
32 | //byte[] userid = { 40, 81 };
33 | //string strinstruct = "avshacgo";
34 | //byte[] send = machine.MakeInstruct(userid, strinstruct);
35 | //tcp.GetStream().Write(send, 0, send.Length);
36 | while (true)
37 | {
38 | //EncodeMachine machine = new EncodeMachine();
39 | //byte[] userid = { 40, 81 };
40 | //string strinstruct = "avshacgo";//avshacgo
41 | //byte[] send = machine.MakeInstruct(userid, strinstruct);
42 | //tcp.GetStream().Write(send, 0, send.Length);
43 | //这个地方可以弄一个登陆信息发送过去
44 | // int j = tcp.GetStream().Read(receiveBuffer, 0, );
45 | byte[] receive = new byte[tcp.ReceiveBufferSize];
46 | int j = tcp.GetStream().Read(receive, 0, tcp.ReceiveBufferSize);
47 | //这个地方怎么(这个地方怎么解析服务器返回回来的数据呢?)
48 | //有返回信息,读取之后返回信息
49 | if (j > 0)
50 | {
51 | for (int i = 0; i < j; i++)
52 | {
53 | Console.Write(receive[i]);
54 | }
55 | }
56 | }
57 |
58 | }
59 | //配置一个可以监听的客户端
60 | private static TcpClient GetTcpService()
61 | {
62 | string ip = "192.168.80.21";
63 | int port = 350;
64 | return new TcpClient(ip, port);
65 | }
66 | }
67 | }
68 |
--------------------------------------------------------------------------------
/ConsoleApp/ConsoleApp.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Debug
6 | AnyCPU
7 | {7AA5E8A8-8B3E-4290-ABEE-466718342876}
8 | Exe
9 | Properties
10 | ConsoleApp
11 | ConsoleApp
12 | v4.0
13 | 512
14 |
15 |
16 | AnyCPU
17 | true
18 | full
19 | false
20 | bin\Debug\
21 | DEBUG;TRACE
22 | prompt
23 | 4
24 |
25 |
26 | AnyCPU
27 | pdbonly
28 | true
29 | bin\Release\
30 | TRACE
31 | prompt
32 | 4
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
57 |
--------------------------------------------------------------------------------
/ETermSimulator/ETermSimulator.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Debug
6 | AnyCPU
7 | {0C5EDE5C-EE87-4456-B8AF-D031E54AB586}
8 | Exe
9 | Properties
10 | ETermSimulator
11 | ETermSimulator
12 | v4.0
13 | 512
14 |
15 |
16 | AnyCPU
17 | true
18 | full
19 | false
20 | bin\Debug\
21 | DEBUG;TRACE
22 | prompt
23 | 4
24 |
25 |
26 | AnyCPU
27 | pdbonly
28 | true
29 | bin\Release\
30 | TRACE
31 | prompt
32 | 4
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
61 |
--------------------------------------------------------------------------------
/SocketAgent/SocketAgent.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Debug
6 | AnyCPU
7 | {4921F00C-28F6-444F-B4AA-AAB82F00E4E8}
8 | Exe
9 | Properties
10 | SocketAgent
11 | SocketAgent
12 | v4.0
13 | 512
14 |
15 |
16 | AnyCPU
17 | true
18 | full
19 | false
20 | bin\Debug\
21 | DEBUG;TRACE
22 | prompt
23 | 4
24 |
25 |
26 | AnyCPU
27 | pdbonly
28 | true
29 | bin\Release\
30 | TRACE
31 | prompt
32 | 4
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 | Designer
53 |
54 |
55 |
56 |
63 |
--------------------------------------------------------------------------------
/ETermSimulator.sln:
--------------------------------------------------------------------------------
1 |
2 | Microsoft Visual Studio Solution File, Format Version 12.00
3 | # Visual Studio 2012
4 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ConsoleApp", "ConsoleApp\ConsoleApp.csproj", "{7AA5E8A8-8B3E-4290-ABEE-466718342876}"
5 | EndProject
6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SocketAgent", "SocketAgent\SocketAgent.csproj", "{4921F00C-28F6-444F-B4AA-AAB82F00E4E8}"
7 | EndProject
8 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ETermSimulator", "ETermSimulator\ETermSimulator.csproj", "{0C5EDE5C-EE87-4456-B8AF-D031E54AB586}"
9 | EndProject
10 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SocketClient", "SocketClient\SocketClient.csproj", "{165F68ED-850D-43AD-8D5E-444C8C19BAA9}"
11 | EndProject
12 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ETermSimulatorTest", "EtermSimulatorTest\ETermSimulatorTest.csproj", "{BB2641B8-677F-4D62-B255-4BE2B1642FB1}"
13 | EndProject
14 | Global
15 | GlobalSection(SolutionConfigurationPlatforms) = preSolution
16 | Debug|Any CPU = Debug|Any CPU
17 | Release|Any CPU = Release|Any CPU
18 | EndGlobalSection
19 | GlobalSection(ProjectConfigurationPlatforms) = postSolution
20 | {7AA5E8A8-8B3E-4290-ABEE-466718342876}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
21 | {7AA5E8A8-8B3E-4290-ABEE-466718342876}.Debug|Any CPU.Build.0 = Debug|Any CPU
22 | {7AA5E8A8-8B3E-4290-ABEE-466718342876}.Release|Any CPU.ActiveCfg = Release|Any CPU
23 | {7AA5E8A8-8B3E-4290-ABEE-466718342876}.Release|Any CPU.Build.0 = Release|Any CPU
24 | {4921F00C-28F6-444F-B4AA-AAB82F00E4E8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
25 | {4921F00C-28F6-444F-B4AA-AAB82F00E4E8}.Debug|Any CPU.Build.0 = Debug|Any CPU
26 | {4921F00C-28F6-444F-B4AA-AAB82F00E4E8}.Release|Any CPU.ActiveCfg = Release|Any CPU
27 | {4921F00C-28F6-444F-B4AA-AAB82F00E4E8}.Release|Any CPU.Build.0 = Release|Any CPU
28 | {0C5EDE5C-EE87-4456-B8AF-D031E54AB586}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
29 | {0C5EDE5C-EE87-4456-B8AF-D031E54AB586}.Debug|Any CPU.Build.0 = Debug|Any CPU
30 | {0C5EDE5C-EE87-4456-B8AF-D031E54AB586}.Release|Any CPU.ActiveCfg = Release|Any CPU
31 | {0C5EDE5C-EE87-4456-B8AF-D031E54AB586}.Release|Any CPU.Build.0 = Release|Any CPU
32 | {165F68ED-850D-43AD-8D5E-444C8C19BAA9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
33 | {165F68ED-850D-43AD-8D5E-444C8C19BAA9}.Debug|Any CPU.Build.0 = Debug|Any CPU
34 | {165F68ED-850D-43AD-8D5E-444C8C19BAA9}.Release|Any CPU.ActiveCfg = Release|Any CPU
35 | {165F68ED-850D-43AD-8D5E-444C8C19BAA9}.Release|Any CPU.Build.0 = Release|Any CPU
36 | {BB2641B8-677F-4D62-B255-4BE2B1642FB1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
37 | {BB2641B8-677F-4D62-B255-4BE2B1642FB1}.Debug|Any CPU.Build.0 = Debug|Any CPU
38 | {BB2641B8-677F-4D62-B255-4BE2B1642FB1}.Release|Any CPU.ActiveCfg = Release|Any CPU
39 | {BB2641B8-677F-4D62-B255-4BE2B1642FB1}.Release|Any CPU.Build.0 = Release|Any CPU
40 | EndGlobalSection
41 | GlobalSection(SolutionProperties) = preSolution
42 | HideSolutionNode = FALSE
43 | EndGlobalSection
44 | EndGlobal
45 |
--------------------------------------------------------------------------------
/SocketClient/SocketClient.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Debug
6 | AnyCPU
7 | {165F68ED-850D-43AD-8D5E-444C8C19BAA9}
8 | Exe
9 | Properties
10 | SocketClient
11 | SocketClient
12 | v4.5
13 | 512
14 |
15 |
16 | AnyCPU
17 | true
18 | full
19 | false
20 | bin\Debug\
21 | DEBUG;TRACE
22 | prompt
23 | 4
24 |
25 |
26 | AnyCPU
27 | pdbonly
28 | true
29 | bin\Release\
30 | TRACE
31 | prompt
32 | 4
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
64 |
--------------------------------------------------------------------------------
/SocketAgent/AgentServer2.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Configuration;
3 | using System.Net.Sockets;
4 |
5 | namespace MDLabs.EtermSimulator.SocketAgent
6 | {
7 | public class AgentServer2
8 | {
9 | private TcpClient _TcpClient;
10 | private TcpClient agentClient = GetTcpClient();
11 | private byte[] receiveBuffer;
12 | private int _CollectionID;
13 |
14 | public AgentServer2(TcpClient tcpClient, int collectionID)
15 | {
16 | _CollectionID = collectionID;
17 | _TcpClient = tcpClient;
18 | receiveBuffer = new byte[_TcpClient.ReceiveBufferSize];
19 | System.Threading.Thread t = new System.Threading.Thread(StartAgentClient);
20 | t.Start();
21 | while (true)
22 | {
23 | int i = _TcpClient.GetStream().Read(receiveBuffer, 0, _TcpClient.ReceiveBufferSize);//开始读取客户端发送的数据
24 | if (i > 0)
25 | {
26 | //string str = System.Text.ASCIIEncoding.GetEncoding("gb2312").GetString(receiveBuffer, 0, i);
27 | string str = System.Text.ASCIIEncoding.UTF8.GetString(receiveBuffer, 0, i);
28 | agentClient.GetStream().Write(receiveBuffer, 0, i);//将客户端发送的数据 开始转发给 服务器
29 | Output(_CollectionID, "客户端gb2312", str);
30 | Output(_CollectionID, "客户端", receiveBuffer, i);
31 | }
32 | }
33 | }
34 | private void StartAgentClient()
35 | {
36 | while (true)
37 | {
38 | int j = agentClient.GetStream().Read(receiveBuffer, 0, agentClient.ReceiveBufferSize);//读取服务器返回的数据
39 | if (j > 0)
40 | {
41 | //string str2 = System.Text.ASCIIEncoding.GetEncoding("gb2312").GetString(receiveBuffer, 0, j);
42 | string str2 = System.Text.ASCIIEncoding.UTF8.GetString(receiveBuffer, 0, j);
43 | _TcpClient.GetStream().Write(receiveBuffer, 0, j);//转发给客户端
44 | Output(_CollectionID, "服务器gb2312", str2);
45 | Output(_CollectionID, "服务器", receiveBuffer, j);
46 | }
47 | }
48 | }
49 | #region 获取监听及服务器地址端口
50 | private static TcpClient GetTcpClient()
51 | {
52 | string ip = ConfigurationManager.AppSettings["EtermServerIP"];
53 | int port = int.Parse(ConfigurationManager.AppSettings["EtermServerPort"]);
54 | return new TcpClient(ip, port);
55 | }
56 | #endregion
57 |
58 | #region 日志
59 | private static void Output(int id, string type, string str)
60 | {
61 | string log = string.Format("{0}|{1}|{2}", id, type, str);
62 | Console.WriteLine(log);
63 | //System.IO.File.AppendAllText("Log.txt", log + System.Environment.NewLine);
64 | }
65 | private static void Output(int id, string type, byte[] data, int length)
66 | {
67 | string log = id.ToString() + "|" + type + "|";
68 |
69 | Console.Write(id.ToString() + "|" + type + "|");
70 | for (int i = 0; i < length; i++)
71 | {
72 | log += string.Format("{0} ", data[i]);
73 | }
74 | Console.WriteLine(log);
75 | System.IO.File.AppendAllText("Log.txt", log + System.Environment.NewLine);
76 | }
77 | #endregion
78 | }
79 | }
80 |
--------------------------------------------------------------------------------
/SocketAgent/AgentServer.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Configuration;
3 | using System.Net.Sockets;
4 |
5 | namespace MDLabs.EtermSimulator.SocketAgent
6 | {
7 | public class AgentServer
8 | {
9 | private TcpClient _TcpClient;
10 | private TcpClient agentClient = GetTcpClient();
11 | private byte[] receiveBuffer;
12 | private int _CollectionID;
13 |
14 | public AgentServer(TcpClient tcpClient, int collectionID)
15 | {
16 | _CollectionID = collectionID;
17 | _TcpClient = tcpClient;
18 | receiveBuffer = new byte[_TcpClient.ReceiveBufferSize];
19 | _TcpClient.GetStream().BeginRead(receiveBuffer, 0, _TcpClient.ReceiveBufferSize, Receive, null);//开始读取客户端发送的数据
20 |
21 | }
22 | private void Receive(IAsyncResult ir)
23 | {
24 | int i = _TcpClient.GetStream().EndRead(ir);//接收到客户端发送的数据
25 | if (i > 0)
26 | {
27 | string str = System.Text.ASCIIEncoding.ASCII.GetString(receiveBuffer, 0, i);
28 | Output(_CollectionID, "CA", str);
29 | Output(_CollectionID, "CA", receiveBuffer, i);
30 | agentClient.GetStream().BeginWrite(receiveBuffer, 0, i, Send, null);//将客户端发送的数据 开始转发给 服务器
31 | Output(_CollectionID, "AS", "BEGIN");
32 | }
33 | }
34 | private void Send(IAsyncResult ir)
35 | {
36 | Output(_CollectionID, "AS", "END");
37 | agentClient.GetStream().EndWrite(ir);//转发结束
38 | agentClient.GetStream().BeginRead(receiveBuffer, 0, agentClient.ReceiveBufferSize, Receive2, null);//读取服务器返回的数据
39 | }
40 | private void Receive2(IAsyncResult ir)
41 | {
42 | int i = agentClient.GetStream().EndRead(ir);//读取服务器返回的数据
43 | if (i > 0)
44 | {
45 | string str = System.Text.ASCIIEncoding.ASCII.GetString(receiveBuffer, 0, i);
46 | Output(_CollectionID, "SA", str);
47 | Output(_CollectionID, "SA", receiveBuffer, i);
48 | _TcpClient.GetStream().BeginWrite(receiveBuffer, 0, i, Send2, null);//转发给客户端
49 | Output(_CollectionID, "AC", "BEGIN");
50 | }
51 | }
52 | private void Send2(IAsyncResult ir)
53 | {
54 | Output(_CollectionID, "AC", "END");
55 | _TcpClient.GetStream().EndWrite(ir);//转发结束
56 | _TcpClient.GetStream().BeginRead(receiveBuffer, 0, _TcpClient.ReceiveBufferSize, Receive, null);//读取客户端发送的数据
57 | }
58 |
59 | #region 获取监听及服务器地址端口
60 | private static TcpClient GetTcpClient()
61 | {
62 | string ip = ConfigurationManager.AppSettings["EtermServerIP"];
63 | int port = int.Parse(ConfigurationManager.AppSettings["EtermServerPort"]);
64 | return new TcpClient(ip, port);
65 | }
66 | #endregion
67 |
68 | #region 日志
69 | private static void Output(int id, string type, string str)
70 | {
71 | string log = string.Format("{0}|{1}|{2}", id, type, str);
72 | Console.WriteLine(log);
73 | //System.IO.File.AppendAllText("Log.txt", log + System.Environment.NewLine);
74 | }
75 | private static void Output(int id, string type, byte[] data, int length)
76 | {
77 | string log = id.ToString() + "|" + type + "|";
78 |
79 | Console.Write(id.ToString() + "|" + type + "|");
80 | for (int i = 0; i < length; i++)
81 | {
82 | log += string.Format("{0} ", data[i]);
83 | }
84 | Console.WriteLine(log);
85 | //System.IO.File.AppendAllText("Log.txt", log + System.Environment.NewLine);
86 | }
87 | #endregion
88 | }
89 | }
90 |
--------------------------------------------------------------------------------
/ETermSimulator/Eterm.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 | using System.Net.Sockets;
6 |
7 | namespace ETermSimulator
8 | {
9 | public class Eterm
10 | {
11 | private string _ClientIPAddress { get; set; }
12 | private string _ClientMacAddress { get; set; }
13 | private string _EtermVersion { get; set; }
14 | private string _EtermUserName { get; set; }
15 | private string _EtermPassword { get; set; }
16 | private string _JobNo{ get; set; }
17 | private string _JobNoPassword { get; set; }
18 | private TcpClient _TcpClient;
19 | private byte[] _Session=new byte[2];
20 |
21 | string strworkport = "60a44cac46ab";//这个地方时登陆人的mac地址(其中的大写一律转换成小写,中间的分隔符去掉)
22 | string strport = "192.168.80.21";//这个地方可能会不一样(登陆人的ip地址)
23 |
24 |
25 | public bool Connection(string etermServerIP,int etermServerPort)
26 | {
27 | _TcpClient = new TcpClient();
28 | _TcpClient.Connect(etermServerIP, etermServerPort);
29 | if (_TcpClient.Connected)
30 | {
31 | Console.Write("Eterm User Name:");
32 | _EtermUserName = Console.ReadLine();
33 | Console.Write("Eterm Password:");
34 | _EtermPassword = Console.ReadLine();
35 | Send(Loing());
36 | byte[] receiveBuffer = new byte[_TcpClient.ReceiveBufferSize];
37 | int receiveLength =_TcpClient.GetStream().Read(receiveBuffer, 0, receiveBuffer.Length);
38 | if (receiveLength > 0)
39 | {
40 | if (receiveBuffer[2] == 1)
41 | {
42 | Console.WriteLine("登陆成功!");
43 | Array.Copy(receiveBuffer,8,_Session,0,2);
44 |
45 | }
46 | else
47 | {
48 | Console.WriteLine("登录失败!");
49 | return false;
50 | }
51 |
52 | }
53 | System.Threading.Thread t = new System.Threading.Thread(Receive);
54 | t.Start();
55 |
56 | EncodeMachine machine = new EncodeMachine();
57 | Send(machine.TestA());
58 | Send(machine.TestB());
59 |
60 | while (true)
61 | {
62 | string str=Console.ReadLine();
63 | Send(machine.MakeInstruct(_Session, str));
64 | }
65 | }
66 | return true;
67 | //_TcpClient.GetStream().Write();
68 | }
69 | public void Receive()
70 | {
71 | byte[] receiveBuffer = new byte[_TcpClient.ReceiveBufferSize];
72 | while (true)
73 | {
74 | int receiveLength = _TcpClient.GetStream().Read(receiveBuffer, 0, receiveBuffer.Length);
75 | if (receiveLength > 0)
76 | {
77 | Console.Write("接收:");
78 | for (int i = 0; i < receiveLength; i++)
79 | {
80 | Console.Write("{0},", receiveBuffer[i]);
81 | }
82 | Console.WriteLine();
83 | var resp = new BaseResp(receiveBuffer);
84 | if (!string.IsNullOrWhiteSpace(resp.Text))
85 | {
86 | var lines = resp.Text.Split(new char[] { '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries);
87 | foreach (var line in lines)
88 | {
89 | Console.WriteLine(line);
90 | }
91 | }
92 | }
93 | }
94 | }
95 | private void Send(byte[] bytes)
96 | {
97 | _TcpClient.GetStream().Write(bytes, 0, bytes.Length);
98 | }
99 | public byte[] Loing() //string userName,string password(这个地方暂时先不传)
100 | {
101 | string strworkport = "60a44cac46ab";//这个地方时登陆人的mac地址(其中的大写一律转换成小写,中间的分隔符去掉)
102 | string strport = "192.168.80.21";//这个地方可能会不一样(登陆人的ip地址)
103 | EncodeMachine machine = new EncodeMachine();
104 | byte[] Send = machine.LogEncode(_EtermUserName, _EtermPassword, strworkport, strport, "3847010");
105 | return Send;
106 | }
107 | }
108 | }
109 |
--------------------------------------------------------------------------------
/EtermSimulatorTest/ETermSimulatorTest.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Debug
5 | AnyCPU
6 | {BB2641B8-677F-4D62-B255-4BE2B1642FB1}
7 | Library
8 | Properties
9 | EtermSimulatorTest
10 | EtermSimulatorTest
11 | v4.0
12 | 512
13 | {3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
14 | 10.0
15 | $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)
16 | $(ProgramFiles)\Common Files\microsoft shared\VSTT\$(VisualStudioVersion)\UITestExtensionPackages
17 | False
18 | UnitTest
19 |
20 |
21 | true
22 | full
23 | false
24 | bin\Debug\
25 | DEBUG;TRACE
26 | prompt
27 | 4
28 |
29 |
30 | pdbonly
31 | true
32 | bin\Release\
33 | TRACE
34 | prompt
35 | 4
36 |
37 |
38 |
39 |
40 | 3.5
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 | {0c5ede5c-ee87-4456-b8af-d031e54ab586}
62 | ETermSimulator
63 |
64 |
65 |
66 |
67 |
68 |
69 | False
70 |
71 |
72 | False
73 |
74 |
75 | False
76 |
77 |
78 | False
79 |
80 |
81 |
82 |
83 |
84 |
85 |
92 |
--------------------------------------------------------------------------------
/SocketClient/AnalysisMachine.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 | using System.Threading.Tasks;
6 |
7 | namespace SocketClient
8 | {
9 | public class AnalysisMachine
10 | {
11 | #region 解析登陆数据
12 | public void LoginAnalysis(byte[] logReceive)
13 | {
14 | if (logReceive.Length > 8)//这个表示要么是命令,要么是服务器返回的是正确的数据
15 | {
16 | if (logReceive[5] == logReceive[6]&&logReceive[6]==logReceive[7]&&logReceive[7]==0) //表示登陆服务器首次返回
17 | {
18 | var userid=LogService(logReceive);//登陆的账号
19 | }
20 | if(logReceive[4]==logReceive[5]&&logReceive[5]==logReceive[6]&&logReceive[7]==1)//这个表示发送的指令和命令
21 | {
22 | OrderService(logReceive);
23 | }
24 | //其他错误的还没有找到规律(错误的情况)
25 | }
26 | else //这个表示是测试返回的字节
27 | {
28 |
29 | }
30 | }
31 | #endregion
32 |
33 | #region 解析登陆命令
34 | public byte LogService(byte [] receiveService)
35 | {//取登陆号:这个地方需要研究一下(里面可能会包含权限问题)
36 | return receiveService[8]; //表示需要返回的账号标志
37 | }
38 | #endregion
39 | //下午的目标就是:把这个服务器上返回回来的数据进行解析,解析成字符串,然后输出出来。能把一般的命令解析出来,这就算完成了。
40 | #region 表示解析普通命令
41 | public string OrderService(byte [] receiveService)
42 | {
43 | string rtn = "";
44 | Byte[] chineseCode=new byte[256];
45 | Byte[] code=new byte[receiveService.Length];//该地方申请的长度与输出是有关系的,主意
46 | bool value = false;
47 | int m=0;//相当于chineseCode的指针
48 | int n=0;//相当于code的指针
49 | for (int i = 19; i < receiveService.Length; i++)
50 | {
51 | //出现的问题就是:1.遇到特殊标记的,如何处理
52 | //2.遇到汉字的情况如何处理?
53 | if (receiveService[i] < 32)
54 | {
55 | //表示特殊字符
56 | if (receiveService[i] == 13)
57 | {
58 | rtn+=TransToCode(code)+"~";
59 | code=new byte[1024];
60 | n = 0;
61 | }
62 | if (receiveService[i] == 28)
63 | {
64 | //表示红色标记开始
65 | rtn += "@";
66 | }
67 | if (receiveService[i] == 29)
68 | {
69 | //表示红色标记结束
70 | rtn+="@";
71 | }
72 | if (receiveService[i] == 14 && receiveService[i-1] == 27)
73 | {
74 | value = true;
75 | }
76 | if (receiveService[i] == 15 && receiveService[i - 1] == 27)
77 | {
78 | value = false;
79 | rtn += TransToChinese(chineseCode);
80 | }
81 | if (receiveService[i] == 30)
82 | {
83 | //表示是【光标的(三角)开始】
84 | rtn += "△";
85 | }
86 | if (receiveService[i] == 9 && receiveService[i - 1] == 27)
87 | {
88 | //表示是个结束表示【四方小点儿】
89 | rtn += "□";
90 | }
91 | if (receiveService[i] == 11 && receiveService[i - 1] == 27&&receiveService[i+3]==15&&receiveService[i+4]==3)
92 | {
93 | break;
94 | }
95 | if (receiveService[i] == 27)
96 | {
97 | continue;
98 | }
99 | if (receiveService[i] == 3)
100 | {
101 | break;
102 | }
103 | }
104 | else if (receiveService[i] >= 32)
105 | {
106 | if (receiveService[i] == 43)
107 | {
108 | rtn += "当前的内容没有显示完";
109 | }
110 | if (receiveService[i] == 98 && receiveService[i - 1] == 27)
111 | {
112 | continue;//这个是显示不出来内容的。
113 | }
114 | if (value == true)
115 | {
116 | chineseCode[m] = receiveService[i];
117 | m++;
118 | }else if(value==false)
119 | {
120 | code[n]=receiveService[i];
121 | }
122 | }
123 |
124 | }
125 | return rtn;
126 | }
127 | #endregion
128 | #region 解析错误指令
129 | public byte[] FaultService(byte[] receiveService)
130 | {
131 | return null;
132 | }
133 | #endregion
134 | #region 根据gb2312转汉字
135 | private string TransToChinese(byte[] toChinese)
136 | {
137 | string str = "";
138 | byte[] arry = new byte[2];
139 | for (int i = 0; i < toChinese.Length; i++)
140 | {
141 | toChinese[i] = (byte)(toChinese[i] + 128);
142 | }
143 | for (int i = 0; i < toChinese.Length; i += 2)
144 | {
145 | arry[0] = toChinese[i];
146 | arry[1] = toChinese[i + 1];
147 | str += System.Text.Encoding.GetEncoding("gb2312").GetString(arry);
148 | }
149 | return str;
150 | }
151 |
152 | private string TransToCode(byte[] toCode)
153 | {
154 | string str = System.Text.Encoding.Default.GetString(toCode);
155 | return str;
156 | }
157 | #endregion
158 | }
159 | }
160 |
--------------------------------------------------------------------------------
/ETermSimulator/BaseResp.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 |
6 | namespace ETermSimulator
7 | {
8 | public class BaseResp
9 | {
10 | private const byte RespContentStartFlag = 2;
11 | private const byte RespContentEndFlag = 3;
12 | private const byte RespContentFuncFlag = 27;
13 | private const byte FuncPointFlag = 11;
14 | private const byte FuncGBKFlag = 14;//include(GB2312 and infrequently used character)
15 | private const byte FuncGBKInfrequentFlag = 120;//flag of infrequently used character
16 | private const byte FuncASCIIFlag = 15;
17 | private const byte FuncASCIIFlag2 = 98;
18 | private const byte FuncTextContentStartFlag = 77;
19 | private const byte FuncTabStopFlag = 9;//TabStop
20 |
21 | private const byte FuncSOEFlag = 30;//SOE
22 |
23 |
24 |
25 | public BaseResp(byte[] receiveBuffer)
26 | {
27 | if (receiveBuffer != null && receiveBuffer.Length > 13 && receiveBuffer[0] == 1 && receiveBuffer[1] == 0)
28 | {
29 | int respLength = receiveBuffer[2] * 256 + receiveBuffer[3];
30 | Buffer = new byte[respLength];
31 | Array.Copy(receiveBuffer,Buffer,respLength);
32 | List segments = SplitSegments(Buffer);
33 | if (Text == null)
34 | Text = "";
35 | foreach (var segment in segments)
36 | {
37 | switch (segment[1])
38 | {
39 | case FuncPointFlag:
40 | StartPoint = DealFuncPointFlag(segment);
41 | break;
42 | case FuncGBKFlag:
43 | Text += DealFuncGBKFlag(segment);
44 | break;
45 | case FuncASCIIFlag:
46 | case FuncASCIIFlag2:
47 | case FuncTabStopFlag:
48 | case FuncTextContentStartFlag:
49 | Text += DealFuncASCIIFlag(segment);
50 | break;
51 | default:
52 | continue;
53 | }
54 | }
55 | }
56 | }
57 |
58 | #region deal PointFlag
59 | private Point DealFuncPointFlag(byte[] segment)
60 | {
61 | return new Point((System.Int16)(segment[3] - 32), (System.Int16)(segment[4] - 32));
62 | }
63 | #endregion
64 |
65 | #region deal GBKFlag
66 | private string DealFuncGBKFlag(byte[] segment)
67 | {
68 | List GBKList = new List();
69 | for (int i = 0; i < segment.Length; i++)
70 | {
71 | if (i < 2)//head
72 | continue;
73 | if (segment[i] != FuncGBKInfrequentFlag)//frequently used character
74 | {
75 |
76 | var judge = 0x2f <= segment[i] + 0xa && segment[i] + 0xa <= 0x32;
77 | var first = judge ? segment[i+1] : segment[i];
78 | var second = judge ? segment[i] : segment[i+1];
79 | first = (byte)first - 0xe >= 0x24 ? (byte)(first - 0xe) : first;
80 | first = (byte)(first - 0x72);
81 | second = judge ? (byte)(second + 0xa) : second;
82 | second = (byte)(second - 0x80);
83 | GBKList.Add(first);
84 | GBKList.Add(second);
85 | //if (segment[i] < 37)
86 | // GBKList.Add((byte)(segment[i] + 142));
87 | //else
88 | // GBKList.Add((byte)(segment[i] + 128));
89 | //GBKList.Add((byte)(segment[i + 1] + 128));
90 | i++;
91 | }
92 | else//infrequently used character
93 | {
94 | byte a = (byte)((((segment[i + 1] + 0x1) << 4) & 0xF0) | ((segment[i + 2] >> 2) & 0xF));
95 | byte b = (byte)((segment[i + 3] + 0x1) + ((segment[i + 2] & 0x2) << 6));
96 | GBKList.Add(a);
97 | GBKList.Add(b);
98 | i = i + 3;
99 | }
100 | }
101 | Encoding gbkEncoding = System.Text.Encoding.GetEncoding("GBK");
102 | return gbkEncoding.GetString(GBKList.ToArray());
103 | }
104 | #endregion
105 |
106 | #region deal ASCIIFlag
107 | private string DealFuncASCIIFlag(byte[] segment)
108 | {
109 | List AssciiList = new List();
110 | for (int i = 0; i < segment.Length; i++)
111 | {
112 | if (i < 2)//head
113 | continue;
114 | if (segment[i] != FuncSOEFlag)
115 | AssciiList.Add(segment[i]);
116 | }
117 | Encoding assciiEncoding = new System.Text.ASCIIEncoding();
118 | return assciiEncoding.GetString(AssciiList.ToArray());
119 | }
120 | #endregion
121 |
122 | #region Split buffer with RespContentFuncFlag
123 | private List SplitSegments(byte[] buffer)
124 | {
125 |
126 | int contentStartIdx = Array.LastIndexOf(buffer, RespContentStartFlag);//因为前边表示长度的部分可能会存在2或者3 所以从后往前搜索
127 | int contentEndIdx = Array.LastIndexOf(buffer, RespContentEndFlag);
128 | List RespBufferSegments = new List();
129 | var content = buffer.Skip(contentStartIdx + 1).Take(contentEndIdx - contentStartIdx - 1);
130 | List RespBufferSegmentStartIdxs = new List();
131 | for (int i = contentStartIdx + 1; i <= contentStartIdx + 1 + content.Count(); i++)
132 | {
133 | if (buffer[i] == RespContentFuncFlag)
134 | {
135 | RespBufferSegmentStartIdxs.Add(i);
136 | }
137 | }
138 | for (int i = 0; i < RespBufferSegmentStartIdxs.Count - 1; i++)
139 | {
140 | RespBufferSegments.Add(buffer.Skip(RespBufferSegmentStartIdxs[i]).Take(RespBufferSegmentStartIdxs[i + 1] - RespBufferSegmentStartIdxs[i]).ToArray());
141 | }
142 | RespBufferSegments.Add(buffer.Skip(RespBufferSegmentStartIdxs[RespBufferSegmentStartIdxs.Count - 1]).Take(contentEndIdx - RespBufferSegmentStartIdxs[RespBufferSegmentStartIdxs.Count - 1]).ToArray());
143 | return RespBufferSegments;
144 | }
145 | #endregion
146 |
147 | public byte[] Buffer { get; private set; }//服务器返回的数据
148 |
149 | public string Text
150 | {
151 | get;
152 | private set;
153 | }
154 |
155 | public Point StartPoint { get; private set; }
156 | public Point? EndPoint { get; private set; }
157 |
158 | }
159 | }
160 |
--------------------------------------------------------------------------------
/SocketClient/ChineseToPinyin.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 |
6 | namespace SocketClient
7 | {
8 | public class ChineseToPinyin
9 | {
10 |
11 | private static readonly Dictionary CodeCollections = new Dictionary {
12 | { -20319, "a" }, { -20317, "ai" }, { -20304, "an" }, { -20295, "ang" }, { -20292,
13 | "ao" }, { -20283, "ba" }, { -20265, "bai" },
14 | { -20257, "ban" }, { -20242, "bang" }, { -20230, "bao" }, { -20051, "bei" }, { -20036,
15 | "ben" }, { -20032, "beng" }, { -20026, "bi" }
16 | , { -20002, "bian" }, { -19990, "biao" }, { -19986, "bie" }, { -19982, "bin" }, { -19976,
17 | "bing" }, { -19805, "bo" },
18 | { -19784, "bu" }, { -19775, "ca" }, { -19774, "cai" }, { -19763, "can" }, { -19756, "cang" },
19 | { -19751, "cao" }, { -19746, "ce" },
20 | {-19741, "ceng"},{ -19739,"cha" },{-19728,"chai"},{-19725,"chan"}, { -19715, "chang" }, { -19540, "chao" },
21 | { -19531, "che" }, { -19525, "chen" }, { -19515, "cheng" }, { -19500, "chi" }, { -19484,
22 | "chong" }, { -19479, "chou" },{ -19467, "chu"}, { -19289, "chuai" }, { -19288, "chuan" }, { -19281, "chuang" }, { -19275,
23 | "chui" }, { -19270, "chun" },{ -19263, "chuo"}, { -19261, "ci" }, { -19249, "cong" }, { -19243, "cou" }, { -19242,
24 | "cu" }, { -19238, "cuan" },{ -19235, "cui" }, { -19227, "cun" }, { -19224, "cuo" }, { -19218, "da" }, { -19212, "dai" },
25 | { -19038, "dan" }, { -19023, "dang" },{ -19018, "dao" }, { -19006, "de" }, { -19003, "deng" }, { -18996, "di" }, { -18977,
26 | "dian" }, { -18961, "diao" }, { -18952, "die" }, { -18783, "ding" }, { -18774, "diu" }, { -18773, "dong" }, { -18763, "dou" }, { -18756,
27 | "du" }, { -18741, "duan" }, { -18735, "dui" }, { -18731, "dun" }, { -18722, "duo" }, { -18710, "e" }, { -18697, "en" },
28 | { -18696, "er" }, { -18526, "fa" },{ -18518, "fan" }, { -18501, "fang" }, { -18490, "fei" }, { -18478, "fen" }, { -18463,
29 | "feng" }, { -18448, "fo" }, { -18447, "fou" }, { -18446, "fu" }, { -18239, "ga"}, { -18237, "gai" }, { -18231, "gan" }, { -18220, "gang" },
30 | { -18211, "gao" }, { -18201, "ge" },{-18184,"gei"},{ -18183, "gen"},{-18181,"geng"},{-18012,"gong"
31 | },
32 | { -17997, "gou" }, { -17988, "gu" }, { -17970, "gua" }
33 | , { -17964, "guai" }, { -17961, "guan" }, { -17950, "guang" }, { -17947, "gui" }, { -17931,"gun" }, { -17928, "guo" },
34 | { -17922, "ha"}, { -17759, "hai" }, { -17752, "han"}, { -17733, "hang" }, { -17730, "hao" },
35 | { -17721, "he" }, { -17703, "hei" },{-17701, "hen" },{-17697,"heng"},{-17692,"hong"},{-17683,"hou"},
36 | { -17676, "hu" }, { -17496, "hua" },{ -17487, "huai" }, { -17482, "huan" }, { -17468, "huang" }, { -17454, "hui" }, { -17433,
37 | "hun" }, { -17427, "huo" },{ -17417, "ji" }, { -17202, "jia" }, { -17185, "jian" }, { -16983, "jiang" }, { -16970, "jiao" },
38 | { -16942, "jie" },{ -16915, "jin" }, { -16733, "jing" }, { -16708, "jiong" }, { -16706, "jiu" }, { -16689, "ju" },
39 | { -16664, "juan" },{ -16657, "jue" }, { -16647, "jun" }, { -16474, "ka" }, { -16470, "kai" }, { -16465, "kan" },
40 | { -16459, "kang" }, { -16452, "kao" },{-16448,"ke"},{-16433,"ken"},{ -16429,"keng"},{-16427,"kong"},{ -16423, "kou" }, { -16419, "ku" },
41 | { -16412, "kua" }, { -16407, "kuai" }, { -16403, "kuan" }, { -16401, "kuang" }, { -16393, "kui" }, { -16220,"kun" }, { -16216, "kuo" },
42 | { -16212, "la" }, { -16205, "lai" }, { -16202, "lan" }, { -16187, "lang" }, { -16180, "lao" },
43 | { -16171, "le" }, { -16169, "lei" },
44 | { -16158, "leng" }, { -16155, "li" }, { -15959, "lia" }, { -15958, "lian" }, { -15944, "liang" },{ -15933, "liao" },
45 | { -15920, "lie" }, { -15915, "lin" }, { -15903, "ling" }, { -15889, "liu" }, { -15878, "long" },
46 | { -15707, "lou" }, { -15701, "lu" }, { -15681, "lv" }, { -15667, "luan" }, { -15661, "lue" }, { -15659, "lun" }, { -15652,
47 | "luo" }, { -15640, "ma" }, { -15631, "mai" },
48 | { -15625,"man" }, {-15454,"mang"},{-15448,"mao"},{ -15436,"me"},{ -15435, "mei" }, { -15419, "men" },
49 | { -15416, "meng" }, { -15408, "mi" }, { -15394, "mian" }, { -15385, "miao" }, { -15377,"mie" }, { -15375, "min" },
50 | { -15369, "ming" }, { -15363, "miu" }, { -15362, "mo" }, { -15183, "mou" }, { -15180,"mu" }, { -15165, "na" }, { -15158, "nai" },
51 | { -15153, "nan" }, { -15150,"nang" }, { -15149, "nao" }, { -15144, "ne" }, { -15143, "nei" },
52 | { -15141, "nen" }, { -15140, "neng" }, { -15139, "ni" }, { -15128, "nian" }, { -15121, "niang" }, { -15119, "niao" }, { -15117,
53 | "nie" }, { -15110, "nin" },{ -15109, "ning" }, { -14941, "niu" }, { -14937, "nong" }, { -14933, "nu" }, { -14930, "nv" },
54 | { -14929, "nuan" }, { -14928, "nue" }
55 | , { -14926, "nuo" }, { -14922, "o" }, { -14921, "ou" }, { -14914, "pa" }, { -14908, "pai" },
56 | { -14902, "pan" }, { -14894, "pang" },
57 | { -14889, "pao" }, { -14882, "pei" }, { -14873, "pen" }, { -14871, "peng" }, { -14857,
58 | "pi" }, { -14678, "pian" },
59 | { -14674, "piao" }, { -14670, "pie" }, { -14668, "pin" }, { -14663, "ping" }, { -14654, "po" },
60 | { -14645, "pu" }, { -14630, "qi" },{ -14594,"qia"},{-14429,"qian"},{-14407,"qiang"},{-14399,"qiao"},
61 | { -14384, "qie" }, { -14379, "qin" },{ -14368, "qing"}, { -14355, "qiong" }, { -14353, "qiu" }, { -14345, "qu" }, { -14170,
62 | "quan" }, { -14159, "que" },{ -14151, "qun"}, { -14149, "ran" }, { -14145, "rang" }, { -14140, "rao"}, { -14137, "re" },
63 | { -14135, "ren" }, { -14125, "reng" }, { -14123, "ri" }, { -14122, "rong"}, { -14112, "rou" }, { -14109, "ru"}, { -14099, "ruan" },
64 | { -14097, "rui" }, { -14094, "run" }, { -14092, "ruo" }, { -14090,"sa" }, { -14087, "sai" }, { -14083, "san" }, { -13917, "sang" },
65 | { -13914, "sao" }, { -13910, "se" } , { -13907, "sen" }, { -13906, "seng" }, { -13905, "sha" }, { -13896, "shai" }, { -13894,
66 | "shan" }, { -13878, "shang" },{ -13870, "shao" }, { -13859, "she" }, { -13847, "shen" }, { -13831, "sheng" }, { -13658,
67 | "shi" }, { -13611, "shou" }, { -13601, "shu" }, { -13406, "shua" }, { -13404, "shuai" }, { -13400, "shuan" },
68 | { -13398, "shuang" }, { -13395, "shui" },{-13391,"shun"},{-13387,"shuo"},{-13383,"si"},{-13367,"song"},{ -13359, "sou" }, { -13356, "su" },
69 | { -13343, "suan" }, { -13340, "sui" }, { -13329, "sun" }, { -13326, "suo"
70 | }, { -13318, "ta" },
71 | { -13147, "tai" }, { -13138, "tan" },{ -13120, "tang" }, { -13107, "tao" }, { -13096, "te" }, { -13095, "teng"
72 | }, { -13091,"ti" }, { -13076, "tian" },{ -13068, "tiao" }, { -13063,"tie" }, { -13060,"ting" }, { -12888, "tong" }, { -12875, "tou" },
73 | { -12871, "tu" },{ -12860, "tuan" }, { -12858, "tui" }, { -12852, "tun" }, { -12849, "tuo" }, { -12838, "wa" },
74 | { -12831, "wai" }, { -12829, "wan" }, { -12812, "wang" }, { -12802, "wei" }, { -12607, "wen" }, { -12597, "weng" }, { -12594,
75 | "wo" }, { -12585, "wu" }, { -12556, "xi" }, { -12359, "xia" }, { -12346, "xian" }, { -12320, "xiang" }, { -12300, "xiao" }, { -12120,
76 | "xie" }, { -12099, "xin" },{ -12089, "xing" }, { -12074, "xiong" }, { -12067, "xiu" }, { -12058, "xu" }, { -12039,
77 | "xuan" }, { -11867, "xue" },{ -11861, "xun" }, { -11847, "ya" }, { -11831, "yan" }, { -11798, "yang" }, { -11781,
78 | "yao" }, { -11604, "ye" }, { -11589, "yi" },{ -11536, "yin" }, { -11358, "ying"
79 | }, { -11340, "yo" }, { -11339, "yong" }, { -11324,"you" }, { -11303, "yu" },
80 | { -11097, "yuan"}, { -11077, "yue" }, { -11067, "yun" }, { -11055, "za" }, { -11052, "zai" },
81 | { -11045, "zan" },{ -11041, "zang" }, { -11038, "zao" }, { -11024, "ze" }, { -11020, "zei" }, { -11019,
82 | "zen" }, { -11018, "zeng" },{ -11014, "zha" }, { -10838, "zhai" }, { -10832, "zhan" }, { -10815, "zhang" }, { -10800,
83 | "zhao" }, { -10790, "zhe" },{ -10780, "zhen" }, { -10764, "zheng" }, { -10587, "zhi" }, { -10544, "zhong" }, { -10533,
84 | "zhou" }, { -10519, "zhu" },{-10331, "zhua"},{-10329,"zhuai"},{-10328,"zhuan"},{-10322,"zhuang"},
85 | { -10315, "zhui" }, { -10309, "zhun" }, { -10307, "zhuo"}, { -10296, "zi" }, { -10281, "zong" }, { -10274, "zou" }, { -10270, "zu" },
86 | { -10262, "zuan" }, { -10260, "zui" }, { -10256, "zun" }, { -10254, "zuo" } };
87 |
88 | public static string ToPinYin(string txt)
89 | {
90 | txt = txt.Trim();
91 | byte[] arr = new byte[2]; //每个汉字为2字节
92 | StringBuilder result = new StringBuilder();//使用StringBuilder优化字符串连接
93 | int charCode = 0;
94 | int arr1 = 0;
95 | int arr2 = 0;
96 | char[] arrChar = txt.ToCharArray();
97 | for (int j = 0; j < arrChar.Length; j++) //遍历输入的字符
98 | {
99 | arr = System.Text.Encoding.Default.GetBytes(arrChar[j].ToString());//根据系统默认编码得到字节码
100 | if (arr.Length == 1)//如果只有1字节说明该字符不是汉字,结束本次循环
101 | { result.Append(arrChar[j].ToString()); continue; }
102 | arr1 = (short)(arr[0]); //取字节1
103 | arr2 = (short)(arr[1]); //取字节2
104 | charCode = arr1 * 256 + arr2 - 65536;//计算汉字的编码
105 | if (charCode > -10254 || charCode < -20319) //如果不在汉字编码范围内则不改变
106 | {
107 | result.Append(arrChar[j]);
108 | }
109 | else
110 | { //根据汉字编码范围查找对应的拼音并保存到结果中
111 | //由于charCode的键不一定存在,所以要找比他更小的键上一个键
112 | if (!CodeCollections.ContainsKey(charCode))
113 | {
114 | for (int i = charCode; i <= 0; --i)
115 | {
116 | if (CodeCollections.ContainsKey(i))
117 | {
118 | result.Append(CodeCollections[i]);//(想办法截取出一组,而不是单个的)
119 | break;
120 | }
121 | }
122 | }
123 | else
124 | {
125 | result.Append(CodeCollections[charCode]);
126 |
127 | }
128 | }
129 | }
130 | return result.ToString();
131 | }
132 | }
133 | }
134 |
--------------------------------------------------------------------------------
/ETermSimulator/ChineseToPinyin.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 |
6 | namespace ETermSimulator
7 | {
8 | public class ChineseToPinyin
9 | {
10 |
11 | private static readonly Dictionary CodeCollections = new Dictionary {
12 | { -20319, "a" }, { -20317, "ai" }, { -20304, "an" }, { -20295, "ang" }, { -20292,
13 | "ao" }, { -20283, "ba" }, { -20265, "bai" },
14 | { -20257, "ban" }, { -20242, "bang" }, { -20230, "bao" }, { -20051, "bei" }, { -20036,
15 | "ben" }, { -20032, "beng" }, { -20026, "bi" }
16 | , { -20002, "bian" }, { -19990, "biao" }, { -19986, "bie" }, { -19982, "bin" }, { -19976,
17 | "bing" }, { -19805, "bo" },
18 | { -19784, "bu" }, { -19775, "ca" }, { -19774, "cai" }, { -19763, "can" }, { -19756, "cang" },
19 | { -19751, "cao" }, { -19746, "ce" },
20 | {-19741, "ceng"},{ -19739,"cha" },{-19728,"chai"},{-19725,"chan"}, { -19715, "chang" }, { -19540, "chao" },
21 | { -19531, "che" }, { -19525, "chen" }, { -19515, "cheng" }, { -19500, "chi" }, { -19484,
22 | "chong" }, { -19479, "chou" },{ -19467, "chu"}, { -19289, "chuai" }, { -19288, "chuan" }, { -19281, "chuang" }, { -19275,
23 | "chui" }, { -19270, "chun" },{ -19263, "chuo"}, { -19261, "ci" }, { -19249, "cong" }, { -19243, "cou" }, { -19242,
24 | "cu" }, { -19238, "cuan" },{ -19235, "cui" }, { -19227, "cun" }, { -19224, "cuo" }, { -19218, "da" }, { -19212, "dai" },
25 | { -19038, "dan" }, { -19023, "dang" },{ -19018, "dao" }, { -19006, "de" }, { -19003, "deng" }, { -18996, "di" }, { -18977,
26 | "dian" }, { -18961, "diao" }, { -18952, "die" }, { -18783, "ding" }, { -18774, "diu" }, { -18773, "dong" }, { -18763, "dou" }, { -18756,
27 | "du" }, { -18741, "duan" }, { -18735, "dui" }, { -18731, "dun" }, { -18722, "duo" }, { -18710, "e" }, { -18697, "en" },
28 | { -18696, "er" }, { -18526, "fa" },{ -18518, "fan" }, { -18501, "fang" }, { -18490, "fei" }, { -18478, "fen" }, { -18463,
29 | "feng" }, { -18448, "fo" }, { -18447, "fou" }, { -18446, "fu" }, { -18239, "ga"}, { -18237, "gai" }, { -18231, "gan" }, { -18220, "gang" },
30 | { -18211, "gao" }, { -18201, "ge" },{-18184,"gei"},{ -18183, "gen"},{-18181,"geng"},{-18012,"gong"
31 | },
32 | { -17997, "gou" }, { -17988, "gu" }, { -17970, "gua" }
33 | , { -17964, "guai" }, { -17961, "guan" }, { -17950, "guang" }, { -17947, "gui" }, { -17931,"gun" }, { -17928, "guo" },
34 | { -17922, "ha"}, { -17759, "hai" }, { -17752, "han"}, { -17733, "hang" }, { -17730, "hao" },
35 | { -17721, "he" }, { -17703, "hei" },{-17701, "hen" },{-17697,"heng"},{-17692,"hong"},{-17683,"hou"},
36 | { -17676, "hu" }, { -17496, "hua" },{ -17487, "huai" }, { -17482, "huan" }, { -17468, "huang" }, { -17454, "hui" }, { -17433,
37 | "hun" }, { -17427, "huo" },{ -17417, "ji" }, { -17202, "jia" }, { -17185, "jian" }, { -16983, "jiang" }, { -16970, "jiao" },
38 | { -16942, "jie" },{ -16915, "jin" }, { -16733, "jing" }, { -16708, "jiong" }, { -16706, "jiu" }, { -16689, "ju" },
39 | { -16664, "juan" },{ -16657, "jue" }, { -16647, "jun" }, { -16474, "ka" }, { -16470, "kai" }, { -16465, "kan" },
40 | { -16459, "kang" }, { -16452, "kao" },{-16448,"ke"},{-16433,"ken"},{ -16429,"keng"},{-16427,"kong"},{ -16423, "kou" }, { -16419, "ku" },
41 | { -16412, "kua" }, { -16407, "kuai" }, { -16403, "kuan" }, { -16401, "kuang" }, { -16393, "kui" }, { -16220,"kun" }, { -16216, "kuo" },
42 | { -16212, "la" }, { -16205, "lai" }, { -16202, "lan" }, { -16187, "lang" }, { -16180, "lao" },
43 | { -16171, "le" }, { -16169, "lei" },
44 | { -16158, "leng" }, { -16155, "li" }, { -15959, "lia" }, { -15958, "lian" }, { -15944, "liang" },{ -15933, "liao" },
45 | { -15920, "lie" }, { -15915, "lin" }, { -15903, "ling" }, { -15889, "liu" }, { -15878, "long" },
46 | { -15707, "lou" }, { -15701, "lu" }, { -15681, "lv" }, { -15667, "luan" }, { -15661, "lue" }, { -15659, "lun" }, { -15652,
47 | "luo" }, { -15640, "ma" }, { -15631, "mai" },
48 | { -15625,"man" }, {-15454,"mang"},{-15448,"mao"},{ -15436,"me"},{ -15435, "mei" }, { -15419, "men" },
49 | { -15416, "meng" }, { -15408, "mi" }, { -15394, "mian" }, { -15385, "miao" }, { -15377,"mie" }, { -15375, "min" },
50 | { -15369, "ming" }, { -15363, "miu" }, { -15362, "mo" }, { -15183, "mou" }, { -15180,"mu" }, { -15165, "na" }, { -15158, "nai" },
51 | { -15153, "nan" }, { -15150,"nang" }, { -15149, "nao" }, { -15144, "ne" }, { -15143, "nei" },
52 | { -15141, "nen" }, { -15140, "neng" }, { -15139, "ni" }, { -15128, "nian" }, { -15121, "niang" }, { -15119, "niao" }, { -15117,
53 | "nie" }, { -15110, "nin" },{ -15109, "ning" }, { -14941, "niu" }, { -14937, "nong" }, { -14933, "nu" }, { -14930, "nv" },
54 | { -14929, "nuan" }, { -14928, "nue" }
55 | , { -14926, "nuo" }, { -14922, "o" }, { -14921, "ou" }, { -14914, "pa" }, { -14908, "pai" },
56 | { -14902, "pan" }, { -14894, "pang" },
57 | { -14889, "pao" }, { -14882, "pei" }, { -14873, "pen" }, { -14871, "peng" }, { -14857,
58 | "pi" }, { -14678, "pian" },
59 | { -14674, "piao" }, { -14670, "pie" }, { -14668, "pin" }, { -14663, "ping" }, { -14654, "po" },
60 | { -14645, "pu" }, { -14630, "qi" },{ -14594,"qia"},{-14429,"qian"},{-14407,"qiang"},{-14399,"qiao"},
61 | { -14384, "qie" }, { -14379, "qin" },{ -14368, "qing"}, { -14355, "qiong" }, { -14353, "qiu" }, { -14345, "qu" }, { -14170,
62 | "quan" }, { -14159, "que" },{ -14151, "qun"}, { -14149, "ran" }, { -14145, "rang" }, { -14140, "rao"}, { -14137, "re" },
63 | { -14135, "ren" }, { -14125, "reng" }, { -14123, "ri" }, { -14122, "rong"}, { -14112, "rou" }, { -14109, "ru"}, { -14099, "ruan" },
64 | { -14097, "rui" }, { -14094, "run" }, { -14092, "ruo" }, { -14090,"sa" }, { -14087, "sai" }, { -14083, "san" }, { -13917, "sang" },
65 | { -13914, "sao" }, { -13910, "se" } , { -13907, "sen" }, { -13906, "seng" }, { -13905, "sha" }, { -13896, "shai" }, { -13894,
66 | "shan" }, { -13878, "shang" },{ -13870, "shao" }, { -13859, "she" }, { -13847, "shen" }, { -13831, "sheng" }, { -13658,
67 | "shi" }, { -13611, "shou" }, { -13601, "shu" }, { -13406, "shua" }, { -13404, "shuai" }, { -13400, "shuan" },
68 | { -13398, "shuang" }, { -13395, "shui" },{-13391,"shun"},{-13387,"shuo"},{-13383,"si"},{-13367,"song"},{ -13359, "sou" }, { -13356, "su" },
69 | { -13343, "suan" }, { -13340, "sui" }, { -13329, "sun" }, { -13326, "suo"
70 | }, { -13318, "ta" },
71 | { -13147, "tai" }, { -13138, "tan" },{ -13120, "tang" }, { -13107, "tao" }, { -13096, "te" }, { -13095, "teng"
72 | }, { -13091,"ti" }, { -13076, "tian" },{ -13068, "tiao" }, { -13063,"tie" }, { -13060,"ting" }, { -12888, "tong" }, { -12875, "tou" },
73 | { -12871, "tu" },{ -12860, "tuan" }, { -12858, "tui" }, { -12852, "tun" }, { -12849, "tuo" }, { -12838, "wa" },
74 | { -12831, "wai" }, { -12829, "wan" }, { -12812, "wang" }, { -12802, "wei" }, { -12607, "wen" }, { -12597, "weng" }, { -12594,
75 | "wo" }, { -12585, "wu" }, { -12556, "xi" }, { -12359, "xia" }, { -12346, "xian" }, { -12320, "xiang" }, { -12300, "xiao" }, { -12120,
76 | "xie" }, { -12099, "xin" },{ -12089, "xing" }, { -12074, "xiong" }, { -12067, "xiu" }, { -12058, "xu" }, { -12039,
77 | "xuan" }, { -11867, "xue" },{ -11861, "xun" }, { -11847, "ya" }, { -11831, "yan" }, { -11798, "yang" }, { -11781,
78 | "yao" }, { -11604, "ye" }, { -11589, "yi" },{ -11536, "yin" }, { -11358, "ying"
79 | }, { -11340, "yo" }, { -11339, "yong" }, { -11324,"you" }, { -11303, "yu" },
80 | { -11097, "yuan"}, { -11077, "yue" }, { -11067, "yun" }, { -11055, "za" }, { -11052, "zai" },
81 | { -11045, "zan" },{ -11041, "zang" }, { -11038, "zao" }, { -11024, "ze" }, { -11020, "zei" }, { -11019,
82 | "zen" }, { -11018, "zeng" },{ -11014, "zha" }, { -10838, "zhai" }, { -10832, "zhan" }, { -10815, "zhang" }, { -10800,
83 | "zhao" }, { -10790, "zhe" },{ -10780, "zhen" }, { -10764, "zheng" }, { -10587, "zhi" }, { -10544, "zhong" }, { -10533,
84 | "zhou" }, { -10519, "zhu" },{-10331, "zhua"},{-10329,"zhuai"},{-10328,"zhuan"},{-10322,"zhuang"},
85 | { -10315, "zhui" }, { -10309, "zhun" }, { -10307, "zhuo"}, { -10296, "zi" }, { -10281, "zong" }, { -10274, "zou" }, { -10270, "zu" },
86 | { -10262, "zuan" }, { -10260, "zui" }, { -10256, "zun" }, { -10254, "zuo" } };
87 |
88 | public static string ToPinYin(string txt)
89 | {
90 | txt = txt.Trim();
91 | byte[] arr = new byte[2]; //每个汉字为2字节
92 | StringBuilder result = new StringBuilder();//使用StringBuilder优化字符串连接
93 | int charCode = 0;
94 | int arr1 = 0;
95 | int arr2 = 0;
96 | char[] arrChar = txt.ToCharArray();
97 | for (int j = 0; j < arrChar.Length; j++) //遍历输入的字符
98 | {
99 | arr = System.Text.Encoding.Default.GetBytes(arrChar[j].ToString());//根据系统默认编码得到字节码
100 | if (arr.Length == 1)//如果只有1字节说明该字符不是汉字,结束本次循环
101 | { result.Append(arrChar[j].ToString()); continue; }
102 | arr1 = (short)(arr[0]); //取字节1
103 | arr2 = (short)(arr[1]); //取字节2
104 | charCode = arr1 * 256 + arr2 - 65536;//计算汉字的编码
105 | if (charCode > -10254 || charCode < -20319) //如果不在汉字编码范围内则不改变
106 | {
107 | result.Append(arrChar[j]);
108 | }
109 | else
110 | { //根据汉字编码范围查找对应的拼音并保存到结果中
111 | //由于charCode的键不一定存在,所以要找比他更小的键上一个键
112 | if (!CodeCollections.ContainsKey(charCode))
113 | {
114 | for (int i = charCode; i <= 0; --i)
115 | {
116 | if (CodeCollections.ContainsKey(i))
117 | {
118 | result.Append(CodeCollections[i]);//(想办法截取出一组,而不是单个的)
119 | break;
120 | }
121 | }
122 | }
123 | else
124 | {
125 | result.Append(CodeCollections[charCode]);
126 |
127 | }
128 | }
129 | }
130 | return result.ToString();
131 | }
132 | }
133 | }
134 |
--------------------------------------------------------------------------------
/ConsoleApp/ChineseToPinyin.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 |
6 | namespace ConsoleApp
7 | {
8 | public class ChineseToPinyin
9 | {
10 |
11 | private static readonly Dictionary CodeCollections = new Dictionary {
12 | { -20319, "a" }, { -20317, "ai" }, { -20304, "an" }, { -20295, "ang" }, { -20292,
13 | "ao" }, { -20283, "ba" }, { -20265, "bai" },
14 | { -20257, "ban" }, { -20242, "bang" }, { -20230, "bao" }, { -20051, "bei" }, { -20036,
15 | "ben" }, { -20032, "beng" }, { -20026, "bi" }
16 | , { -20002, "bian" }, { -19990, "biao" }, { -19986, "bie" }, { -19982, "bin" }, { -19976,
17 | "bing" }, { -19805, "bo" },
18 | { -19784, "bu" }, { -19775, "ca" }, { -19774, "cai" }, { -19763, "can" }, { -19756, "cang" },
19 | { -19751, "cao" }, { -19746, "ce" },
20 | {-19741, "ceng"},{ -19739,"cha" },{-19728,"chai"},{-19725,"chan"}, { -19715, "chang" }, { -19540, "chao" },
21 | { -19531, "che" }, { -19525, "chen" }, { -19515, "cheng" }, { -19500, "chi" }, { -19484,
22 | "chong" }, { -19479, "chou" },{ -19467, "chu"}, { -19289, "chuai" }, { -19288, "chuan" }, { -19281, "chuang" }, { -19275,
23 | "chui" }, { -19270, "chun" },{ -19263, "chuo"}, { -19261, "ci" }, { -19249, "cong" }, { -19243, "cou" }, { -19242,
24 | "cu" }, { -19238, "cuan" },{ -19235, "cui" }, { -19227, "cun" }, { -19224, "cuo" }, { -19218, "da" }, { -19212, "dai" },
25 | { -19038, "dan" }, { -19023, "dang" },{ -19018, "dao" }, { -19006, "de" }, { -19003, "deng" }, { -18996, "di" }, { -18977,
26 | "dian" }, { -18961, "diao" }, { -18952, "die" }, { -18783, "ding" }, { -18774, "diu" }, { -18773, "dong" }, { -18763, "dou" }, { -18756,
27 | "du" }, { -18741, "duan" }, { -18735, "dui" }, { -18731, "dun" }, { -18722, "duo" }, { -18710, "e" }, { -18697, "en" },
28 | { -18696, "er" }, { -18526, "fa" },{ -18518, "fan" }, { -18501, "fang" }, { -18490, "fei" }, { -18478, "fen" }, { -18463,
29 | "feng" }, { -18448, "fo" }, { -18447, "fou" }, { -18446, "fu" }, { -18239, "ga"}, { -18237, "gai" }, { -18231, "gan" }, { -18220, "gang" },
30 | { -18211, "gao" }, { -18201, "ge" },{-18184,"gei"},{ -18183, "gen"},{-18181,"geng"},{-18012,"gong"
31 | },
32 | { -17997, "gou" }, { -17988, "gu" }, { -17970, "gua" }
33 | , { -17964, "guai" }, { -17961, "guan" }, { -17950, "guang" }, { -17947, "gui" }, { -17931,"gun" }, { -17928, "guo" },
34 | { -17922, "ha"}, { -17759, "hai" }, { -17752, "han"}, { -17733, "hang" }, { -17730, "hao" },
35 | { -17721, "he" }, { -17703, "hei" },{-17701, "hen" },{-17697,"heng"},{-17692,"hong"},{-17683,"hou"},
36 | { -17676, "hu" }, { -17496, "hua" },{ -17487, "huai" }, { -17482, "huan" }, { -17468, "huang" }, { -17454, "hui" }, { -17433,
37 | "hun" }, { -17427, "huo" },{ -17417, "ji" }, { -17202, "jia" }, { -17185, "jian" }, { -16983, "jiang" }, { -16970, "jiao" },
38 | { -16942, "jie" },{ -16915, "jin" }, { -16733, "jing" }, { -16708, "jiong" }, { -16706, "jiu" }, { -16689, "ju" },
39 | { -16664, "juan" },{ -16657, "jue" }, { -16647, "jun" }, { -16474, "ka" }, { -16470, "kai" }, { -16465, "kan" },
40 | { -16459, "kang" }, { -16452, "kao" },{-16448,"ke"},{-16433,"ken"},{ -16429,"keng"},{-16427,"kong"},{ -16423, "kou" }, { -16419, "ku" },
41 | { -16412, "kua" }, { -16407, "kuai" }, { -16403, "kuan" }, { -16401, "kuang" }, { -16393, "kui" }, { -16220,"kun" }, { -16216, "kuo" },
42 | { -16212, "la" }, { -16205, "lai" }, { -16202, "lan" }, { -16187, "lang" }, { -16180, "lao" },
43 | { -16171, "le" }, { -16169, "lei" },
44 | { -16158, "leng" }, { -16155, "li" }, { -15959, "lia" }, { -15958, "lian" }, { -15944, "liang" },{ -15933, "liao" },
45 | { -15920, "lie" }, { -15915, "lin" }, { -15903, "ling" }, { -15889, "liu" }, { -15878, "long" },
46 | { -15707, "lou" }, { -15701, "lu" }, { -15681, "lv" }, { -15667, "luan" }, { -15661, "lue" }, { -15659, "lun" }, { -15652,
47 | "luo" }, { -15640, "ma" }, { -15631, "mai" },
48 | { -15625,"man" }, {-15454,"mang"},{-15448,"mao"},{ -15436,"me"},{ -15435, "mei" }, { -15419, "men" },
49 | { -15416, "meng" }, { -15408, "mi" }, { -15394, "mian" }, { -15385, "miao" }, { -15377,"mie" }, { -15375, "min" },
50 | { -15369, "ming" }, { -15363, "miu" }, { -15362, "mo" }, { -15183, "mou" }, { -15180,"mu" }, { -15165, "na" }, { -15158, "nai" },
51 | { -15153, "nan" }, { -15150,"nang" }, { -15149, "nao" }, { -15144, "ne" }, { -15143, "nei" },
52 | { -15141, "nen" }, { -15140, "neng" }, { -15139, "ni" }, { -15128, "nian" }, { -15121, "niang" }, { -15119, "niao" }, { -15117,
53 | "nie" }, { -15110, "nin" },{ -15109, "ning" }, { -14941, "niu" }, { -14937, "nong" }, { -14933, "nu" }, { -14930, "nv" },
54 | { -14929, "nuan" }, { -14928, "nue" }
55 | , { -14926, "nuo" }, { -14922, "o" }, { -14921, "ou" }, { -14914, "pa" }, { -14908, "pai" },
56 | { -14902, "pan" }, { -14894, "pang" },
57 | { -14889, "pao" }, { -14882, "pei" }, { -14873, "pen" }, { -14871, "peng" }, { -14857,
58 | "pi" }, { -14678, "pian" },
59 | { -14674, "piao" }, { -14670, "pie" }, { -14668, "pin" }, { -14663, "ping" }, { -14654, "po" },
60 | { -14645, "pu" }, { -14630, "qi" },{ -14594,"qia"},{-14429,"qian"},{-14407,"qiang"},{-14399,"qiao"},
61 | { -14384, "qie" }, { -14379, "qin" },{ -14368, "qing"}, { -14355, "qiong" }, { -14353, "qiu" }, { -14345, "qu" }, { -14170,
62 | "quan" }, { -14159, "que" },{ -14151, "qun"}, { -14149, "ran" }, { -14145, "rang" }, { -14140, "rao"}, { -14137, "re" },
63 | { -14135, "ren" }, { -14125, "reng" }, { -14123, "ri" }, { -14122, "rong"}, { -14112, "rou" }, { -14109, "ru"}, { -14099, "ruan" },
64 | { -14097, "rui" }, { -14094, "run" }, { -14092, "ruo" }, { -14090,"sa" }, { -14087, "sai" }, { -14083, "san" }, { -13917, "sang" },
65 | { -13914, "sao" }, { -13910, "se" } , { -13907, "sen" }, { -13906, "seng" }, { -13905, "sha" }, { -13896, "shai" }, { -13894,
66 | "shan" }, { -13878, "shang" },{ -13870, "shao" }, { -13859, "she" }, { -13847, "shen" }, { -13831, "sheng" }, { -13658,
67 | "shi" }, { -13611, "shou" }, { -13601, "shu" }, { -13406, "shua" }, { -13404, "shuai" }, { -13400, "shuan" },
68 | { -13398, "shuang" }, { -13395, "shui" },{-13391,"shun"},{-13387,"shuo"},{-13383,"si"},{-13367,"song"},{ -13359, "sou" }, { -13356, "su" },
69 | { -13343, "suan" }, { -13340, "sui" }, { -13329, "sun" }, { -13326, "suo"
70 | }, { -13318, "ta" },
71 | { -13147, "tai" }, { -13138, "tan" },{ -13120, "tang" }, { -13107, "tao" }, { -13096, "te" }, { -13095, "teng"
72 | }, { -13091,"ti" }, { -13076, "tian" },{ -13068, "tiao" }, { -13063,"tie" }, { -13060,"ting" }, { -12888, "tong" }, { -12875, "tou" },
73 | { -12871, "tu" },{ -12860, "tuan" }, { -12858, "tui" }, { -12852, "tun" }, { -12849, "tuo" }, { -12838, "wa" },
74 | { -12831, "wai" }, { -12829, "wan" }, { -12812, "wang" }, { -12802, "wei" }, { -12607, "wen" }, { -12597, "weng" }, { -12594,
75 | "wo" }, { -12585, "wu" }, { -12556, "xi" }, { -12359, "xia" }, { -12346, "xian" }, { -12320, "xiang" }, { -12300, "xiao" }, { -12120,
76 | "xie" }, { -12099, "xin" },{ -12089, "xing" }, { -12074, "xiong" }, { -12067, "xiu" }, { -12058, "xu" }, { -12039,
77 | "xuan" }, { -11867, "xue" },{ -11861, "xun" }, { -11847, "ya" }, { -11831, "yan" }, { -11798, "yang" }, { -11781,
78 | "yao" }, { -11604, "ye" }, { -11589, "yi" },{ -11536, "yin" }, { -11358, "ying"
79 | }, { -11340, "yo" }, { -11339, "yong" }, { -11324,"you" }, { -11303, "yu" },
80 | { -11097, "yuan"}, { -11077, "yue" }, { -11067, "yun" }, { -11055, "za" }, { -11052, "zai" },
81 | { -11045, "zan" },{ -11041, "zang" }, { -11038, "zao" }, { -11024, "ze" }, { -11020, "zei" }, { -11019,
82 | "zen" }, { -11018, "zeng" },{ -11014, "zha" }, { -10838, "zhai" }, { -10832, "zhan" }, { -10815, "zhang" }, { -10800,
83 | "zhao" }, { -10790, "zhe" },{ -10780, "zhen" }, { -10764, "zheng" }, { -10587, "zhi" }, { -10544, "zhong" }, { -10533,
84 | "zhou" }, { -10519, "zhu" },{-10331, "zhua"},{-10329,"zhuai"},{-10328,"zhuan"},{-10322,"zhuang"},
85 | { -10315, "zhui" }, { -10309, "zhun" }, { -10307, "zhuo"}, { -10296, "zi" }, { -10281, "zong" }, { -10274, "zou" }, { -10270, "zu" },
86 | { -10262, "zuan" }, { -10260, "zui" }, { -10256, "zun" }, { -10254, "zuo" } };
87 |
88 | public static string ToPinYin(string txt)
89 | {
90 | txt = txt.Trim();
91 | byte[] arr = new byte[2]; //每个汉字为2字节
92 | StringBuilder result = new StringBuilder();//使用StringBuilder优化字符串连接
93 | int charCode = 0;
94 | int arr1 = 0;
95 | int arr2 = 0;
96 | char[] arrChar = txt.ToCharArray();
97 | for (int j = 0; j < arrChar.Length; j++) //遍历输入的字符
98 | {
99 | arr = System.Text.Encoding.Default.GetBytes(arrChar[j].ToString());//根据系统默认编码得到字节码
100 | if (arr.Length == 1)//如果只有1字节说明该字符不是汉字,结束本次循环
101 | {
102 | result.Append(arrChar[j].ToString());
103 | continue;
104 | }
105 | arr1 = (short)(arr[0]); //取字节1
106 | arr2 = (short)(arr[1]); //取字节2
107 | charCode = arr1 * 256 + arr2 - 65536;//计算汉字的编码
108 | if (charCode > -10254 || charCode < -20319) //如果不在汉字编码范围内则不改变
109 | {
110 | result.Append(arrChar[j]);
111 | }
112 | else//根据汉字编码范围查找对应的拼音并保存到结果中
113 | {
114 | //由于charCode的键不一定存在,所以要找比他更小的键上一个键
115 | if (!CodeCollections.ContainsKey(charCode))
116 | {
117 | for (int i = charCode; i <= 0; --i)
118 | {
119 | if (CodeCollections.ContainsKey(i))
120 | {
121 | //这个怎么处理?让$$名字**
122 | result.Append(CodeCollections[i]);
123 | break;
124 | }
125 | }
126 | }
127 | else
128 | {
129 | result.Append(CodeCollections[charCode]);
130 | }
131 | }
132 | }
133 | return result.ToString();
134 | }
135 | }
136 | }
137 |
--------------------------------------------------------------------------------
/EtermSimulatorTest/BaseRespTest.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using Microsoft.VisualStudio.TestTools.UnitTesting;
3 | using System;
4 | using System.Collections.Generic;
5 | using ETermSimulator;
6 |
7 | namespace ETermSimulatorTest
8 | {
9 | [TestClass]
10 | public class BaseRespTest
11 | {
12 | #region SplitSegments
13 | [TestMethod]
14 | public void SplitSegments_正常()//解析加法运算结果=2.0000
15 | {
16 | var po = new PrivateObject(new BaseResp(null));
17 | byte[] arg = new byte[] { 1, 0, 0, 40, 0, 0, 0, 1, 40, 81, 112, 2, 27, 11, 33, 32, 15, 27, 77, 32, 32, 32, 32, 32, 32, 61, 32, 50, 46, 48, 48, 48, 48, 32, 32, 13, 30, 27, 98, 3 };
18 | var r = (List)po.Invoke("SplitSegments", new object[] { arg });
19 | Assert.AreEqual(r.Count, 3);
20 | Assert.AreEqual(string.Join(",", r[0]), string.Join(",", new byte[] { 27, 11, 33, 32, 15 }));
21 | Assert.AreEqual(string.Join(",", r[1]), string.Join(",", new byte[] { 27, 77, 32, 32, 32, 32, 32, 32, 61, 32, 50, 46, 48, 48, 48, 48, 32, 32, 13, 30 }));
22 | Assert.AreEqual(string.Join(",", r[2]), string.Join(",", new byte[] { 27, 98 }));
23 |
24 | }
25 |
26 | [TestMethod]
27 | public void SplitSegements_AV()
28 | {
29 | var po = new PrivateObject(new BaseResp(null));
30 | byte[] arg = new byte[] { 1, 0, 3, 77, 0, 0, 0, 1, 40, 81, 112, 2, 27, 11, 33, 32, 15, 27, 77, 32, 50, 53, 83, 69, 80, 40, 87, 69, 68, 41, 32, 83, 72, 65, 67, 71, 79, 32, 32, 13, 49, 32, 32, 32, 77, 85, 53, 51, 57, 53, 32, 32, 83, 72, 65, 67, 71, 79, 32, 48, 56, 48, 53, 32, 32, 32, 48, 57, 52, 53, 32, 32, 32, 51, 50, 51, 32, 48, 94, 83, 32, 32, 32, 32, 32, 32, 32, 32, 32, 69, 70, 65, 32, 80, 81, 32, 65, 83, 32, 89, 65, 32, 66, 81, 60, 84, 50, 45, 45, 62, 32, 32, 13, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 77, 81, 32, 69, 81, 32, 72, 81, 32, 75, 81, 32, 76, 81, 32, 78, 81, 32, 82, 81, 32, 83, 81, 32, 86, 81, 32, 84, 81, 32, 71, 81, 32, 90, 81, 32, 81, 81, 32, 85, 81, 32, 88, 81, 32, 13, 50, 32, 32, 32, 77, 85, 53, 52, 48, 32, 32, 32, 80, 86, 71, 67, 71, 79, 32, 48, 56, 52, 53, 32, 32, 32, 49, 48, 52, 48, 32, 32, 32, 51, 50, 48, 32, 48, 94, 83, 32, 32, 32, 32, 32, 32, 32, 32, 32, 69, 74, 54, 32, 67, 81, 32, 68, 81, 32, 73, 81, 32, 79, 81, 60, 84, 49, 45, 45, 62, 32, 32, 13, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 89, 65, 32, 66, 81, 32, 77, 81, 32, 69, 81, 32, 72, 81, 32, 75, 81, 32, 76, 81, 32, 78, 81, 32, 82, 81, 32, 83, 81, 32, 86, 81, 32, 84, 81, 32, 71, 81, 32, 90, 81, 32, 81, 81, 32, 85, 81, 32, 88, 83, 32, 32, 32, 13, 51, 32, 32, 42, 77, 85, 57, 51, 50, 55, 32, 32, 83, 72, 65, 67, 71, 79, 32, 48, 57, 53, 48, 32, 32, 32, 49, 49, 52, 48, 32, 32, 32, 55, 51, 56, 32, 48, 94, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 69, 70, 54, 32, 80, 81, 32, 65, 49, 32, 89, 52, 32, 66, 81, 60, 84, 50, 45, 45, 62, 32, 32, 13, 32, 32, 32, 32, 70, 77, 57, 51, 50, 55, 32, 32, 32, 32, 32, 32, 32, 32, 32, 77, 81, 32, 69, 81, 32, 72, 81, 32, 75, 81, 32, 76, 81, 32, 78, 81, 32, 82, 81, 32, 83, 81, 32, 86, 81, 32, 84, 81, 32, 71, 81, 32, 90, 81, 32, 81, 81, 32, 85, 81, 32, 88, 81, 32, 13, 52, 43, 32, 32, 70, 77, 57, 51, 50, 55, 32, 32, 83, 72, 65, 67, 71, 79, 32, 48, 57, 53, 48, 32, 32, 32, 49, 49, 52, 48, 32, 32, 32, 55, 51, 56, 32, 48, 94, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 69, 70, 54, 32, 80, 81, 32, 65, 49, 32, 89, 52, 32, 66, 81, 60, 84, 50, 45, 45, 62, 32, 32, 13, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 77, 81, 32, 69, 81, 32, 72, 81, 32, 75, 81, 32, 76, 81, 32, 78, 81, 32, 82, 81, 32, 83, 81, 32, 86, 81, 32, 84, 81, 32, 71, 81, 32, 90, 81, 32, 81, 81, 32, 85, 81, 32, 88, 81, 32, 13, 42, 42, 32, 32, 42, 42, 32, 32, 67, 90, 45, 83, 72, 65, 32, 32, 67, 72, 69, 67, 75, 32, 73, 78, 32, 52, 53, 32, 77, 73, 78, 85, 84, 69, 83, 32, 66, 69, 70, 79, 82, 69, 32, 68, 69, 80, 65, 82, 84, 85, 82, 69, 32, 32, 13, 42, 42, 32, 32, 65, 108, 108, 32, 115, 99, 104, 101, 100, 117, 108, 101, 100, 32, 77, 85, 32, 111, 114, 32, 70, 77, 32, 102, 108, 105, 103, 104, 116, 115, 32, 111, 112, 101, 114, 97, 116, 101, 100, 32, 98, 121, 32, 77, 85, 32, 111, 114, 32, 70, 77, 32, 97, 114, 101, 32, 34, 69, 97, 115, 116, 101, 114, 110, 32, 69, 120, 112, 114, 101, 115, 115, 34, 32, 32, 32, 42, 42, 32, 32, 72, 79, 32, 70, 76, 73, 71, 72, 84, 32, 68, 69, 80, 65, 82, 84, 85, 82, 69, 47, 65, 82, 82, 73, 86, 65, 76, 32, 65, 84, 32, 80, 86, 71, 32, 84, 50, 32, 70, 82, 79, 77, 32, 49, 56, 68, 69, 67, 49, 50, 44, 32, 13, 42, 42, 32, 32, 72, 79, 32, 80, 86, 71, 32, 67, 72, 69, 67, 75, 32, 73, 78, 32, 52, 53, 32, 77, 73, 78, 85, 84, 69, 83, 32, 66, 69, 70, 79, 82, 69, 32, 68, 69, 80, 65, 82, 84, 85, 82, 69, 32, 13, 30, 27, 98, 3 };
31 | var r = (List)po.Invoke("SplitSegments", new object[] { arg });
32 | Assert.AreEqual(r.Count, 3);
33 | Assert.AreEqual(string.Join(",", r[0]), string.Join(",", new byte[] { 27, 11, 33, 32, 15 }));
34 | Assert.AreEqual(string.Join(",", r[1]), string.Join(",", new byte[] { 27, 77, 32, 50, 53, 83, 69, 80, 40, 87, 69, 68, 41, 32, 83, 72, 65, 67, 71, 79, 32, 32, 13, 49, 32, 32, 32, 77, 85, 53, 51, 57, 53, 32, 32, 83, 72, 65, 67, 71, 79, 32, 48, 56, 48, 53, 32, 32, 32, 48, 57, 52, 53, 32, 32, 32, 51, 50, 51, 32, 48, 94, 83, 32, 32, 32, 32, 32, 32, 32, 32, 32, 69, 70, 65, 32, 80, 81, 32, 65, 83, 32, 89, 65, 32, 66, 81, 60, 84, 50, 45, 45, 62, 32, 32, 13, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 77, 81, 32, 69, 81, 32, 72, 81, 32, 75, 81, 32, 76, 81, 32, 78, 81, 32, 82, 81, 32, 83, 81, 32, 86, 81, 32, 84, 81, 32, 71, 81, 32, 90, 81, 32, 81, 81, 32, 85, 81, 32, 88, 81, 32, 13, 50, 32, 32, 32, 77, 85, 53, 52, 48, 32, 32, 32, 80, 86, 71, 67, 71, 79, 32, 48, 56, 52, 53, 32, 32, 32, 49, 48, 52, 48, 32, 32, 32, 51, 50, 48, 32, 48, 94, 83, 32, 32, 32, 32, 32, 32, 32, 32, 32, 69, 74, 54, 32, 67, 81, 32, 68, 81, 32, 73, 81, 32, 79, 81, 60, 84, 49, 45, 45, 62, 32, 32, 13, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 89, 65, 32, 66, 81, 32, 77, 81, 32, 69, 81, 32, 72, 81, 32, 75, 81, 32, 76, 81, 32, 78, 81, 32, 82, 81, 32, 83, 81, 32, 86, 81, 32, 84, 81, 32, 71, 81, 32, 90, 81, 32, 81, 81, 32, 85, 81, 32, 88, 83, 32, 32, 32, 13, 51, 32, 32, 42, 77, 85, 57, 51, 50, 55, 32, 32, 83, 72, 65, 67, 71, 79, 32, 48, 57, 53, 48, 32, 32, 32, 49, 49, 52, 48, 32, 32, 32, 55, 51, 56, 32, 48, 94, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 69, 70, 54, 32, 80, 81, 32, 65, 49, 32, 89, 52, 32, 66, 81, 60, 84, 50, 45, 45, 62, 32, 32, 13, 32, 32, 32, 32, 70, 77, 57, 51, 50, 55, 32, 32, 32, 32, 32, 32, 32, 32, 32, 77, 81, 32, 69, 81, 32, 72, 81, 32, 75, 81, 32, 76, 81, 32, 78, 81, 32, 82, 81, 32, 83, 81, 32, 86, 81, 32, 84, 81, 32, 71, 81, 32, 90, 81, 32, 81, 81, 32, 85, 81, 32, 88, 81, 32, 13, 52, 43, 32, 32, 70, 77, 57, 51, 50, 55, 32, 32, 83, 72, 65, 67, 71, 79, 32, 48, 57, 53, 48, 32, 32, 32, 49, 49, 52, 48, 32, 32, 32, 55, 51, 56, 32, 48, 94, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 69, 70, 54, 32, 80, 81, 32, 65, 49, 32, 89, 52, 32, 66, 81, 60, 84, 50, 45, 45, 62, 32, 32, 13, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 77, 81, 32, 69, 81, 32, 72, 81, 32, 75, 81, 32, 76, 81, 32, 78, 81, 32, 82, 81, 32, 83, 81, 32, 86, 81, 32, 84, 81, 32, 71, 81, 32, 90, 81, 32, 81, 81, 32, 85, 81, 32, 88, 81, 32, 13, 42, 42, 32, 32, 42, 42, 32, 32, 67, 90, 45, 83, 72, 65, 32, 32, 67, 72, 69, 67, 75, 32, 73, 78, 32, 52, 53, 32, 77, 73, 78, 85, 84, 69, 83, 32, 66, 69, 70, 79, 82, 69, 32, 68, 69, 80, 65, 82, 84, 85, 82, 69, 32, 32, 13, 42, 42, 32, 32, 65, 108, 108, 32, 115, 99, 104, 101, 100, 117, 108, 101, 100, 32, 77, 85, 32, 111, 114, 32, 70, 77, 32, 102, 108, 105, 103, 104, 116, 115, 32, 111, 112, 101, 114, 97, 116, 101, 100, 32, 98, 121, 32, 77, 85, 32, 111, 114, 32, 70, 77, 32, 97, 114, 101, 32, 34, 69, 97, 115, 116, 101, 114, 110, 32, 69, 120, 112, 114, 101, 115, 115, 34, 32, 32, 32, 42, 42, 32, 32, 72, 79, 32, 70, 76, 73, 71, 72, 84, 32, 68, 69, 80, 65, 82, 84, 85, 82, 69, 47, 65, 82, 82, 73, 86, 65, 76, 32, 65, 84, 32, 80, 86, 71, 32, 84, 50, 32, 70, 82, 79, 77, 32, 49, 56, 68, 69, 67, 49, 50, 44, 32, 13, 42, 42, 32, 32, 72, 79, 32, 80, 86, 71, 32, 67, 72, 69, 67, 75, 32, 73, 78, 32, 52, 53, 32, 77, 73, 78, 85, 84, 69, 83, 32, 66, 69, 70, 79, 82, 69, 32, 68, 69, 80, 65, 82, 84, 85, 82, 69, 32, 13, 30 }));
35 | Assert.AreEqual(string.Join(",", r[2]), string.Join(",", new byte[] { 27, 98 }));
36 | }
37 | #endregion
38 |
39 | #region DealFuncGBKFlag
40 | [TestMethod]
41 | public void DealFuncGBKFlag_GB2312SpecialCharacter()////上海地区天气预报 “报” is a special character!
42 | {
43 | var po = new PrivateObject(new BaseResp(null));
44 | byte[] arg = new byte[] { 27,14,73,79,58,35,53,88,71,120,76,108,70,120,84,36,35,40};
45 | var r = (string)po.Invoke("DealFuncGBKFlag", new object[] { arg });
46 | Assert.AreEqual(r, "上海地区天气预报");
47 | }
48 | [TestMethod]
49 | public void DealFuncGBKFlag_GB2312NormalCharacter()//多云转中雨
50 | {
51 | var po = new PrivateObject(new BaseResp(null));
52 | byte[] arg = new byte[] { 27,14,54,96,84,70,87,42,86,80,83,106};
53 | var r = (string)po.Invoke("DealFuncGBKFlag", new object[] { arg });
54 | Assert.AreEqual(r, "多云转中雨");
55 | }
56 | [TestMethod]
57 | public void DealFuncGBKFlag_GBKInfrequentlyUsedCharacter()//朱镕基 “镕” is not a frequently used character
58 | {
59 | var po = new PrivateObject(new BaseResp(null));
60 | byte[] arg = new byte[] { 27,14,86, 108, 120, 77, 100, 69, 59, 121 };
61 | var r = (string)po.Invoke("DealFuncGBKFlag", new object[] { arg });
62 | Assert.AreEqual(r, "朱镕基");
63 | }
64 | #endregion
65 |
66 | #region DealFuncPointFlag
67 |
68 | #endregion
69 |
70 | #region DealFuncASCIIFlag
71 | [TestMethod]
72 | public void DealFuncASCIIFlag_Test()
73 | {
74 | var po = new PrivateObject(new BaseResp(null));
75 | byte[] arg = new byte[] {27,15,32,51,50,67,40,57,48,70,41,44,32};
76 | var r = (string)po.Invoke("DealFuncASCIIFlag", new object[] { arg });
77 | Assert.AreEqual(r, " 32C(90F), ");
78 | }
79 | #endregion
80 |
81 | #region BaseResp
82 | [TestMethod]
83 | public void BaseResp_Test()
84 | {
85 | byte[] arg = new byte[] { 1, 0, 1, 194, 0, 0, 0, 1, 40, 81, 112, 2, 27, 11, 49, 32, 15, 27, 77, 27, 14, 73, 79, 58, 35, 53, 88, 71, 120, 76, 108, 70, 120, 84, 36, 35, 40, 27, 15, 58, 32, 32, 32, 13, 32, 32, 32, 32, 32, 57, 27, 14, 84, 66, 27, 15, 50, 52, 27, 14, 72, 85, 27, 15, 32 ,27,98,13,30,27,98,3};
86 | var r = new BaseResp(arg);
87 | var except = "上海地区天气预报: \r 9月24日 ";
88 | Assert.AreEqual(except, r.Text);
89 | }
90 | #endregion
91 |
92 | }
93 | }
94 |
--------------------------------------------------------------------------------
/SocketClient/EncodeMachine.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 | using SocketClient;
6 |
7 |
8 | namespace SocketClient
9 | {
10 | public class EncodeMachine
11 | {
12 | //1.登陆编码
13 | //2.指令登陆
14 | #region 登陆编码
15 | public byte[] LogEncode(string userName,string password,string strworkport,string strport )
16 | {
17 | string fixstr = "3847010";
18 | byte[] LogSend = new byte[162];
19 | byte[] user = System.Text.Encoding.Default.GetBytes(userName);
20 | byte[] pass = System.Text.Encoding.Default.GetBytes(password);
21 | byte[] port = System.Text.Encoding.Default.GetBytes(strport);//这个后
22 | byte[] workport = System.Text.Encoding.Default.GetBytes(strworkport);//这个先
23 | byte[] fixedstr = System.Text.Encoding.Default.GetBytes(fixstr);//
24 | for (int i = 0; i < 162; i++)
25 | {
26 | if (i == 0) LogSend[i] = 1;
27 | if (i == 1) LogSend[i] = 162;
28 | if (i > 1 && i < 2 + user.Length) //填充密码
29 | {
30 | LogSend[i] = user[i - 2];
31 | }
32 | if (i >= user.Length + 2 && i < 2 + user.Length + 8) //填充8个0
33 | {
34 | LogSend[i] = 0;
35 | }
36 | if (i >= 10 + user.Length && i < 10 + user.Length + pass.Length)//填充密码
37 | {
38 | LogSend[i] = pass[i - user.Length - 10];
39 | }
40 | if (i >= 10 + user.Length + pass.Length && i < 35 + user.Length + pass.Length) //填充后面的25个0
41 | {
42 | LogSend[i] = 0;
43 | }
44 | if (i >= 35 + user.Length + pass.Length && i < 35 + user.Length + pass.Length + workport.Length)//填充端口号前面的
45 | {
46 | LogSend[i] = workport[i - 35 - user.Length - pass.Length];
47 | }
48 | if (i >= 35 + user.Length + pass.Length + workport.Length && i < 35 + user.Length + pass.Length + workport.Length + port.Length) //填充端口号
49 | {
50 | LogSend[i] = port[i - 35 - user.Length - pass.Length - workport.Length];
51 | }
52 | if (i >= 35 + user.Length + pass.Length + workport.Length + port.Length && i < 37 + user.Length + pass.Length + workport.Length + port.Length) //后面添加两个空格
53 | {
54 | LogSend[i] = 32;
55 | }
56 | if (i >= 37 + user.Length + pass.Length + workport.Length + port.Length && i < fixedstr.Length + 37 + user.Length + pass.Length + workport.Length + port.Length)//添加3847010
57 | {
58 | LogSend[i] = fixedstr[i - 37 - user.Length - pass.Length - workport.Length - port.Length];
59 | }//还要填写6个0
60 | if (i >= fixedstr.Length + 37 + user.Length + pass.Length + workport.Length + port.Length && i < fixedstr.Length + 44 + user.Length + pass.Length + workport.Length + port.Length)
61 | {
62 | if (i == fixedstr.Length + 37 + user.Length + pass.Length + workport.Length + port.Length) LogSend[i] = 0;
63 | else LogSend[i] = 48;
64 | }
65 | if (i >= fixedstr.Length + 44 + user.Length + pass.Length + workport.Length + port.Length && i < 162)
66 | {
67 | LogSend[i] = 0;
68 | }
69 | }
70 | return LogSend;
71 | }
72 | #endregion
73 |
74 | #region 发送指令编码
75 | //string userid//表示服务器返回回来的客户端应该:比如51,81//strinstruct指的是命令
76 | public byte[] MakeInstruct(byte[] userid, string strinstruct)
77 | {
78 | byte[] order = MiddleToCode(strinstruct);
79 | int leng = order.Length + 21;
80 | byte[] instruct = new byte[leng];
81 | instruct = StartAndEnd(instruct, leng, userid);
82 | for (int i = 19; i < leng-2; i++)
83 | {
84 | instruct[i] = order[i - 19];
85 | }
86 | return instruct;
87 | }
88 | #region 命令的开头和结尾
89 | private byte[] StartAndEnd(byte[] instruct,int length,byte[] userid)
90 | {
91 | instruct[0] = 1;
92 | instruct[1] = 0;
93 | instruct[2] = 0;
94 | instruct[3] = (byte)length;
95 | instruct[4] = 0;
96 | instruct[5] = 0;
97 | instruct[6] = 0;
98 | instruct[7] = 1;
99 | instruct[8] = userid[0];
100 | instruct[9] = userid[1];
101 | instruct[10] = 112;
102 | instruct[11] = 2;
103 | instruct[12] = 27;
104 | instruct[13] = 11;
105 | instruct[14] = 44;//光标的位置,随便写吧
106 | instruct[15] = 32;//同上
107 | instruct[16] = 0;
108 | instruct[17] = 15;
109 | instruct[18] = 30;//表示内容的开始
110 | instruct[length - 2] = 32;
111 | instruct[length - 1] = 3;
112 | return instruct;
113 | }
114 | #endregion
115 |
116 | #region 汉字编码
117 | public static byte[] ChineseToCode(string name)
118 | {
119 | string pinyin = ChineseToPinyin.ToPinYin(name);
120 | byte[] pinbyte = Encoding.ASCII.GetBytes(pinyin);
121 | byte[] middle = Encoding.GetEncoding("gb2312").GetBytes(name);
122 | byte[] chinesebyte = new byte[middle.Length];
123 | byte[] chinesecode = new byte[pinbyte.Length + middle.Length + 4];
124 | for (int i = 0; i < middle.Length; i++)
125 | {
126 | chinesebyte[i] = (byte)(middle[i] - 128);
127 | }
128 | for (int i = 0; i < pinbyte.Length + 2; i++)
129 | {
130 | if (i == pinbyte.Length) chinesecode[i] = 27;
131 | else if (i == pinbyte.Length + 1) chinesecode[i] = 14;
132 | else
133 | chinesecode[i] = pinbyte[i];
134 | }
135 | for (int j = pinbyte.Length + 2; j < pinbyte.Length + chinesebyte.Length + 4; j++)
136 | {
137 | if (j == pinbyte.Length + chinesebyte.Length + 2) chinesecode[j] = 27;
138 | else if (j == pinbyte.Length + chinesebyte.Length + 3) chinesecode[j] = 15;
139 | else
140 | chinesecode[j] = chinesebyte[j - pinbyte.Length - 2];
141 | }
142 | return chinesecode;
143 | }
144 | #endregion
145 |
146 | #region 中间部分的命令编码(其中是可以有字母加汉字的)
147 | public byte[] MiddleToCode(string str)
148 | {
149 | System.Text.RegularExpressions.Regex regex = new System.Text.RegularExpressions.Regex(@"(?[\u4E00-\u9FA5]{2,9})");
150 | var matches = regex.Matches(str);
151 | List strChinese = new List();
152 | List location = new List();//起始位置
153 | List strPin = new List(); //表示汉字转拼音
154 | foreach(System.Text.RegularExpressions.Match item in matches)
155 | {
156 | string fir = item.Groups["UserName"].Value;
157 | int first = str.IndexOf(fir);
158 | location.Add(first);//记录这个名字的地址
159 | int strlenth = fir.Length;
160 | location.Add(first+strlenth);
161 | strChinese.Add(fir);
162 | }//找出有汉字的部分
163 |
164 | List subStr = new List();
165 | if (location.Count() > 0)//表示有汉字
166 | {
167 | string sec = str.Substring(0, location[0]);
168 | subStr.Add(sec);
169 | for (int i = 0; i < location.Count; i ++)
170 | {
171 | if (i + 1 >= location.Count)
172 | {
173 | if (location[i]== str.Length) break;
174 | else
175 | {
176 | string stt = str.Substring(location[i]);
177 | subStr.Add(stt);
178 | }
179 | }
180 | else
181 | {
182 | string stt = str.Substring(location[i], location[i + 1] - location[i]);//
183 | subStr.Add(stt);
184 | }
185 | }
186 | }
187 | else //表示没有汉字
188 | {
189 | subStr.Add(str);
190 | }
191 | int m=0;
192 | List list = new List();
193 | List leng = new List();
194 | for (int i = 0; i < subStr.Count(); i++)
195 | {
196 | if (strChinese.Count() > 0)//表示有汉字
197 | {
198 | if (m >= strChinese.Count) m--;
199 | if (subStr[i] != strChinese[m])
200 | {
201 | byte[] first = Encoding.ASCII.GetBytes(subStr[i]);
202 | int count = first.Length;
203 | list.Add(first);
204 | leng.Add(count);
205 | }
206 | else //汉字
207 | {
208 | byte[] first = ChineseToCode(strChinese[m]);
209 | m++;
210 | int count = first.Length;
211 | list.Add(first);
212 | leng.Add(count);
213 | }
214 | }
215 | else //表示没有汉字
216 | {
217 | byte[] first = Encoding.ASCII.GetBytes(subStr[i]);
218 | int count = first.Length;
219 | list.Add(first);
220 | leng.Add(count);
221 | }
222 |
223 | }//进行字符串转字节码
224 |
225 | int allleng = 0;
226 | foreach(var item in leng)
227 | {
228 | allleng += item;
229 | }//算出最终要申请的存储空间
230 |
231 | byte[] rtn=new byte[allleng];
232 | int t = 0;
233 | foreach(var item in list)
234 | {
235 | for (int i = 0; i < item.Length;i++ )
236 | {
237 | rtn[t] = item[i];
238 | t++;
239 | }
240 | }
241 | return rtn;
242 | }
243 | #endregion
244 | #endregion
245 | }
246 | }
247 |
--------------------------------------------------------------------------------
/ETermSimulator/EncodeMachine.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 |
6 |
7 | namespace ETermSimulator
8 | {
9 | public class EncodeMachine
10 | {
11 | //1.登陆编码
12 | //2.指令登陆
13 | #region 登陆编码
14 | public byte[] LogEncode(string user,string password,string mac,string ip,string version )
15 | {
16 | byte[] headArray = new byte[2] { 1, 0 };//instruction head,include head and length
17 | byte[] userArray = new byte[16];//eTerm Username
18 | Encoding.ASCII.GetBytes(user).CopyTo(userArray, 0);
19 | byte[] passwordArray = new byte[32];//eTerm password
20 | Encoding.ASCII.GetBytes(password).CopyTo(passwordArray, 0);
21 | byte[] macArray = new byte[12];//eTerm client mac address
22 | Encoding.ASCII.GetBytes(mac).CopyTo(macArray, 0);
23 | byte[] ipArray = new byte[15];//eTerm client ip address
24 | Encoding.ASCII.GetBytes(ip).CopyTo(ipArray, 0);
25 | byte[] versionArray = new byte[8];//eTerm Version
26 | Encoding.ASCII.GetBytes(version).CopyTo(versionArray, 0);
27 | byte[] unKnownArray = new byte[77];//don't know
28 | Encoding.ASCII.GetBytes("000000").CopyTo(unKnownArray, 0);
29 |
30 | var rtnValue = headArray.Concat(userArray).Concat(passwordArray).Concat(macArray).Concat(ipArray).Concat(versionArray).Concat(unKnownArray).ToArray();
31 | rtnValue[1] = (byte)rtnValue.Length;//update the instruction length
32 | return rtnValue;
33 |
34 |
35 | //string fixstr = "3847010";
36 | //byte[] LogSend = new byte[162];
37 | //byte[] user = System.Text.Encoding.Default.GetBytes(userName);
38 | //byte[] pass = System.Text.Encoding.Default.GetBytes(password);
39 | //byte[] port = System.Text.Encoding.Default.GetBytes(strport);//这个后
40 | //byte[] workport = System.Text.Encoding.Default.GetBytes(strworkport);//这个先
41 | //byte[] fixedstr = System.Text.Encoding.Default.GetBytes(fixstr);//
42 | //user.Concat(
43 | //for (int i = 0; i < 162; i++)
44 | //{
45 | // if (i == 0) LogSend[i] = 1;
46 | // if (i == 1) LogSend[i] = 162;
47 | // if (i > 1 && i < 2 + user.Length) //填充密码
48 | // {
49 | // LogSend[i] = user[i - 2];
50 | // }
51 | // if (i >= user.Length + 2 && i < 2 + user.Length + 8) //填充8个0
52 | // {
53 | // LogSend[i] = 0;
54 | // }
55 | // if (i >= 10 + user.Length && i < 10 + user.Length + pass.Length)//填充密码
56 | // {
57 | // LogSend[i] = pass[i - user.Length - 10];
58 | // }
59 | // if (i >= 10 + user.Length + pass.Length && i < 35 + user.Length + pass.Length) //填充后面的25个0
60 | // {
61 | // LogSend[i] = 0;
62 | // }
63 | // if (i >= 35 + user.Length + pass.Length && i < 35 + user.Length + pass.Length + workport.Length)//填充端口号前面的
64 | // {
65 | // LogSend[i] = workport[i - 35 - user.Length - pass.Length];
66 | // }
67 | // if (i >= 35 + user.Length + pass.Length + workport.Length && i < 35 + user.Length + pass.Length + workport.Length + port.Length) //填充端口号
68 | // {
69 | // LogSend[i] = port[i - 35 - user.Length - pass.Length - workport.Length];
70 | // }
71 | // if (i >= 35 + user.Length + pass.Length + workport.Length + port.Length && i < 37 + user.Length + pass.Length + workport.Length + port.Length) //后面添加两个空格
72 | // {
73 | // LogSend[i] = 32;
74 | // }
75 | // if (i >= 37 + user.Length + pass.Length + workport.Length + port.Length && i < fixedstr.Length + 37 + user.Length + pass.Length + workport.Length + port.Length)//添加3847010
76 | // {
77 | // LogSend[i] = fixedstr[i - 37 - user.Length - pass.Length - workport.Length - port.Length];
78 | // }//还要填写6个0
79 | // if (i >= fixedstr.Length + 37 + user.Length + pass.Length + workport.Length + port.Length && i < fixedstr.Length + 44 + user.Length + pass.Length + workport.Length + port.Length)
80 | // {
81 | // if (i == fixedstr.Length + 37 + user.Length + pass.Length + workport.Length + port.Length) LogSend[i] = 0;
82 | // else LogSend[i] = 48;
83 | // }
84 | // if (i >= fixedstr.Length + 44 + user.Length + pass.Length + workport.Length + port.Length && i < 162)
85 | // {
86 | // LogSend[i] = 0;
87 | // }
88 | //}
89 | //return LogSend;
90 | }
91 | #endregion
92 |
93 | #region 发送指令编码
94 | //string userid//表示服务器返回回来的客户端应该:比如51,81//strinstruct指的是命令
95 | public byte[] MakeInstruct(byte[] userid, string strinstruct)
96 | {
97 | byte[] order = MiddleToCode(strinstruct);
98 | int leng = order.Length + 21;
99 | byte[] instruct = new byte[leng];
100 | instruct = StartAndEnd(instruct, leng, userid);
101 | for (int i = 19; i < leng-2; i++)
102 | {
103 | instruct[i] = order[i - 19];
104 | }
105 | return instruct;
106 | }
107 | #region 命令的开头和结尾
108 | private byte[] StartAndEnd(byte[] instruct,int length,byte[] userid)
109 | {
110 | instruct[0] = 1;
111 | instruct[1] = 0;
112 | instruct[2] = 0;
113 | instruct[3] = (byte)length;
114 | instruct[4] = 0;
115 | instruct[5] = 0;
116 | instruct[6] = 0;
117 | instruct[7] = 1;
118 | instruct[8] = userid[0];
119 | instruct[9] = userid[1];
120 | instruct[10] = 112;
121 | instruct[11] = 2;
122 | instruct[12] = 27;
123 | instruct[13] = 11;
124 | instruct[14] = 44;//光标的位置,随便写吧
125 | instruct[15] = 32;//同上
126 | instruct[16] = 0;
127 | instruct[17] = 15;
128 | instruct[18] = 30;//表示内容的开始
129 | instruct[length - 2] = 32;
130 | instruct[length - 1] = 3;
131 | return instruct;
132 | }
133 | #endregion
134 |
135 | #region 汉字编码
136 | public static byte[] ChineseToCode(string name)
137 | {
138 | string pinyin = ChineseToPinyin.ToPinYin(name);
139 | byte[] pinbyte = Encoding.ASCII.GetBytes(pinyin);
140 | byte[] middle = Encoding.GetEncoding("gb2312").GetBytes(name);
141 | byte[] chinesebyte = new byte[middle.Length];
142 | byte[] chinesecode = new byte[pinbyte.Length + middle.Length + 4];
143 | for (int i = 0; i < middle.Length; i++)
144 | {
145 | chinesebyte[i] = (byte)(middle[i] - 128);
146 | }
147 | for (int i = 0; i < pinbyte.Length + 2; i++)
148 | {
149 | if (i == pinbyte.Length) chinesecode[i] = 27;
150 | else if (i == pinbyte.Length + 1) chinesecode[i] = 14;
151 | else
152 | chinesecode[i] = pinbyte[i];
153 | }
154 | for (int j = pinbyte.Length + 2; j < pinbyte.Length + chinesebyte.Length + 4; j++)
155 | {
156 | if (j == pinbyte.Length + chinesebyte.Length + 2) chinesecode[j] = 27;
157 | else if (j == pinbyte.Length + chinesebyte.Length + 3) chinesecode[j] = 15;
158 | else
159 | chinesecode[j] = chinesebyte[j - pinbyte.Length - 2];
160 | }
161 | return chinesecode;
162 | }
163 | #endregion
164 |
165 | #region 中间部分的命令编码(其中是可以有字母加汉字的)
166 | public byte[] MiddleToCode(string str)
167 | {
168 | System.Text.RegularExpressions.Regex regex = new System.Text.RegularExpressions.Regex(@"(?[\u4E00-\u9FA5]{2,9})");
169 | var matches = regex.Matches(str);
170 | List strChinese = new List();
171 | List location = new List();//起始位置
172 | List strPin = new List(); //表示汉字转拼音
173 | foreach(System.Text.RegularExpressions.Match item in matches)
174 | {
175 | string fir = item.Groups["UserName"].Value;
176 | int first = str.IndexOf(fir);
177 | location.Add(first);//记录这个名字的地址
178 | int strlenth = fir.Length;
179 | location.Add(first+strlenth);
180 | strChinese.Add(fir);
181 | }//找出有汉字的部分
182 |
183 | List subStr = new List();
184 | if (location.Count() > 0)//表示有汉字
185 | {
186 | string sec = str.Substring(0, location[0]);
187 | subStr.Add(sec);
188 | for (int i = 0; i < location.Count; i ++)
189 | {
190 | if (i + 1 >= location.Count)
191 | {
192 | if (location[i]== str.Length) break;
193 | else
194 | {
195 | string stt = str.Substring(location[i]);
196 | subStr.Add(stt);
197 | }
198 | }
199 | else
200 | {
201 | string stt = str.Substring(location[i], location[i + 1] - location[i]);//
202 | subStr.Add(stt);
203 | }
204 | }
205 | }
206 | else //表示没有汉字
207 | {
208 | subStr.Add(str);
209 | }
210 | int m=0;
211 | List list = new List();
212 | List leng = new List();
213 | for (int i = 0; i < subStr.Count(); i++)
214 | {
215 | if (strChinese.Count() > 0)//表示有汉字
216 | {
217 | if (m >= strChinese.Count) m--;
218 | if (subStr[i] != strChinese[m])
219 | {
220 | byte[] first = Encoding.ASCII.GetBytes(subStr[i]);
221 | int count = first.Length;
222 | list.Add(first);
223 | leng.Add(count);
224 | }
225 | else //汉字
226 | {
227 | byte[] first = ChineseToCode(strChinese[m]);
228 | m++;
229 | int count = first.Length;
230 | list.Add(first);
231 | leng.Add(count);
232 | }
233 | }
234 | else //表示没有汉字
235 | {
236 | byte[] first = Encoding.ASCII.GetBytes(subStr[i]);
237 | int count = first.Length;
238 | list.Add(first);
239 | leng.Add(count);
240 | }
241 |
242 | }//进行字符串转字节码
243 |
244 | int allleng = 0;
245 | foreach(var item in leng)
246 | {
247 | allleng += item;
248 | }//算出最终要申请的存储空间
249 |
250 | byte[] rtn=new byte[allleng];
251 | int t = 0;
252 | foreach(var item in list)
253 | {
254 | for (int i = 0; i < item.Length;i++ )
255 | {
256 | rtn[t] = item[i];
257 | t++;
258 | }
259 | }
260 | return rtn;
261 | }
262 | #endregion
263 |
264 |
265 | #endregion
266 |
267 | #region
268 | public byte[] TestA()
269 | {
270 | byte[] firstTest = { 1, 254, 0, 17, 20, 16, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
271 | return firstTest;
272 | }
273 | #endregion
274 | #region 第二组测试
275 | public byte[] TestB()
276 | {
277 | byte[] secondTest = { 1, 254, 0, 17, 20, 16, 0, 2, 12, 0, 0, 0, 0, 0, 0, 0, 0, 1, 254, 0, 17, 20, 16, 0, 2, 41, 0, 0, 0, 0, 0, 0, 0, 0, 1, 254, 0, 17, 20, 16, 0, 2, 32, 0, 0, 0, 0, 0, 0, 0, 0 };
278 | return secondTest;
279 | }
280 | #endregion
281 | }
282 | }
283 |
--------------------------------------------------------------------------------
/ConsoleApp/Program.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 | using ConsoleApp;
6 |
7 | namespace ConsoleApp
8 | {
9 | class Program
10 | {
11 | static void Main(string[] args)
12 | {
13 | //==============测试汉字转成字节==================
14 | //var bc = CTOC();
15 | //byte[] bb = { 73,79,58,35,53,88,71,120,76,108,70,120,84,36,35,40};
16 | //var we = TransToChinese(bb);
17 | //var cc = we;
18 | ////string str = "liuyanjia刘艳佳2222333sss李四sss王五";
19 | //============这个是组装字节的==================================
20 | //string test2 = "1 0 1 178 0 0 0 1 39 81 112 2 27 11 40 32 15 27 77 27 14 73 79 58 35 53 88 71 120 76 108 70 120 84 36 49 40 27 15 58 32 32 32 13 32 32 32 32 32 57 27 14 84 66 27 15 50 50 27 14 72 85 27 15 32 27 14 80 71 70 90 72 85 27 15 58 13 32 32 32 32 32 32 32 32 27 14 87 110 53 77 70 120 78 66 27 15 32 50 53 67 40 55 55 70 41 44 32 27 14 87 110 56 95 70 120 78 66 27 15 32 50 57 67 40 56 52 70 41 44 32 27 14 85 115 83 106 27 15 44 32 27 14 54 43 55 103 27 15 52 45 53 27 14 60 54 27 15 32 13 32 32 32 32 32 32 57 27 14 84 66 27 15 50 51 27 14 72 85 27 15 32 27 14 80 71 70 90 82 59 27 15 58 13 32 32 32 32 32 32 32 32 27 14 87 110 53 77 70 120 78 66 27 15 32 50 52 67 40 55 53 70 41 44 32 27 14 87 110 56 95 70 120 78 66 27 15 32 51 48 67 40 56 54 70 41 44 32 27 14 54 96 84 70 27 15 44 32 27 14 54 43 68 79 55 103 27 15 52 45 53 27 14 60 54 27 15 32 13 32 32 32 32 32 32 32 32 57 27 14 84 66 27 15 50 52 27 14 72 85 27 15 32 27 14 80 71 70 90 54 126 27 15 58 13 32 32 32 32 32 32 32 32 27 14 87 110 53 77 70 120 78 66 27 15 32 50 49 67 40 55 48 70 41 44 32 27 14 87 110 56 95 70 120 78 66 27 15 32 51 48 67 40 56 54 70 41 44 32 27 14 85 115 83 106 87 42 86 80 83 106 27 15 44 32 27 14 68 79 55 103 27 15 52 45 53 27 14 60 54 87 42 54 43 39 35 55 103 27 15 52 45 53 27 14 60 54 27 15 32 13 32 32 32 32 32 32 27 98 13 30 27 98 3";
21 | //var test2a = GetNewStr(test2);
22 | //var sssss = test2a;
23 | //============================================================
24 | byte[] test1 = //这个是avshacgo
25 | {
26 | 1 ,0 ,3, 103, 0, 0, 0, 1, 51, 81, 112, 2, 27, 11, 32, 32, 15 ,27 ,77, 32, 50, 49, 83, 69, 80, 40, 83, 65, 84,
27 | 41, 32 ,83 ,72, 65, 67 ,71 ,79 ,32 ,13 ,49, 45, 32 ,42 ,77, 85, 57, 51, 50 ,51 ,32 ,32, 83 ,72 ,65, 67 ,71 ,79,
28 | 32 ,49, 55, 53 ,53, 32 ,32 ,32,49, 57, 52 ,53, 32, 32 ,32 ,55 ,51 ,55 ,32 ,48, 94, 68, 32, 32, 69, 32, 32, 28,
29 | 65, 83, 35, 29, 70 ,76 ,32 ,80, 81, 32, 65 ,76, 32, 89, 76, 32, 66, 81 ,32 ,77 ,81, 32, 69, 81 ,32, 72, 81, 32,
30 | 75 ,81 ,32 ,76 ,81 ,42 ,50 ,32 ,32 ,32 ,70 ,77 ,57 ,51 ,50, 51, 32, 32 ,83, 72, 65, 67, 71, 79, 32, 49, 55, 53,
31 | 53 ,32 ,32 ,32 ,49 ,57 ,52 ,53 ,32 ,32 ,32, 55, 51, 55, 32, 48, 94, 68, 32, 32, 69, 32, 32, 28, 65, 83, 35, 29,
32 | 70 ,76, 32, 80, 81 ,32 ,89 ,76 ,32 ,66 ,81 ,32 ,77 ,81 ,32 ,69 ,81 ,32 ,72 ,81 ,32 ,75, 81 ,32 ,76 ,81 ,32 ,78,
33 | 81 ,42 ,51 ,32 ,32 ,32 ,67 ,90 ,51 ,53 ,57 ,56 ,32 ,32 ,83 ,72 ,65 ,67 ,71 ,79 ,32 ,50 ,48 ,51 ,48 ,32 ,32 ,32,
34 | 50 ,50 ,50 ,48 ,32 ,32 ,32 ,55 ,51 ,56 ,32 ,48 ,94 ,67 ,32 ,32 ,69 ,32 ,32 ,28 ,65 ,83 ,35 ,29 ,70 ,50 ,32 ,80 ,
35 | 81 ,32 ,87 ,76 ,32 ,90 ,81 ,32 ,89 ,76 ,32 ,84 ,81 ,32 ,75 ,81 ,32 ,72 ,81 ,32 ,77 ,81 ,32 ,71 ,81 ,42 ,52 ,32 ,
36 | 32 ,32 ,70 ,77 ,56 ,50 ,50 ,32 ,32 ,32 ,80 ,86 ,71 ,67 ,71 ,79 ,32 ,50 ,49 ,52 ,48 ,32 ,32 ,32 ,50 ,51 ,51 ,48 ,
37 | 32 ,32 ,32 ,55 ,51 ,56 ,32 ,48 ,94, 32, 32 ,32 ,69 ,32 ,32 ,32 ,68 ,83 ,35 ,32 ,74 ,50 ,32 ,67 ,81 ,32 ,68 ,81 ,
38 | 32 ,73, 81, 32, 89, 76 ,32 ,66 ,81 ,32 ,77 ,81 ,32 ,69 ,81 ,32 ,72 ,81 ,32 ,75 ,81 ,42 ,53 ,32 ,32 ,42 ,77 ,85 ,
39 | 51 ,51 ,50 ,49 ,32 ,32 ,80 ,86 ,71 ,67 ,71 ,79 ,32 ,50 ,50 ,49 ,48 ,32 ,32 ,32 ,50 ,51, 53, 53, 32 ,32 ,32 ,55 ,
40 | 51 ,56 ,32 ,48 ,94 ,67 ,32 ,32 ,69 ,32 ,32 ,28 ,65 ,83 ,35 ,29 ,89 ,65 ,32 ,66 ,65 ,32 ,77 ,65 ,32 ,69 ,65 ,32 ,
41 | 72 ,81 ,32 ,75 ,81 ,32 ,76 ,81 ,32 ,78 ,81 ,32 ,82 ,81 ,32 ,83 ,81 ,42 ,54 ,32 ,32, 32, 67, 90, 51, 57, 52, 56,
42 | 32 ,32 ,80 ,86 ,71 ,67 ,71 ,79 ,32 ,50 ,50 ,49 ,48 ,32 ,32 ,32 ,50 ,51 ,53 ,53 ,32 ,32 ,32 ,55 ,51 ,56 ,32 ,48 ,
43 | 94 ,67, 32, 32 ,69 ,32 ,32 ,28 ,65 ,83 ,35 ,29 ,70 ,49 ,32 ,80 ,49 ,32 ,87 ,53 ,32 ,90 ,53 ,32 ,89 ,65 ,32 ,84 ,
44 | 65 ,32 ,75 ,65 ,32 ,72 ,65 ,32 ,77 ,81 ,32 ,71 ,81 ,42 ,55 ,43 ,32 ,32 ,67 ,90 ,51 ,53 ,50 ,54 ,32 ,32 ,83 ,72 ,
45 | 65 ,67, 65 ,78 ,32 ,49 ,54 ,52 ,53 ,32 ,32 ,32 ,49 ,57 ,48 ,53 ,32 ,32 ,32 ,51 ,50 ,49 ,32 ,48 ,94 ,67 ,32 ,32 ,
46 | 69 ,32, 32, 32, 68 ,83 ,35 ,32 ,70 ,52 ,32 ,80 ,83 ,32 ,87 ,65 ,32 ,90 ,81 ,32 ,89 ,65, 32, 84, 81, 32, 75, 81 ,
47 | 32 ,72 ,81 ,32 ,77 ,81 ,32 ,71 ,81 ,42 ,32 ,32 ,32 ,32 ,67 ,90 ,51 ,49 ,57 ,54 ,32 ,32 ,32 ,32 ,32 ,67 ,71 ,79 ,
48 | 32 ,50 ,50 ,48 ,48 ,32 ,32 ,32 ,48 ,48 ,49 ,53 ,43 ,49 ,32 ,55 ,51 ,56, 32, 48 ,94 ,67 ,32 ,32 ,69 ,32, 32, 28 ,
49 | 65 ,83 ,35 ,29 ,70 ,76 ,32 ,80 ,76 ,32 ,87 ,76 ,32 ,90 ,81 ,32 ,89 ,76 ,32 ,84 ,81 ,32 ,75 ,81 ,32 ,72 ,81 ,32 ,
50 | 77, 81 ,32 ,71, 81 ,42 ,28 ,42, 42, 32, 32, 65, 108 ,108, 32 ,115, 99, 104 ,101 ,100, 117 ,108 ,101 ,100 ,32 ,77,
51 | 85 ,32, 111, 114, 32 ,70, 77,
52 | 32, 102, 108 ,105, 103, 104, 116, 115, 32 ,111, 112, 101, 114 ,97 ,116, 101, 100 ,32 ,98 ,121, 32, 77 ,85 ,32, 111, 114,
53 | 32 ,70, 77, 32 ,97 ,114,
54 | 101, 32 ,34 ,69 ,97 ,115 ,116 ,101 ,114 ,110 ,32 ,69 ,120 ,112 ,114, 101, 115 ,115 ,34 ,29 ,13 ,28 ,42 ,42 ,32 ,32, 72 ,
55 | 79 ,32, 70 ,76 ,73 ,71,
56 | 72 ,84 ,32 ,68, 69, 80, 65 ,82 ,84 ,85, 82 ,69, 47, 65, 82, 82, 73 ,86, 65, 76 ,32, 65, 84 ,32 ,80, 86 ,71, 32 ,84, 50 ,
57 | 32, 70, 82 ,79 ,77 ,32, 49 ,
58 | 56, 68, 69, 67, 49 ,50, 44, 29, 13 ,28 ,42, 42, 32 ,32 ,72 ,79, 32 ,80, 86, 71 ,32, 67 ,72 ,69 ,67, 75, 32 ,73, 78 ,32 ,
59 | 52 ,53 ,32 ,77 ,73 ,78, 85,
60 | 84, 69 ,83 ,32 ,66 ,69, 70 ,79 ,82, 69 ,32 ,68 ,69, 80 ,65, 82, 84, 85, 82, 69 ,29, 13, 30, 27, 98, 3
61 | };
62 | byte[] test =//天气预报
63 | {
64 | 1,0,1,178,0,0,0,1,39,81,112,2,27,11,40,32,15,27,77,27,14,73,79,58,35,53,88,71,120,76,108,70,120,84,36,49,40,27,15,58,32,32,32,13,32,32,32,32,32,57,27,14,84,66,27,15,50,50,27,14,72,85,27,15,32,27,14,80,71,70,90,72,85,27,15,58,13,32,32,32,32,32,32,32,32,27,14,87,110,53,77,70,120,78,66,27,15,32,50,53,67,40,55,55,70,41,44,32,27,14,87,110,56,95,70,120,78,66,27,15,32,50,57,67,40,56,52,70,41,44,32,27,14,85,115,83,106,27,15,44,32,27,14,54,43,55,103,27,15,52,45,53,27,14,60,54,27,15,32,13,32,32,32,32,32,32,57,27,14,84,66,27,15,50,51,27,14,72,85,27,15,32,27,14,80,71,70,90,82,59,27,15,58,13,32,32,32,32,32,32,32,32,27,14,87,110,53,77,70,120,78,66,27,15,32,50,52,67,40,55,53,70,41,44,32,27,14,87,110,56,95,70,120,78,66,27,15,32,51,48,67,40,56,54,70,41,44,32,27,14,54,96,84,70,27,15,44,32,27,14,54,43,68,79,55,103,27,15,52,45,53,27,14,60,54,27,15,32,13,32,32,32,32,32,32,32,32,57,27,14,84,66,27,15,50,52,27,14,72,85,27,15,32,27,14,80,71,70,90,54,126,27,15,58,13,32,32,32,32,32,32,32,32,27,14,87,110,53,77,70,120,78,66,27,15,32,50,49,67,40,55,48,70,41,44,32,27,14,87,110,56,95,70,120,78,66,27,15,32,51,48,67,40,56,54,70,41,44,32,27,14,85,115,83,106,87,42,86,80,83,106,27,15,44,32,27,14,68,79,55,103,27,15,52,45,53,27,14,60,54,87,42,54,43,39,35,55,103,27,15,52,45,53,27,14,60,54,27,15,32,13,32,32,32,32,32,32,27,98,13,30,27,98,3
65 | };
66 | string stra = OrderService(test);
67 | string[] testa = stra.Split('~');
68 | foreach(var item in testa)
69 | {
70 | int a = item.IndexOf("\0");
71 | string q2 = item.Substring(0,a+1);//那就在这个地方处理情况了
72 | Console.WriteLine(q2);
73 | }
74 |
75 | string str = "detr:nm/ 刘艳佳1";
76 | //System.Text.RegularExpressions.Regex regex = new System.Text.RegularExpressions.Regex(@"(?[\u4E00-\u9FA5]{2,9})");
77 | //var matches = regex.Matches(str);
78 | //List strName = new List();
79 | //List location = new List();//起始位置
80 | //List strPin = new List(); //表示汉字转拼音
81 | //foreach(System.Text.RegularExpressions.Match item in matches)
82 | //{
83 | // string fir = item.Groups["UserName"].Value;
84 | // int first = str.IndexOf(fir);
85 | // location.Add(first);//记录这个名字的地址
86 | // int strlenth = fir.Length;
87 | // location.Add(strlenth);
88 | // strName.Add(fir);
89 | //}//上面的数组里面全是有汉字的
90 |
91 | ////把这个字符串截取一段一段:
92 | //List sub = new List();
93 | //string sec = str.Substring(0, location[0]);
94 | //sub.Add(sec);
95 | //for (int i = 0; i < location.Count();i+=2 )
96 | //{
97 | // string stt = str.Substring(location[i], location[i + 1]);
98 | // sub.Add(stt);
99 | //}//sub把所有的都截取出来了。
100 |
101 | //int m=0;
102 | //List list = new List();
103 | //List leng = new List();
104 | //for (int i = 0; i < sub.Count(); i++)
105 | //{
106 | // if (sub[i] != strName[m])
107 | // {
108 | // byte[] first = Encoding.ASCII.GetBytes(sub[i]);
109 | // int count = first.Length;
110 | // list.Add(first);
111 | // leng.Add(count);
112 | // }
113 | // else //汉字
114 | // {
115 | // byte[] first = ChineseToCode(strName[m]);
116 | // m++;
117 | // int count = first.Length;
118 | // list.Add(first);
119 | // leng.Add(count);
120 | // }
121 | //}//进行字符串转字节码
122 |
123 | //int allleng = 0;
124 | //foreach(var item in leng)
125 | //{
126 | // allleng += item;
127 | //}//算出最终要申请的存储空间
128 |
129 | //byte[] rtn=new byte[allleng];
130 | //int t = 0;
131 | //foreach(var item in list)
132 | //{
133 | // for (int i = 0; i < item.Length;i++ )
134 | // {
135 | // rtn[t] = item[i];
136 | // t++;
137 | // }
138 | //}
139 | //var aa = rtn;
140 |
141 | }
142 | //做这样一个原始的东西感觉上挺好的。
143 | #region 汉字编码
144 | public static byte[] ChineseToCode(string name)
145 | {
146 | string pinyin = ChineseToPinyin.ToPinYin(name);
147 | byte[] pinbyte = Encoding.ASCII.GetBytes(pinyin);
148 | byte[] middle = Encoding.GetEncoding("gb2312").GetBytes(name);
149 | byte[] chinesebyte = new byte[middle.Length];
150 | byte[] chinesecode = new byte[pinbyte.Length + middle.Length + 4];
151 | for (int i = 0; i < middle.Length; i++)
152 | {
153 | chinesebyte[i] = (byte)(middle[i] - 128);
154 | }
155 | for (int i = 0; i < pinbyte.Length + 2; i++)
156 | {
157 | if (i == pinbyte.Length) chinesecode[i] = 27;
158 | else if (i == pinbyte.Length + 1) chinesecode[i] = 14;
159 | else
160 | chinesecode[i] = pinbyte[i];
161 | }
162 | for (int j = pinbyte.Length + 2; j < pinbyte.Length + chinesebyte.Length + 4; j++)
163 | {
164 | if (j == pinbyte.Length + chinesebyte.Length + 2) chinesecode[j] = 27;
165 | else if (j == pinbyte.Length + chinesebyte.Length + 3) chinesecode[j] = 15;
166 | else
167 | chinesecode[j] = chinesebyte[j - pinbyte.Length - 2];
168 | }
169 | return chinesecode;
170 | }
171 | #endregion
172 | #region 根据gb2312转汉字
173 | private static string TransToChinese(byte[] toChinese)
174 | {
175 | string str = "";
176 | byte[] arry = new byte[2];
177 | for (int i = 0; i < toChinese.Length; i++)
178 | {
179 | toChinese[i] = (byte)(toChinese[i] + 128);
180 | }
181 | for (int i = 0; i < toChinese.Length-1; i += 2)
182 | {
183 | arry[0] = toChinese[i];
184 | arry[1] = toChinese[i + 1];
185 | str += System.Text.Encoding.GetEncoding("gb2312").GetString(arry);
186 | }
187 | return str;
188 | }
189 |
190 | private static string TransToCode(byte[] toCode)
191 | {
192 | string str = System.Text.Encoding.Default.GetString(toCode);
193 | return str;
194 | }
195 | public static byte[] CTOC()
196 | {
197 | string name="上海地区天气预报";
198 | byte[] aa = System.Text.Encoding.GetEncoding("gb2312").GetBytes(name);
199 | for (int i = 0; i < aa.Length;i++ )
200 | {
201 | aa[i] = (byte)(aa[i] - 128);
202 | }
203 | return aa;
204 | }
205 | #region 表示解析普通命令
206 | public static string OrderService(byte[] receiveService)
207 | {
208 | string rtn=""; int max=0;
209 | Byte[] chineseCode = new byte[100];
210 | int start = 0;//标记解析的开始
211 | for (int i = 0; i < receiveService.Length;i++ )
212 | {
213 | if (receiveService[i] == 77 && receiveService[i-1] == 27)
214 | {
215 | start = i;
216 | break;
217 | }
218 | }
219 | for (int i = start+1; i < receiveService.Length; i++) //控制长度
220 | {
221 | if (receiveService[i] == 13)
222 | {
223 | max = i;
224 | break;
225 | }
226 | }
227 | Byte[] code = new byte[max];
228 | bool value = false;
229 | int m = 0;//相当于chineseCode的指针
230 | int n = 0;//相当于code的指针
231 | for (int i = 19; i < receiveService.Length; i++)
232 | {
233 |
234 | if (receiveService[i] < 32)
235 | {
236 | //表示特殊字符
237 | if (receiveService[i] == 13)
238 | {
239 | rtn += TransToCode(code) + "~";
240 | int longth =0;
241 | for(int j=i+1;j= 32)
344 | {
345 | if (receiveService[i] == 43)
346 | {
347 | // rtn += "当前的内容没有显示完";
348 | }
349 | if (receiveService[i] == 98 && receiveService[i - 1] == 27)
350 | {
351 | continue;//这个是显示不出来内容的。
352 | }
353 | if (value == true)
354 | {
355 | chineseCode[m] = receiveService[i];
356 | m++;
357 | }
358 | else if (value == false)
359 | {
360 | code[n] = receiveService[i];
361 | n++;
362 | }
363 | }
364 |
365 | }
366 | return rtn;
367 | }
368 | #endregion
369 | #endregion
370 | #region 将字符串添加逗号
371 | public static string GetNewStr(string str)
372 | {
373 | string aa = str.Replace(" ",",");
374 | return aa;
375 | }
376 | #endregion
377 |
378 | #region 显示是否可以重新new出一个空间
379 | public static void Test()
380 | {
381 | byte[] aa = new byte[20];
382 | string test = "ttt";
383 | string test1 = "aaa";
384 | aa = System.Text.Encoding.Default.GetBytes(test);
385 | foreach (var item in aa)
386 | {
387 | Console.WriteLine(item);
388 | }
389 | aa=new byte[10];
390 | aa = System.Text.Encoding.Default.GetBytes(test1);
391 | foreach(var item in aa)
392 | {
393 | Console.WriteLine(item);
394 | }
395 | }
396 | #endregion
397 | }
398 | }
399 |
--------------------------------------------------------------------------------
/ConsoleApp/ChineseSpell.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 |
6 | namespace ConsoleApp
7 | {
8 | public class ChineseSpell
9 | {
10 | private static string strChineseFirstPY =
11 | "YDYQSXMWZSSXJBYMGCCZQPSSQBYCDSCDQLDYLYBSSJGYZZJJFKCCLZDHWDWZJLJPFYYNWJJTMYHZWZHFLZPPQHGSCYYYNJQYXXGJ"
12 | + "HHSDSJNKKTMOMLCRXYPSNQSECCQZGGLLYJLMYZZSECYKYYHQWJSSGGYXYZYJWWKDJHYCHMYXJTLXJYQBYXZLDWRDJRWYSRLDZJPC"
13 | + "BZJJBRCFTLECZSTZFXXZHTRQHYBDLYCZSSYMMRFMYQZPWWJJYFCRWFDFZQPYDDWYXKYJAWJFFXYPSFTZYHHYZYSWCJYXSCLCXXWZ"
14 | + "ZXNBGNNXBXLZSZSBSGPYSYZDHMDZBQBZCWDZZYYTZHBTSYYBZGNTNXQYWQSKBPHHLXGYBFMJEBJHHGQTJCYSXSTKZHLYCKGLYSMZ"
15 | + "XYALMELDCCXGZYRJXSDLTYZCQKCNNJWHJTZZCQLJSTSTBNXBTYXCEQXGKWJYFLZQLYHYXSPSFXLMPBYSXXXYDJCZYLLLSJXFHJXP"
16 | + "JBTFFYABYXBHZZBJYZLWLCZGGBTSSMDTJZXPTHYQTGLJSCQFZKJZJQNLZWLSLHDZBWJNCJZYZSQQYCQYRZCJJWYBRTWPYFTWEXCS"
17 | + "KDZCTBZHYZZYYJXZCFFZZMJYXXSDZZOTTBZLQWFCKSZSXFYRLNYJMBDTHJXSQQCCSBXYYTSYFBXDZTGBCNSLCYZZPSAZYZZSCJCS"
18 | + "HZQYDXLBPJLLMQXTYDZXSQJTZPXLCGLQTZWJBHCTSYJSFXYEJJTLBGXSXJMYJQQPFZASYJNTYDJXKJCDJSZCBARTDCLYJQMWNQNC"
19 | + "LLLKBYBZZSYHQQLTWLCCXTXLLZNTYLNEWYZYXCZXXGRKRMTCNDNJTSYYSSDQDGHSDBJGHRWRQLYBGLXHLGTGXBQJDZPYJSJYJCTM"
20 | + "RNYMGRZJCZGJMZMGXMPRYXKJNYMSGMZJYMKMFXMLDTGFBHCJHKYLPFMDXLQJJSMTQGZSJLQDLDGJYCALCMZCSDJLLNXDJFFFFJCZ"
21 | + "FMZFFPFKHKGDPSXKTACJDHHZDDCRRCFQYJKQCCWJDXHWJLYLLZGCFCQDSMLZPBJJPLSBCJGGDCKKDEZSQCCKJGCGKDJTJDLZYCXK"
22 | + "LQSCGJCLTFPCQCZGWPJDQYZJJBYJHSJDZWGFSJGZKQCCZLLPSPKJGQJHZZLJPLGJGJJTHJJYJZCZMLZLYQBGJWMLJKXZDZNJQSYZ"
23 | + "MLJLLJKYWXMKJLHSKJGBMCLYYMKXJQLBMLLKMDXXKWYXYSLMLPSJQQJQXYXFJTJDXMXXLLCXQBSYJBGWYMBGGBCYXPJYGPEPFGDJ"
24 | + "GBHBNSQJYZJKJKHXQFGQZKFHYGKHDKLLSDJQXPQYKYBNQSXQNSZSWHBSXWHXWBZZXDMNSJBSBKBBZKLYLXGWXDRWYQZMYWSJQLCJ"
25 | + "XXJXKJEQXSCYETLZHLYYYSDZPAQYZCMTLSHTZCFYZYXYLJSDCJQAGYSLCQLYYYSHMRQQKLDXZSCSSSYDYCJYSFSJBFRSSZQSBXXP"
26 | + "XJYSDRCKGJLGDKZJZBDKTCSYQPYHSTCLDJDHMXMCGXYZHJDDTMHLTXZXYLYMOHYJCLTYFBQQXPFBDFHHTKSQHZYYWCNXXCRWHOWG"
27 | + "YJLEGWDQCWGFJYCSNTMYTOLBYGWQWESJPWNMLRYDZSZTXYQPZGCWXHNGPYXSHMYQJXZTDPPBFYHZHTJYFDZWKGKZBLDNTSXHQEEG"
28 | + "ZZYLZMMZYJZGXZXKHKSTXNXXWYLYAPSTHXDWHZYMPXAGKYDXBHNHXKDPJNMYHYLPMGOCSLNZHKXXLPZZLBMLSFBHHGYGYYGGBHSC"
29 | + "YAQTYWLXTZQCEZYDQDQMMHTKLLSZHLSJZWFYHQSWSCWLQAZYNYTLSXTHAZNKZZSZZLAXXZWWCTGQQTDDYZTCCHYQZFLXPSLZYGPZ"
30 | + "SZNGLNDQTBDLXGTCTAJDKYWNSYZLJHHZZCWNYYZYWMHYCHHYXHJKZWSXHZYXLYSKQYSPSLYZWMYPPKBYGLKZHTYXAXQSYSHXASMC"
31 | + "HKDSCRSWJPWXSGZJLWWSCHSJHSQNHCSEGNDAQTBAALZZMSSTDQJCJKTSCJAXPLGGXHHGXXZCXPDMMHLDGTYBYSJMXHMRCPXXJZCK"
32 | + "ZXSHMLQXXTTHXWZFKHCCZDYTCJYXQHLXDHYPJQXYLSYYDZOZJNYXQEZYSQYAYXWYPDGXDDXSPPYZNDLTWRHXYDXZZJHTCXMCZLHP"
33 | + "YYYYMHZLLHNXMYLLLMDCPPXHMXDKYCYRDLTXJCHHZZXZLCCLYLNZSHZJZZLNNRLWHYQSNJHXYNTTTKYJPYCHHYEGKCTTWLGQRLGG"
34 | + "TGTYGYHPYHYLQYQGCWYQKPYYYTTTTLHYHLLTYTTSPLKYZXGZWGPYDSSZZDQXSKCQNMJJZZBXYQMJRTFFBTKHZKBXLJJKDXJTLBWF"
35 | + "ZPPTKQTZTGPDGNTPJYFALQMKGXBDCLZFHZCLLLLADPMXDJHLCCLGYHDZFGYDDGCYYFGYDXKSSEBDHYKDKDKHNAXXYBPBYYHXZQGA"
36 | + "FFQYJXDMLJCSQZLLPCHBSXGJYNDYBYQSPZWJLZKSDDTACTBXZDYZYPJZQSJNKKTKNJDJGYYPGTLFYQKASDNTCYHBLWDZHBBYDWJR"
37 | + "YGKZYHEYYFJMSDTYFZJJHGCXPLXHLDWXXJKYTCYKSSSMTWCTTQZLPBSZDZWZXGZAGYKTYWXLHLSPBCLLOQMMZSSLCMBJCSZZKYDC"
38 | + "ZJGQQDSMCYTZQQLWZQZXSSFPTTFQMDDZDSHDTDWFHTDYZJYQJQKYPBDJYYXTLJHDRQXXXHAYDHRJLKLYTWHLLRLLRCXYLBWSRSZZ"
39 | + "SYMKZZHHKYHXKSMDSYDYCJPBZBSQLFCXXXNXKXWYWSDZYQOGGQMMYHCDZTTFJYYBGSTTTYBYKJDHKYXBELHTYPJQNFXFDYKZHQKZ"
40 | + "BYJTZBXHFDXKDASWTAWAJLDYJSFHBLDNNTNQJTJNCHXFJSRFWHZFMDRYJYJWZPDJKZYJYMPCYZNYNXFBYTFYFWYGDBNZZZDNYTXZ"
41 | + "EMMQBSQEHXFZMBMFLZZSRXYMJGSXWZJSPRYDJSJGXHJJGLJJYNZZJXHGXKYMLPYYYCXYTWQZSWHWLYRJLPXSLSXMFSWWKLCTNXNY"
42 | + "NPSJSZHDZEPTXMYYWXYYSYWLXJQZQXZDCLEEELMCPJPCLWBXSQHFWWTFFJTNQJHJQDXHWLBYZNFJLALKYYJLDXHHYCSTYYWNRJYX"
43 | + "YWTRMDRQHWQCMFJDYZMHMYYXJWMYZQZXTLMRSPWWCHAQBXYGZYPXYYRRCLMPYMGKSJSZYSRMYJSNXTPLNBAPPYPYLXYYZKYNLDZY"
44 | + "JZCZNNLMZHHARQMPGWQTZMXXMLLHGDZXYHXKYXYCJMFFYYHJFSBSSQLXXNDYCANNMTCJCYPRRNYTYQNYYMBMSXNDLYLYSLJRLXYS"
45 | + "XQMLLYZLZJJJKYZZCSFBZXXMSTBJGNXYZHLXNMCWSCYZYFZLXBRNNNYLBNRTGZQYSATSWRYHYJZMZDHZGZDWYBSSCSKXSYHYTXXG"
46 | + "CQGXZZSHYXJSCRHMKKBXCZJYJYMKQHZJFNBHMQHYSNJNZYBKNQMCLGQHWLZNZSWXKHLJHYYBQLBFCDSXDLDSPFZPSKJYZWZXZDDX"
47 | + "JSMMEGJSCSSMGCLXXKYYYLNYPWWWGYDKZJGGGZGGSYCKNJWNJPCXBJJTQTJWDSSPJXZXNZXUMELPXFSXTLLXCLJXJJLJZXCTPSWX"
48 | + "LYDHLYQRWHSYCSQYYBYAYWJJJQFWQCQQCJQGXALDBZZYJGKGXPLTZYFXJLTPADKYQHPMATLCPDCKBMTXYBHKLENXDLEEGQDYMSAW"
49 | + "HZMLJTWYGXLYQZLJEEYYBQQFFNLYXRDSCTGJGXYYNKLLYQKCCTLHJLQMKKZGCYYGLLLJDZGYDHZWXPYSJBZKDZGYZZHYWYFQYTYZ"
50 | + "SZYEZZLYMHJJHTSMQWYZLKYYWZCSRKQYTLTDXWCTYJKLWSQZWBDCQYNCJSRSZJLKCDCDTLZZZACQQZZDDXYPLXZBQJYLZLLLQDDZ"
51 | + "QJYJYJZYXNYYYNYJXKXDAZWYRDLJYYYRJLXLLDYXJCYWYWNQCCLDDNYYYNYCKCZHXXCCLGZQJGKWPPCQQJYSBZZXYJSQPXJPZBSB"
52 | + "DSFNSFPZXHDWZTDWPPTFLZZBZDMYYPQJRSDZSQZSQXBDGCPZSWDWCSQZGMDHZXMWWFYBPDGPHTMJTHZSMMBGZMBZJCFZWFZBBZMQ"
53 | + "CFMBDMCJXLGPNJBBXGYHYYJGPTZGZMQBQTCGYXJXLWZKYDPDYMGCFTPFXYZTZXDZXTGKMTYBBCLBJASKYTSSQYYMSZXFJEWLXLLS"
54 | + "ZBQJJJAKLYLXLYCCTSXMCWFKKKBSXLLLLJYXTYLTJYYTDPJHNHNNKBYQNFQYYZBYYESSESSGDYHFHWTCJBSDZZTFDMXHCNJZYMQW"
55 | + "SRYJDZJQPDQBBSTJGGFBKJBXTGQHNGWJXJGDLLTHZHHYYYYYYSXWTYYYCCBDBPYPZYCCZYJPZYWCBDLFWZCWJDXXHYHLHWZZXJTC"
56 | + "ZLCDPXUJCZZZLYXJJTXPHFXWPYWXZPTDZZBDZCYHJHMLXBQXSBYLRDTGJRRCTTTHYTCZWMXFYTWWZCWJWXJYWCSKYBZSCCTZQNHX"
57 | + "NWXXKHKFHTSWOCCJYBCMPZZYKBNNZPBZHHZDLSYDDYTYFJPXYNGFXBYQXCBHXCPSXTYZDMKYSNXSXLHKMZXLYHDHKWHXXSSKQYHH"
58 | + "CJYXGLHZXCSNHEKDTGZXQYPKDHEXTYKCNYMYYYPKQYYYKXZLTHJQTBYQHXBMYHSQCKWWYLLHCYYLNNEQXQWMCFBDCCMLJGGXDQKT"
59 | + "LXKGNQCDGZJWYJJLYHHQTTTNWCHMXCXWHWSZJYDJCCDBQCDGDNYXZTHCQRXCBHZTQCBXWGQWYYBXHMBYMYQTYEXMQKYAQYRGYZSL"
60 | + "FYKKQHYSSQYSHJGJCNXKZYCXSBXYXHYYLSTYCXQTHYSMGSCPMMGCCCCCMTZTASMGQZJHKLOSQYLSWTMXSYQKDZLJQQYPLSYCZTCQ"
61 | + "QPBBQJZCLPKHQZYYXXDTDDTSJCXFFLLCHQXMJLWCJCXTSPYCXNDTJSHJWXDQQJSKXYAMYLSJHMLALYKXCYYDMNMDQMXMCZNNCYBZ"
62 | + "KKYFLMCHCMLHXRCJJHSYLNMTJZGZGYWJXSRXCWJGJQHQZDQJDCJJZKJKGDZQGJJYJYLXZXXCDQHHHEYTMHLFSBDJSYYSHFYSTCZQ"
63 | + "LPBDRFRZTZYKYWHSZYQKWDQZRKMSYNBCRXQBJYFAZPZZEDZCJYWBCJWHYJBQSZYWRYSZPTDKZPFPBNZTKLQYHBBZPNPPTYZZYBQN"
64 | + "YDCPJMMCYCQMCYFZZDCMNLFPBPLNGQJTBTTNJZPZBBZNJKLJQYLNBZQHKSJZNGGQSZZKYXSHPZSNBCGZKDDZQANZHJKDRTLZLSWJ"
65 | + "LJZLYWTJNDJZJHXYAYNCBGTZCSSQMNJPJYTYSWXZFKWJQTKHTZPLBHSNJZSYZBWZZZZLSYLSBJHDWWQPSLMMFBJDWAQYZTCJTBNN"
66 | + "WZXQXCDSLQGDSDPDZHJTQQPSWLYYJZLGYXYZLCTCBJTKTYCZJTQKBSJLGMGZDMCSGPYNJZYQYYKNXRPWSZXMTNCSZZYXYBYHYZAX"
67 | + "YWQCJTLLCKJJTJHGDXDXYQYZZBYWDLWQCGLZGJGQRQZCZSSBCRPCSKYDZNXJSQGXSSJMYDNSTZTPBDLTKZWXQWQTZEXNQCZGWEZK"
68 | + "SSBYBRTSSSLCCGBPSZQSZLCCGLLLZXHZQTHCZMQGYZQZNMCOCSZJMMZSQPJYGQLJYJPPLDXRGZYXCCSXHSHGTZNLZWZKJCXTCFCJ"
69 | + "XLBMQBCZZWPQDNHXLJCTHYZLGYLNLSZZPCXDSCQQHJQKSXZPBAJYEMSMJTZDXLCJYRYYNWJBNGZZTMJXLTBSLYRZPYLSSCNXPHLL"
70 | + "HYLLQQZQLXYMRSYCXZLMMCZLTZSDWTJJLLNZGGQXPFSKYGYGHBFZPDKMWGHCXMSGDXJMCJZDYCABXJDLNBCDQYGSKYDQTXDJJYXM"
71 | + "SZQAZDZFSLQXYJSJZYLBTXXWXQQZBJZUFBBLYLWDSLJHXJYZJWTDJCZFQZQZZDZSXZZQLZCDZFJHYSPYMPQZMLPPLFFXJJNZZYLS"
72 | + "JEYQZFPFZKSYWJJJHRDJZZXTXXGLGHYDXCSKYSWMMZCWYBAZBJKSHFHJCXMHFQHYXXYZFTSJYZFXYXPZLCHMZMBXHZZSXYFYMNCW"
73 | + "DABAZLXKTCSHHXKXJJZJSTHYGXSXYYHHHJWXKZXSSBZZWHHHCWTZZZPJXSNXQQJGZYZYWLLCWXZFXXYXYHXMKYYSWSQMNLNAYCYS"
74 | + "PMJKHWCQHYLAJJMZXHMMCNZHBHXCLXTJPLTXYJHDYYLTTXFSZHYXXSJBJYAYRSMXYPLCKDUYHLXRLNLLSTYZYYQYGYHHSCCSMZCT"
75 | + "ZQXKYQFPYYRPFFLKQUNTSZLLZMWWTCQQYZWTLLMLMPWMBZSSTZRBPDDTLQJJBXZCSRZQQYGWCSXFWZLXCCRSZDZMCYGGDZQSGTJS"
76 | + "WLJMYMMZYHFBJDGYXCCPSHXNZCSBSJYJGJMPPWAFFYFNXHYZXZYLREMZGZCYZSSZDLLJCSQFNXZKPTXZGXJJGFMYYYSNBTYLBNLH"
77 | + "PFZDCYFBMGQRRSSSZXYSGTZRNYDZZCDGPJAFJFZKNZBLCZSZPSGCYCJSZLMLRSZBZZLDLSLLYSXSQZQLYXZLSKKBRXBRBZCYCXZZ"
78 | + "ZEEYFGKLZLYYHGZSGZLFJHGTGWKRAAJYZKZQTSSHJJXDCYZUYJLZYRZDQQHGJZXSSZBYKJPBFRTJXLLFQWJHYLQTYMBLPZDXTZYG"
79 | + "BDHZZRBGXHWNJTJXLKSCFSMWLSDQYSJTXKZSCFWJLBXFTZLLJZLLQBLSQMQQCGCZFPBPHZCZJLPYYGGDTGWDCFCZQYYYQYSSCLXZ"
80 | + "SKLZZZGFFCQNWGLHQYZJJCZLQZZYJPJZZBPDCCMHJGXDQDGDLZQMFGPSYTSDYFWWDJZJYSXYYCZCYHZWPBYKXRYLYBHKJKSFXTZJ"
81 | + "MMCKHLLTNYYMSYXYZPYJQYCSYCWMTJJKQYRHLLQXPSGTLYYCLJSCPXJYZFNMLRGJJTYZBXYZMSJYJHHFZQMSYXRSZCWTLRTQZSST"
82 | + "KXGQKGSPTGCZNJSJCQCXHMXGGZTQYDJKZDLBZSXJLHYQGGGTHQSZPYHJHHGYYGKGGCWJZZYLCZLXQSFTGZSLLLMLJSKCTBLLZZSZ"
83 | + "MMNYTPZSXQHJCJYQXYZXZQZCPSHKZZYSXCDFGMWQRLLQXRFZTLYSTCTMJCXJJXHJNXTNRZTZFQYHQGLLGCXSZSJDJLJCYDSJTLNY"
84 | + "XHSZXCGJZYQPYLFHDJSBPCCZHJJJQZJQDYBSSLLCMYTTMQTBHJQNNYGKYRQYQMZGCJKPDCGMYZHQLLSLLCLMHOLZGDYYFZSLJCQZ"
85 | + "LYLZQJESHNYLLJXGJXLYSYYYXNBZLJSSZCQQCJYLLZLTJYLLZLLBNYLGQCHXYYXOXCXQKYJXXXYKLXSXXYQXCYKQXQCSGYXXYQXY"
86 | + "GYTQOHXHXPYXXXULCYEYCHZZCBWQBBWJQZSCSZSSLZYLKDESJZWMYMCYTSDSXXSCJPQQSQYLYYZYCMDJDZYWCBTJSYDJKCYDDJLB"
87 | + "DJJSODZYSYXQQYXDHHGQQYQHDYXWGMMMAJDYBBBPPBCMUUPLJZSMTXERXJMHQNUTPJDCBSSMSSSTKJTSSMMTRCPLZSZMLQDSDMJM"
88 | + "QPNQDXCFYNBFSDQXYXHYAYKQYDDLQYYYSSZBYDSLNTFQTZQPZMCHDHCZCWFDXTMYQSPHQYYXSRGJCWTJTZZQMGWJJTJHTQJBBHWZ"
89 | + "PXXHYQFXXQYWYYHYSCDYDHHQMNMTMWCPBSZPPZZGLMZFOLLCFWHMMSJZTTDHZZYFFYTZZGZYSKYJXQYJZQBHMBZZLYGHGFMSHPZF"
90 | + "ZSNCLPBQSNJXZSLXXFPMTYJYGBXLLDLXPZJYZJYHHZCYWHJYLSJEXFSZZYWXKZJLUYDTMLYMQJPWXYHXSKTQJEZRPXXZHHMHWQPW"
91 | + "QLYJJQJJZSZCPHJLCHHNXJLQWZJHBMZYXBDHHYPZLHLHLGFWLCHYYTLHJXCJMSCPXSTKPNHQXSRTYXXTESYJCTLSSLSTDLLLWWYH"
92 | + "DHRJZSFGXTSYCZYNYHTDHWJSLHTZDQDJZXXQHGYLTZPHCSQFCLNJTCLZPFSTPDYNYLGMJLLYCQHYSSHCHYLHQYQTMZYPBYWRFQYK"
93 | + "QSYSLZDQJMPXYYSSRHZJNYWTQDFZBWWTWWRXCWHGYHXMKMYYYQMSMZHNGCEPMLQQMTCWCTMMPXJPJJHFXYYZSXZHTYBMSTSYJTTQ"
94 | + "QQYYLHYNPYQZLCYZHZWSMYLKFJXLWGXYPJYTYSYXYMZCKTTWLKSMZSYLMPWLZWXWQZSSAQSYXYRHSSNTSRAPXCPWCMGDXHXZDZYF"
95 | + "JHGZTTSBJHGYZSZYSMYCLLLXBTYXHBBZJKSSDMALXHYCFYGMQYPJYCQXJLLLJGSLZGQLYCJCCZOTYXMTMTTLLWTGPXYMZMKLPSZZ"
96 | + "ZXHKQYSXCTYJZYHXSHYXZKXLZWPSQPYHJWPJPWXQQYLXSDHMRSLZZYZWTTCYXYSZZSHBSCCSTPLWSSCJCHNLCGCHSSPHYLHFHHXJ"
97 | + "SXYLLNYLSZDHZXYLSXLWZYKCLDYAXZCMDDYSPJTQJZLNWQPSSSWCTSTSZLBLNXSMNYYMJQBQHRZWTYYDCHQLXKPZWBGQYBKFCMZW"
98 | + "PZLLYYLSZYDWHXPSBCMLJBSCGBHXLQHYRLJXYSWXWXZSLDFHLSLYNJLZYFLYJYCDRJLFSYZFSLLCQYQFGJYHYXZLYLMSTDJCYHBZ"
99 | + "LLNWLXXYGYYHSMGDHXXHHLZZJZXCZZZCYQZFNGWPYLCPKPYYPMCLQKDGXZGGWQBDXZZKZFBXXLZXJTPJPTTBYTSZZDWSLCHZHSLT"
100 | + "YXHQLHYXXXYYZYSWTXZKHLXZXZPYHGCHKCFSYHUTJRLXFJXPTZTWHPLYXFCRHXSHXKYXXYHZQDXQWULHYHMJTBFLKHTXCWHJFWJC"
101 | + "FPQRYQXCYYYQYGRPYWSGSUNGWCHKZDXYFLXXHJJBYZWTSXXNCYJJYMSWZJQRMHXZWFQSYLZJZGBHYNSLBGTTCSYBYXXWXYHXYYXN"
102 | + "SQYXMQYWRGYQLXBBZLJSYLPSYTJZYHYZAWLRORJMKSCZJXXXYXCHDYXRYXXJDTSQFXLYLTSFFYXLMTYJMJUYYYXLTZCSXQZQHZXL"
103 | + "YYXZHDNBRXXXJCTYHLBRLMBRLLAXKYLLLJLYXXLYCRYLCJTGJCMTLZLLCYZZPZPCYAWHJJFYBDYYZSMPCKZDQYQPBPCJPDCYZMDP"
104 | + "BCYYDYCNNPLMTMLRMFMMGWYZBSJGYGSMZQQQZTXMKQWGXLLPJGZBQCDJJJFPKJKCXBLJMSWMDTQJXLDLPPBXCWRCQFBFQJCZAHZG"
105 | + "MYKPHYYHZYKNDKZMBPJYXPXYHLFPNYYGXJDBKXNXHJMZJXSTRSTLDXSKZYSYBZXJLXYSLBZYSLHXJPFXPQNBYLLJQKYGZMCYZZYM"
106 | + "CCSLCLHZFWFWYXZMWSXTYNXJHPYYMCYSPMHYSMYDYSHQYZCHMJJMZCAAGCFJBBHPLYZYLXXSDJGXDHKXXTXXNBHRMLYJSLTXMRHN"
107 | + "LXQJXYZLLYSWQGDLBJHDCGJYQYCMHWFMJYBMBYJYJWYMDPWHXQLDYGPDFXXBCGJSPCKRSSYZJMSLBZZJFLJJJLGXZGYXYXLSZQYX"
108 | + "BEXYXHGCXBPLDYHWETTWWCJMBTXCHXYQXLLXFLYXLLJLSSFWDPZSMYJCLMWYTCZPCHQEKCQBWLCQYDPLQPPQZQFJQDJHYMMCXTXD"
109 | + "RMJWRHXCJZYLQXDYYNHYYHRSLSRSYWWZJYMTLTLLGTQCJZYABTCKZCJYCCQLJZQXALMZYHYWLWDXZXQDLLQSHGPJFJLJHJABCQZD"
110 | + "JGTKHSSTCYJLPSWZLXZXRWGLDLZRLZXTGSLLLLZLYXXWGDZYGBDPHZPBRLWSXQBPFDWOFMWHLYPCBJCCLDMBZPBZZLCYQXLDOMZB"
111 | + "LZWPDWYYGDSTTHCSQSCCRSSSYSLFYBFNTYJSZDFNDPDHDZZMBBLSLCMYFFGTJJQWFTMTPJWFNLBZCMMJTGBDZLQLPYFHYYMJYLSD"
112 | + "CHDZJWJCCTLJCLDTLJJCPDDSQDSSZYBNDBJLGGJZXSXNLYCYBJXQYCBYLZCFZPPGKCXZDZFZTJJFJSJXZBNZYJQTTYJYHTYCZHYM"
113 | + "DJXTTMPXSPLZCDWSLSHXYPZGTFMLCJTYCBPMGDKWYCYZCDSZZYHFLYCTYGWHKJYYLSJCXGYWJCBLLCSNDDBTZBSCLYZCZZSSQDLL"
114 | + "MQYYHFSLQLLXFTYHABXGWNYWYYPLLSDLDLLBJCYXJZMLHLJDXYYQYTDLLLBUGBFDFBBQJZZMDPJHGCLGMJJPGAEHHBWCQXAXHHHZ"
115 | + "CHXYPHJAXHLPHJPGPZJQCQZGJJZZUZDMQYYBZZPHYHYBWHAZYJHYKFGDPFQSDLZMLJXKXGALXZDAGLMDGXMWZQYXXDXXPFDMMSSY"
116 | + "MPFMDMMKXKSYZYSHDZKXSYSMMZZZMSYDNZZCZXFPLSTMZDNMXCKJMZTYYMZMZZMSXHHDCZJEMXXKLJSTLWLSQLYJZLLZJSSDPPMH"
117 | + "NLZJCZYHMXXHGZCJMDHXTKGRMXFWMCGMWKDTKSXQMMMFZZYDKMSCLCMPCGMHSPXQPZDSSLCXKYXTWLWJYAHZJGZQMCSNXYYMMPML"
118 | + "KJXMHLMLQMXCTKZMJQYSZJSYSZHSYJZJCDAJZYBSDQJZGWZQQXFKDMSDJLFWEHKZQKJPEYPZYSZCDWYJFFMZZYLTTDZZEFMZLBNP"
119 | + "PLPLPEPSZALLTYLKCKQZKGENQLWAGYXYDPXLHSXQQWQCQXQCLHYXXMLYCCWLYMQYSKGCHLCJNSZKPYZKCQZQLJPDMDZHLASXLBYD"
120 | + "WQLWDNBQCRYDDZTJYBKBWSZDXDTNPJDTCTQDFXQQMGNXECLTTBKPWSLCTYQLPWYZZKLPYGZCQQPLLKCCYLPQMZCZQCLJSLQZDJXL"
121 | + "DDHPZQDLJJXZQDXYZQKZLJCYQDYJPPYPQYKJYRMPCBYMCXKLLZLLFQPYLLLMBSGLCYSSLRSYSQTMXYXZQZFDZUYSYZTFFMZZSMZQ"
122 | + "HZSSCCMLYXWTPZGXZJGZGSJSGKDDHTQGGZLLBJDZLCBCHYXYZHZFYWXYZYMSDBZZYJGTSMTFXQYXQSTDGSLNXDLRYZZLRYYLXQHT"
123 | + "XSRTZNGZXBNQQZFMYKMZJBZYMKBPNLYZPBLMCNQYZZZSJZHJCTZKHYZZJRDYZHNPXGLFZTLKGJTCTSSYLLGZRZBBQZZKLPKLCZYS"
124 | + "SUYXBJFPNJZZXCDWXZYJXZZDJJKGGRSRJKMSMZJLSJYWQSKYHQJSXPJZZZLSNSHRNYPZTWCHKLPSRZLZXYJQXQKYSJYCZTLQZYBB"
125 | + "YBWZPQDWWYZCYTJCJXCKCWDKKZXSGKDZXWWYYJQYYTCYTDLLXWKCZKKLCCLZCQQDZLQLCSFQCHQHSFSMQZZLNBJJZBSJHTSZDYSJ"
126 | + "QJPDLZCDCWJKJZZLPYCGMZWDJJBSJQZSYZYHHXJPBJYDSSXDZNCGLQMBTSFSBPDZDLZNFGFJGFSMPXJQLMBLGQCYYXBQKDJJQYRF"
127 | + "KZTJDHCZKLBSDZCFJTPLLJGXHYXZCSSZZXSTJYGKGCKGYOQXJPLZPBPGTGYJZGHZQZZLBJLSQFZGKQQJZGYCZBZQTLDXRJXBSXXP"
128 | + "ZXHYZYCLWDXJJHXMFDZPFZHQHQMQGKSLYHTYCGFRZGNQXCLPDLBZCSCZQLLJBLHBZCYPZZPPDYMZZSGYHCKCPZJGSLJLNSCDSLDL"
129 | + "XBMSTLDDFJMKDJDHZLZXLSZQPQPGJLLYBDSZGQLBZLSLKYYHZTTNTJYQTZZPSZQZTLLJTYYLLQLLQYZQLBDZLSLYYZYMDFSZSNHL"
130 | + "XZNCZQZPBWSKRFBSYZMTHBLGJPMCZZLSTLXSHTCSYZLZBLFEQHLXFLCJLYLJQCBZLZJHHSSTBRMHXZHJZCLXFNBGXGTQJCZTMSFZ"
131 | + "KJMSSNXLJKBHSJXNTNLZDNTLMSJXGZJYJCZXYJYJWRWWQNZTNFJSZPZSHZJFYRDJSFSZJZBJFZQZZHZLXFYSBZQLZSGYFTZDCSZX"
132 | + "ZJBQMSZKJRHYJZCKMJKHCHGTXKXQGLXPXFXTRTYLXJXHDTSJXHJZJXZWZLCQSBTXWXGXTXXHXFTSDKFJHZYJFJXRZSDLLLTQSQQZ"
133 | + "QWZXSYQTWGWBZCGZLLYZBCLMQQTZHZXZXLJFRMYZFLXYSQXXJKXRMQDZDMMYYBSQBHGZMWFWXGMXLZPYYTGZYCCDXYZXYWGSYJYZ"
134 | + "NBHPZJSQSYXSXRTFYZGRHZTXSZZTHCBFCLSYXZLZQMZLMPLMXZJXSFLBYZMYQHXJSXRXSQZZZSSLYFRCZJRCRXHHZXQYDYHXSJJH"
135 | + "ZCXZBTYNSYSXJBQLPXZQPYMLXZKYXLXCJLCYSXXZZLXDLLLJJYHZXGYJWKJRWYHCPSGNRZLFZWFZZNSXGXFLZSXZZZBFCSYJDBRJ"
136 | + "KRDHHGXJLJJTGXJXXSTJTJXLYXQFCSGSWMSBCTLQZZWLZZKXJMLTMJYHSDDBXGZHDLBMYJFRZFSGCLYJBPMLYSMSXLSZJQQHJZFX"
137 | + "GFQFQBPXZGYYQXGZTCQWYLTLGWSGWHRLFSFGZJMGMGBGTJFSYZZGZYZAFLSSPMLPFLCWBJZCLJJMZLPJJLYMQDMYYYFBGYGYZMLY"
138 | + "ZDXQYXRQQQHSYYYQXYLJTYXFSFSLLGNQCYHYCWFHCCCFXPYLYPLLZYXXXXXKQHHXSHJZCFZSCZJXCPZWHHHHHAPYLQALPQAFYHXD"
139 | + "YLUKMZQGGGDDESRNNZLTZGCHYPPYSQJJHCLLJTOLNJPZLJLHYMHEYDYDSQYCDDHGZUNDZCLZYZLLZNTNYZGSLHSLPJJBDGWXPCDU"
140 | + "TJCKLKCLWKLLCASSTKZZDNQNTTLYYZSSYSSZZRYLJQKCQDHHCRXRZYDGRGCWCGZQFFFPPJFZYNAKRGYWYQPQXXFKJTSZZXSWZDDF"
141 | + "BBXTBGTZKZNPZZPZXZPJSZBMQHKCYXYLDKLJNYPKYGHGDZJXXEAHPNZKZTZCMXCXMMJXNKSZQNMNLWBWWXJKYHCPSTMCSQTZJYXT"
142 | + "PCTPDTNNPGLLLZSJLSPBLPLQHDTNJNLYYRSZFFJFQWDPHZDWMRZCCLODAXNSSNYZRESTYJWJYJDBCFXNMWTTBYLWSTSZGYBLJPXG"
143 | + "LBOCLHPCBJLTMXZLJYLZXCLTPNCLCKXTPZJSWCYXSFYSZDKNTLBYJCYJLLSTGQCBXRYZXBXKLYLHZLQZLNZCXWJZLJZJNCJHXMNZ"
144 | + "ZGJZZXTZJXYCYYCXXJYYXJJXSSSJSTSSTTPPGQTCSXWZDCSYFPTFBFHFBBLZJCLZZDBXGCXLQPXKFZFLSYLTUWBMQJHSZBMDDBCY"
145 | + "SCCLDXYCDDQLYJJWMQLLCSGLJJSYFPYYCCYLTJANTJJPWYCMMGQYYSXDXQMZHSZXPFTWWZQSWQRFKJLZJQQYFBRXJHHFWJJZYQAZ"
146 | + "MYFRHCYYBYQWLPEXCCZSTYRLTTDMQLYKMBBGMYYJPRKZNPBSXYXBHYZDJDNGHPMFSGMWFZMFQMMBCMZZCJJLCNUXYQLMLRYGQZCY"
147 | + "XZLWJGCJCGGMCJNFYZZJHYCPRRCMTZQZXHFQGTJXCCJEAQCRJYHPLQLSZDJRBCQHQDYRHYLYXJSYMHZYDWLDFRYHBPYDTSSCNWBX"
148 | + "GLPZMLZZTQSSCPJMXXYCSJYTYCGHYCJWYRXXLFEMWJNMKLLSWTXHYYYNCMMCWJDQDJZGLLJWJRKHPZGGFLCCSCZMCBLTBHBQJXQD"
149 | + "SPDJZZGKGLFQYWBZYZJLTSTDHQHCTCBCHFLQMPWDSHYYTQWCNZZJTLBYMBPDYYYXSQKXWYYFLXXNCWCXYPMAELYKKJMZZZBRXYYQ"
150 | + "JFLJPFHHHYTZZXSGQQMHSPGDZQWBWPJHZJDYSCQWZKTXXSQLZYYMYSDZGRXCKKUJLWPYSYSCSYZLRMLQSYLJXBCXTLWDQZPCYCYK"
151 | + "PPPNSXFYZJJRCEMHSZMSXLXGLRWGCSTLRSXBZGBZGZTCPLUJLSLYLYMTXMTZPALZXPXJTJWTCYYZLBLXBZLQMYLXPGHDSLSSDMXM"
152 | + "BDZZSXWHAMLCZCPJMCNHJYSNSYGCHSKQMZZQDLLKABLWJXSFMOCDXJRRLYQZKJMYBYQLYHETFJZFRFKSRYXFJTWDSXXSYSQJYSLY"
153 | + "XWJHSNLXYYXHBHAWHHJZXWMYLJCSSLKYDZTXBZSYFDXGXZJKHSXXYBSSXDPYNZWRPTQZCZENYGCXQFJYKJBZMLJCMQQXUOXSLYXX"
154 | + "LYLLJDZBTYMHPFSTTQQWLHOKYBLZZALZXQLHZWRRQHLSTMYPYXJJXMQSJFNBXYXYJXXYQYLTHYLQYFMLKLJTMLLHSZWKZHLJMLHL"
155 | + "JKLJSTLQXYLMBHHLNLZXQJHXCFXXLHYHJJGBYZZKBXSCQDJQDSUJZYYHZHHMGSXCSYMXFEBCQWWRBPYYJQTYZCYQYQQZYHMWFFHG"
156 | + "ZFRJFCDPXNTQYZPDYKHJLFRZXPPXZDBBGZQSTLGDGYLCQMLCHHMFYWLZYXKJLYPQHSYWMQQGQZMLZJNSQXJQSYJYCBEHSXFSZPXZ"
157 | + "WFLLBCYYJDYTDTHWZSFJMQQYJLMQXXLLDTTKHHYBFPWTYYSQQWNQWLGWDEBZWCMYGCULKJXTMXMYJSXHYBRWFYMWFRXYQMXYSZTZ"
158 | + "ZTFYKMLDHQDXWYYNLCRYJBLPSXCXYWLSPRRJWXHQYPHTYDNXHHMMYWYTZCSQMTSSCCDALWZTCPQPYJLLQZYJSWXMZZMMYLMXCLMX"
159 | + "CZMXMZSQTZPPQQBLPGXQZHFLJJHYTJSRXWZXSCCDLXTYJDCQJXSLQYCLZXLZZXMXQRJMHRHZJBHMFLJLMLCLQNLDXZLLLPYPSYJY"
160 | + "SXCQQDCMQJZZXHNPNXZMEKMXHYKYQLXSXTXJYYHWDCWDZHQYYBGYBCYSCFGPSJNZDYZZJZXRZRQJJYMCANYRJTLDPPYZBSTJKXXZ"
161 | + "YPFDWFGZZRPYMTNGXZQBYXNBUFNQKRJQZMJEGRZGYCLKXZDSKKNSXKCLJSPJYYZLQQJYBZSSQLLLKJXTBKTYLCCDDBLSPPFYLGYD"
162 | + "TZJYQGGKQTTFZXBDKTYYHYBBFYTYYBCLPDYTGDHRYRNJSPTCSNYJQHKLLLZSLYDXXWBCJQSPXBPJZJCJDZFFXXBRMLAZHCSNDLBJ"
163 | + "DSZBLPRZTSWSBXBCLLXXLZDJZSJPYLYXXYFTFFFBHJJXGBYXJPMMMPSSJZJMTLYZJXSWXTYLEDQPJMYGQZJGDJLQJWJQLLSJGJGY"
164 | + "GMSCLJJXDTYGJQJQJCJZCJGDZZSXQGSJGGCXHQXSNQLZZBXHSGZXCXYLJXYXYYDFQQJHJFXDHCTXJYRXYSQTJXYEFYYSSYYJXNCY"
165 | + "ZXFXMSYSZXYYSCHSHXZZZGZZZGFJDLTYLNPZGYJYZYYQZPBXQBDZTZCZYXXYHHSQXSHDHGQHJHGYWSZTMZMLHYXGEBTYLZKQWYTJ"
166 | + "ZRCLEKYSTDBCYKQQSAYXCJXWWGSBHJYZYDHCSJKQCXSWXFLTYNYZPZCCZJQTZWJQDZZZQZLJJXLSBHPYXXPSXSHHEZTXFPTLQYZZ"
167 | + "XHYTXNCFZYYHXGNXMYWXTZSJPTHHGYMXMXQZXTSBCZYJYXXTYYZYPCQLMMSZMJZZLLZXGXZAAJZYXJMZXWDXZSXZDZXLEYJJZQBH"
168 | + "ZWZZZQTZPSXZTDSXJJJZNYAZPHXYYSRNQDTHZHYYKYJHDZXZLSWCLYBZYECWCYCRYLCXNHZYDZYDYJDFRJJHTRSQTXYXJRJHOJYN"
169 | + "XELXSFSFJZGHPZSXZSZDZCQZBYYKLSGSJHCZSHDGQGXYZGXCHXZJWYQWGYHKSSEQZZNDZFKWYSSTCLZSTSYMCDHJXXYWEYXCZAYD"
170 | + "MPXMDSXYBSQMJMZJMTZQLPJYQZCGQHXJHHLXXHLHDLDJQCLDWBSXFZZYYSCHTYTYYBHECXHYKGJPXHHYZJFXHWHBDZFYZBCAPNPG"
171 | + "NYDMSXHMMMMAMYNBYJTMPXYYMCTHJBZYFCGTYHWPHFTWZZEZSBZEGPFMTSKFTYCMHFLLHGPZJXZJGZJYXZSBBQSCZZLZCCSTPGXM"
172 | + "JSFTCCZJZDJXCYBZLFCJSYZFGSZLYBCWZZBYZDZYPSWYJZXZBDSYUXLZZBZFYGCZXBZHZFTPBGZGEJBSTGKDMFHYZZJHZLLZZGJQ"
173 | + "ZLSFDJSSCBZGPDLFZFZSZYZYZSYGCXSNXXCHCZXTZZLJFZGQSQYXZJQDCCZTQCDXZJYQJQCHXZTDLGSCXZSYQJQTZWLQDQZTQCHQ"
174 | + "QJZYEZZZPBWKDJFCJPZTYPQYQTTYNLMBDKTJZPQZQZZFPZSBNJLGYJDXJDZZKZGQKXDLPZJTCJDQBXDJQJSTCKNXBXZMSLYJCQMT"
175 | + "JQWWCJQNJNLLLHJCWQTBZQYDZCZPZZDZYDDCYZZZCCJTTJFZDPRRTZTJDCQTQZDTJNPLZBCLLCTZSXKJZQZPZLBZRBTJDCXFCZDB"
176 | + "CCJJLTQQPLDCGZDBBZJCQDCJWYNLLZYZCCDWLLXWZLXRXNTQQCZXKQLSGDFQTDDGLRLAJJTKUYMKQLLTZYTDYYCZGJWYXDXFRSKS"
177 | + "TQTENQMRKQZHHQKDLDAZFKYPBGGPZREBZZYKZZSPEGJXGYKQZZZSLYSYYYZWFQZYLZZLZHWCHKYPQGNPGBLPLRRJYXCCSYYHSFZF"
178 | + "YBZYYTGZXYLXCZWXXZJZBLFFLGSKHYJZEYJHLPLLLLCZGXDRZELRHGKLZZYHZLYQSZZJZQLJZFLNBHGWLCZCFJYSPYXZLZLXGCCP"
179 | + "ZBLLCYBBBBUBBCBPCRNNZCZYRBFSRLDCGQYYQXYGMQZWTZYTYJXYFWTEHZZJYWLCCNTZYJJZDEDPZDZTSYQJHDYMBJNYJZLXTSST"
180 | + "PHNDJXXBYXQTZQDDTJTDYYTGWSCSZQFLSHLGLBCZPHDLYZJYCKWTYTYLBNYTSDSYCCTYSZYYEBHEXHQDTWNYGYCLXTSZYSTQMYGZ"
181 | + "AZCCSZZDSLZCLZRQXYYELJSBYMXSXZTEMBBLLYYLLYTDQYSHYMRQWKFKBFXNXSBYCHXBWJYHTQBPBSBWDZYLKGZSKYHXQZJXHXJX"
182 | + "GNLJKZLYYCDXLFYFGHLJGJYBXQLYBXQPQGZTZPLNCYPXDJYQYDYMRBESJYYHKXXSTMXRCZZYWXYQYBMCLLYZHQYZWQXDBXBZWZMS"
183 | + "LPDMYSKFMZKLZCYQYCZLQXFZZYDQZPZYGYJYZMZXDZFYFYTTQTZHGSPCZMLCCYTZXJCYTJMKSLPZHYSNZLLYTPZCTZZCKTXDHXXT"
184 | + "QCYFKSMQCCYYAZHTJPCYLZLYJBJXTPNYLJYYNRXSYLMMNXJSMYBCSYSYLZYLXJJQYLDZLPQBFZZBLFNDXQKCZFYWHGQMRDSXYCYT"
185 | + "XNQQJZYYPFZXDYZFPRXEJDGYQBXRCNFYYQPGHYJDYZXGRHTKYLNWDZNTSMPKLBTHBPYSZBZTJZSZZJTYYXZPHSSZZBZCZPTQFZMY"
186 | + "FLYPYBBJQXZMXXDJMTSYSKKBJZXHJCKLPSMKYJZCXTMLJYXRZZQSLXXQPYZXMKYXXXJCLJPRMYYGADYSKQLSNDHYZKQXZYZTCGHZ"
187 | + "TLMLWZYBWSYCTBHJHJFCWZTXWYTKZLXQSHLYJZJXTMPLPYCGLTBZZTLZJCYJGDTCLKLPLLQPJMZPAPXYZLKKTKDZCZZBNZDYDYQZ"
188 | + "JYJGMCTXLTGXSZLMLHBGLKFWNWZHDXUHLFMKYSLGXDTWWFRJEJZTZHYDXYKSHWFZCQSHKTMQQHTZHYMJDJSKHXZJZBZZXYMPAGQM"
189 | + "STPXLSKLZYNWRTSQLSZBPSPSGZWYHTLKSSSWHZZLYYTNXJGMJSZSUFWNLSOZTXGXLSAMMLBWLDSZYLAKQCQCTMYCFJBSLXCLZZCL"
190 | + "XXKSBZQCLHJPSQPLSXXCKSLNHPSFQQYTXYJZLQLDXZQJZDYYDJNZPTUZDSKJFSLJHYLZSQZLBTXYDGTQFDBYAZXDZHZJNHHQBYKN"
191 | + "XJJQCZMLLJZKSPLDYCLBBLXKLELXJLBQYCXJXGCNLCQPLZLZYJTZLJGYZDZPLTQCSXFDMNYCXGBTJDCZNBGBQYQJWGKFHTNPYQZQ"
192 | + "GBKPBBYZMTJDYTBLSQMPSXTBNPDXKLEMYYCJYNZCTLDYKZZXDDXHQSHDGMZSJYCCTAYRZLPYLTLKXSLZCGGEXCLFXLKJRTLQJAQZ"
193 | + "NCMBYDKKCXGLCZJZXJHPTDJJMZQYKQSECQZDSHHADMLZFMMZBGNTJNNLGBYJBRBTMLBYJDZXLCJLPLDLPCQDHLXZLYCBLCXZZJAD"
194 | + "JLNZMMSSSMYBHBSQKBHRSXXJMXSDZNZPXLGBRHWGGFCXGMSKLLTSJYYCQLTSKYWYYHYWXBXQYWPYWYKQLSQPTNTKHQCWDQKTWPXX"
195 | + "HCPTHTWUMSSYHBWCRWXHJMKMZNGWTMLKFGHKJYLSYYCXWHYECLQHKQHTTQKHFZLDXQWYZYYDESBPKYRZPJFYYZJCEQDZZDLATZBB"
196 | + "FJLLCXDLMJSSXEGYGSJQXCWBXSSZPDYZCXDNYXPPZYDLYJCZPLTXLSXYZYRXCYYYDYLWWNZSAHJSYQYHGYWWAXTJZDAXYSRLTDPS"
197 | + "SYYFNEJDXYZHLXLLLZQZSJNYQYQQXYJGHZGZCYJCHZLYCDSHWSHJZYJXCLLNXZJJYYXNFXMWFPYLCYLLABWDDHWDXJMCXZTZPMLQ"
198 | + "ZHSFHZYNZTLLDYWLSLXHYMMYLMBWWKYXYADTXYLLDJPYBPWUXJMWMLLSAFDLLYFLBHHHBQQLTZJCQJLDJTFFKMMMBYTHYGDCQRDD"
199 | + "WRQJXNBYSNWZDBYYTBJHPYBYTTJXAAHGQDQTMYSTQXKBTZPKJLZRBEQQSSMJJBDJOTGTBXPGBKTLHQXJJJCTHXQDWJLWRFWQGWSH"
200 | + "CKRYSWGFTGYGBXSDWDWRFHWYTJJXXXJYZYSLPYYYPAYXHYDQKXSHXYXGSKQHYWFDDDPPLCJLQQEEWXKSYYKDYPLTJTHKJLTCYYHH"
201 | + "JTTPLTZZCDLTHQKZXQYSTEEYWYYZYXXYYSTTJKLLPZMCYHQGXYHSRMBXPLLNQYDQHXSXXWGDQBSHYLLPJJJTHYJKYPPTHYYKTYEZ"
202 | + "YENMDSHLCRPQFDGFXZPSFTLJXXJBSWYYSKSFLXLPPLBBBLBSFXFYZBSJSSYLPBBFFFFSSCJDSTZSXZRYYSYFFSYZYZBJTBCTSBSD"
203 | + "HRTJJBYTCXYJEYLXCBNEBJDSYXYKGSJZBXBYTFZWGENYHHTHZHHXFWGCSTBGXKLSXYWMTMBYXJSTZSCDYQRCYTWXZFHMYMCXLZNS"
204 | + "DJTTTXRYCFYJSBSDYERXJLJXBBDEYNJGHXGCKGSCYMBLXJMSZNSKGXFBNBPTHFJAAFXYXFPXMYPQDTZCXZZPXRSYWZDLYBBKTYQP"
205 | + "QJPZYPZJZNJPZJLZZFYSBTTSLMPTZRTDXQSJEHBZYLZDHLJSQMLHTXTJECXSLZZSPKTLZKQQYFSYGYWPCPQFHQHYTQXZKRSGTTSQ"
206 | + "CZLPTXCDYYZXSQZSLXLZMYCPCQBZYXHBSXLZDLTCDXTYLZJYYZPZYZLTXJSJXHLPMYTXCQRBLZSSFJZZTNJYTXMYJHLHPPLCYXQJ"
207 | + "QQKZZSCPZKSWALQSBLCCZJSXGWWWYGYKTJBBZTDKHXHKGTGPBKQYSLPXPJCKBMLLXDZSTBKLGGQKQLSBKKTFXRMDKBFTPZFRTBBR"
208 | + "FERQGXYJPZSSTLBZTPSZQZSJDHLJQLZBPMSMMSXLQQNHKNBLRDDNXXDHDDJCYYGYLXGZLXSYGMQQGKHBPMXYXLYTQWLWGCPBMQXC"
209 | + "YZYDRJBHTDJYHQSHTMJSBYPLWHLZFFNYPMHXXHPLTBQPFBJWQDBYGPNZTPFZJGSDDTQSHZEAWZZYLLTYYBWJKXXGHLFKXDJTMSZS"
210 | + "QYNZGGSWQSPHTLSSKMCLZXYSZQZXNCJDQGZDLFNYKLJCJLLZLMZZNHYDSSHTHZZLZZBBHQZWWYCRZHLYQQJBEYFXXXWHSRXWQHWP"
211 | + "SLMSSKZTTYGYQQWRSLALHMJTQJSMXQBJJZJXZYZKXBYQXBJXSHZTSFJLXMXZXFGHKZSZGGYLCLSARJYHSLLLMZXELGLXYDJYTLFB"
212 | + "HBPNLYZFBBHPTGJKWETZHKJJXZXXGLLJLSTGSHJJYQLQZFKCGNNDJSSZFDBCTWWSEQFHQJBSAQTGYPQLBXBMMYWXGSLZHGLZGQYF"
213 | + "LZBYFZJFRYSFMBYZHQGFWZSYFYJJPHZBYYZFFWODGRLMFTWLBZGYCQXCDJYGZYYYYTYTYDWEGAZYHXJLZYYHLRMGRXXZCLHNELJJ"
214 | + "TJTPWJYBJJBXJJTJTEEKHWSLJPLPSFYZPQQBDLQJJTYYQLYZKDKSQJYYQZLDQTGJQYZJSUCMRYQTHTEJMFCTYHYPKMHYZWJDQFHY"
215 | + "YXWSHCTXRLJHQXHCCYYYJLTKTTYTMXGTCJTZAYYOCZLYLBSZYWJYTSJYHBYSHFJLYGJXXTMZYYLTXXYPZLXYJZYZYYPNHMYMDYYL"
216 | + "BLHLSYYQQLLNJJYMSOYQBZGDLYXYLCQYXTSZEGXHZGLHWBLJHEYXTWQMAKBPQCGYSHHEGQCMWYYWLJYJHYYZLLJJYLHZYHMGSLJL"
217 | + "JXCJJYCLYCJPCPZJZJMMYLCQLNQLJQJSXYJMLSZLJQLYCMMHCFMMFPQQMFYLQMCFFQMMMMHMZNFHHJGTTHHKHSLNCHHYQDXTMMQD"
218 | + "CYZYXYQMYQYLTDCYYYZAZZCYMZYDLZFFFMMYCQZWZZMABTBYZTDMNZZGGDFTYPCGQYTTSSFFWFDTZQSSYSTWXJHXYTSXXYLBYQHW"
219 | + "WKXHZXWZNNZZJZJJQJCCCHYYXBZXZCYZTLLCQXYNJYCYYCYNZZQYYYEWYCZDCJYCCHYJLBTZYYCQWMPWPYMLGKDLDLGKQQBGYCHJ"
220 | + "XY";
221 |
222 |
223 | }
224 | }
225 |
--------------------------------------------------------------------------------