C#读写XML⽂档通讯算法⾃定义协议/*
* API说明⽂档
* 本⽂档共包含五个类:
*                    XML⽂件操作类->XMLConcrol
*                    串⼝通讯类  ->ComTransmit
*                    ⽹络通讯类  ->NetTransmit
*                    算法类      ->Algorithm
*                    通讯协议类  ->Protocol
*********************************************************
* XML⽂件操作类->XMLConcrol说明:
*
* 原型:public void LoadFile()
* 功能:加载配置⽂件。如默认配置⽂件不存在,则新建⼀个
* 输⼊参数:⽆
* 输出参数:⽆
* 返回值:⽆
*
* 原型:public void readNode(string nodeName,ref float k,ref float b)
* 功能:读取指定节点值        标定模板⼀阶线性:y=kx+b
* 输⼊参数: 节点名称 nodeName 类型 string
* 输出参数: 标校系数 k        类型 ref float
*          标校常数 b        类型 ref float
* 返回值:⽆
*
* 原型:public void addNode(string nodeName, float k, float b)
* 功能:增加指定名称的节点    标定模板⼀阶线性:y=kx+b
* 输⼊参数: 节点名称 nodeName 类型 string
*          标校系数 k        类型 float
*          标校常数 b        类型 float
* 输出参数:⽆
* 返回值:⽆
阳兵卓*
* 原型:public void replaceNode(string nodeName, float k, float b)
* 功能:替换指定名称的节点    标定模板⼀阶线性:y=kx+b
* 输⼊参数: 节点名称 nodeName 类型 string
*          标校系数 k        类型 float
*          标校常数 b        类型 float
* 输出参数:⽆
* 返回值:⽆
*
* 原型:public void nodeList(ref ArrayList nodeList, ref int nodeNum)
* 功能:获取所有节点的名称列表
* 输⼊参数:⽆
* 输出参数:节点名称列表 nodeList 类型 ref ArrayList
*          节点列表长度 nodeNum  类型 ref int
* 返回值:⽆
*
* 原型:public int removeNode(string nodeName)
读取配置文件失败* 功能:删除指定名称的节点
* 输⼊参数: 节点名称 nodeName 类型 string
* 输出参数:⽆
* 返回值:删除节点个数
*********************************************************
* 串⼝通讯类->ComTransmit说明:
*
* 原型:public void InitCom(string comPort,int rate)
* 功能:初始化串⼝
* 输⼊参数:串⼝名 comPort 类型 string
*          波特率 rate    类型 int
*
* 原型:public void comWrite(string text)
* 功能:串⼝发送
* 输⼊参数:名称 text 类型 string
*
* 原型:public void comWrite(byte[] text)
* 功能:串⼝发送
* 输⼊参数:名称 text 类型 byte[]
*
* 原型:public void comRead(ref byte[] text)
* 功能:串⼝接收
* 输出参数:名称 text 类型 ref byte[]
*
* 原型:public void comRead(ref string text)
* 功能:串⼝接收
* 输出参数:名称 text 类型 ref string
*********************************************************
* ⽹络通讯类->NetTransmit说明:
*
* 原型:public void startServer(byte[] ServerAddress)
* 功能:创建⼀个服务器
* 输⼊参数:服务器IP地址 ServerAddress 类型 byte[]
*          例:byte[] ServerAddress=new byte[]{192,168,0,1}  *
* 原型:public void startServer(string ServerAddress)
* 功能:创建⼀个服务器
* 输⼊参数:服务器IP地址 ServerAddress 类型 string
放假去哪里玩好*          例:string ServerAddress="192.168.0.1";
*
* 原型:public bool serverReciveData(ref string msg)
* 功能:服务器接受来⾃客户端的数据
* 输出参数:名称 msg 类型 ref string
* 返回值:是否读取成功 成功 true 失败 false
*
* 原型:public bool serverReciveData(ref byte[] msg)
* 功能:服务器接受来⾃客户端的数据
* 输出参数:名称 msg 类型 ref byte[]
* 返回值:是否读取成功 成功 true 失败 false
*
* 原型:public void serverSendData(byte[] msg)
* 功能:服务器发送数据到客户端
* 输⼊参数:名称 msg 类型 byte[]
* 返回值:⽆
*
* 原型:public void serverSendData(string msg)
* 功能:服务器发送数据到客户端
* 输⼊参数:名称 msg 类型 string
* 返回值:⽆
*
* 原型:public void startClient(byte[] ServerAddress)
* 功能:建⽴⼀个客户端
* 输⼊参数:服务器IP地址 ServerAddress 类型 byte[]
*          例:byte[] ServerAddress=new byte[]{192,168,0,1}
*
* 原型:public void startClient(string ServerAddress)
* 功能:建⽴⼀个客户端
* 输⼊参数:服务器IP地址 ServerAddress 类型 string
*          例:string ServerAddress="192.168.0.1"
*
* 原型:public bool clientReciveData(ref string msg)
* 功能:客户端接受来⾃服务器的数据
* 输出参数:名称 msg 类型 ref string
* 返回值:是否读取成功 成功 true 失败 false
*
* 原型:public bool clientReciveData(ref byte[] msg)
* 功能:客户端接受来⾃服务器的数据
* 输出参数:名称 msg 类型 ref byte[]
* 返回值:是否读取成功 成功 true 失败 false
*
* 原型:public void clientSendData(byte[] msg)
* 功能:客户端发送数据到服务器
吴君如演过的鬼片* 输⼊参数:名称 msg 类型 byte[]
* 返回值:⽆
*
* 原型:public void clientSendData(string msg)
* 功能:客户端发送数据到服务器
* 输⼊参数:名称 msg 类型 string
* 返回值:⽆
*********************************************************
* 算法类->Algorithm说明:
*
* 原型:public uint flaotToHex(float f)
* 功能:浮点数转换为IEEE754格式整数
* 输⼊参数:名称 f 类型 float
* 返回值:符合IEEE754的⽆符号整形
*
* 原型:public string flaotToHexString(float f)
* 功能:浮点数转换为IEEE754格式⼗六进制字符串
* 输⼊参数:名称 f 类型 float
* 返回值:符合IEEE754的⼗六进制字符串
*
* 原型:public float hexTofloat(uint hex)
* 功能:符合IEEE754的⽆符号整形转换为浮点数
* 输⼊参数:名称 hex 类型 uint
* 返回值:浮点数
*
* 原型:public float hexStringTofloat(string hex)
* 功能:符合IEEE754的⼗六进制字符串转换为浮点数
各种操作系统
* 输⼊参数:名称 hex 类型 string
* 返回值:浮点数
*
* 原型:public void curveFitting(double[] x, double[] y, int n, ref double[] a, int m)
* 功能:切⽐雪夫曲线拟合
* 输⼊参数:X轴坐标数组  x 类型 double[]
*          Y轴坐标数组  y 类型 double[]
*          数组取样点数 n 类型 int
*          拟合阶数    m 类型 int                m=拟合阶数+1 如:⼀阶拟合 m=2 则:y=a0+a1*x
* 输出参数:拟合系数    a 类型 ref double[]      数组长度=m+1 如:⼀阶拟合 double[] a=new double[3] 还原后为y=a[0]+a[1]*x 最⼤均⽅差存在a[2]⾥
*                                                  y=a[0]+a[1]*x+a[2]*x^2+a[3]*x^3 ……………………
*
*********************************************************
* 通讯协议类->Protocol说明:
*
* 原型:public string analysis(string order)
* 功能:解析指令
* 输⼊参数:⽤户指令 order 类型 string
*          查询指令:
*                    返回所有节点名称    “node list ?”
*                    读取指定节点的值    “read node ? nodeName”
*          设置指令:
*                    增加节点            “add node #nodeName #k #b”
*                    更新指定名称的节点  “replace node #nodeName #k #b”
*                    删除指定名称的节点  “remove node #nodeName”
* 返回值:返回查询指令的结果字符串
*/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.IO.Ports;
using System.Xml;
using System.Collections;
using System.Net;
using System.Net.Sockets;
namespace ConfigFileReadWrite
{
//XML⽂件操作类
public class XMLConcrol
{
/
/⽂件名,默认为当前可执⾏⽂件⽬录下l
String fileName = System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase+"l";        XmlDocument xml = new XmlDocument();
/*
* 功能:加载配置⽂件。如默认配置⽂件不存在,则新建⼀个
* 输⼊参数:⽆
* 输出参数:⽆
* 返回值:⽆
*/
public void LoadFile()
{
FileInfo fileInfo = new FileInfo(fileName);
if (!fileInfo.Exists)
{
XmlNode node = xml.CreateXmlDeclaration("1.0", "gb2312", "");石红杏最后结局
xml.AppendChild(node);
XmlNode root = xml.CreateElement("root");
xml.AppendChild(root);
xml.Save(fileName);
}
xml.Load(fileName);
}
/
*
* 功能:读取指定节点值        标定模板⼀阶线性:y=kx+b
* 输⼊参数: 节点名称 nodeName 类型 string
* 输出参数: 标校系数 k        类型 ref float
*          标校常数 b        类型 ref float
* 返回值:⽆
*/
public void readNode(string nodeName,ref float k,ref float b)
{
XmlNode root = xml.SelectSingleNode("root");
if (xml.SelectSingleNode("root").ChildNodes.Count > 0)
{
XmlNode nodeOne = root.SelectSingleNode(nodeName);
k = (float)Convert.ToDouble((nodeOne.SelectSingleNode("k")).InnerText);
b = (float)Convert.ToDouble((nodeOne.SelectSingleNode("b")).InnerText);            }
}
/*
* 功能:增加指定名称的节点    标定模板⼀阶线性:y=kx+b
* 输⼊参数: 节点名称 nodeName 类型 string
*          标校系数 k        类型 float
*          标校常数 b        类型 float
* 输出参数:⽆
* 返回值:⽆
*/
public void addNode(string nodeName, float k, float b)
{
XmlNode root = xml.SelectSingleNode("root");
XmlElement newNode = xml.CreateElement(nodeName);
XmlElement inNewNode1 = xml.CreateElement("k");
XmlElement inNewNode2 = xml.CreateElement("b");
inNewNode1.InnerText = Convert.ToString(k);
inNewNode2.InnerText = Convert.ToString(b);
root.AppendChild(newNode);
newNode.AppendChild(inNewNode1);
newNode.AppendChild(inNewNode2);
xml.Save(fileName);
}
/*
* 功能:替换指定名称的节点    标定模板⼀阶线性:y=kx+b
* 输⼊参数: 节点名称 nodeName 类型 string
*          标校系数 k        类型 float
*          标校常数 b        类型 float