误码率测试源程序.doc_第1页
误码率测试源程序.doc_第2页
误码率测试源程序.doc_第3页
误码率测试源程序.doc_第4页
误码率测试源程序.doc_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;using System.Xml;using System.Threading;using System.Net;using System.Net.Sockets;using System.Globalization;using System.Collections;namespace BER public partial class Form1 : Form delegate void WriteToListBox(byte data, int type); delegate void UpdateTextBox(); delegate void UpdateClientMessage(string msg); delegate void delegateSetPause(); private int m_nMaxSendCount = 0;/ 设置最大发送数量 private string m_szSendData = ;/ 发送数据字符串 private int m_iSendDataLength = 0;/ 发送数据长度 /TCP Server 参数 private TCP_Server m_TcpServer = new TCP_Server(); private string m_IP = ; private int m_nPort = 8888; private int m_nSendDelay = 100; private byte m_bySendData = new byte1024;/ 发送数据缓存 private byte m_byRecvData = new byte1024;/ 接收数据缓存 private byte m_bysend;/ 发送数据缓存 private UdpClient m_UDPClient; /TCP Client 参数 private TcpClient m_TCPClient; private NetworkStream m_TCPClientStream; private bool m_bTCPConnect = false; private Thread m_SendThread; private Thread m_ReceiveThread; private int m_nReceiveTimeOut = 500; private Thread m_DisplayThread; private bool m_budpExit = false; private bool m_bExit = false; private bool m_bWait = false; private bool m_bSend = true; private IPEndPoint ServerIpEndPoint; private Random randObj = new Random(); private bool m_bRandom = false; private int m_iRandomLen = 0; /private bool m_bInvert = false; private int m_iInvertIdx = 0; private bool m_bCountEnough = false; private string m_szStartime = ; private string m_szStoptime = ; private int m_iPlanSendCount = 0; private int m_iSendCount = 0; private int m_iRecvCount = 0; private int m_iCorrectCout = 0; private int m_iErrorCout = 0; private Double m_dBER = 0.0; private int m_onecount = 0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4, 1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5, 1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5, 2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6, 1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5, 2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6, 2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6, 3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7, 1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5, 2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6, 2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6, 3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7, 2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6, 3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7, 3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7, 4,5,5,6,5,6,6,7,5,6,6,7,6,7,7,8; /* * 函数功能:程序主界面初始化 * 输入参数:无 * 输出参数:无 * 描述: */ public Form1() / 初始化 InitializeComponent(); / 读取配置文件2/2/2010 ReadXml(); / 显示配置信息 FillData(); int ret = m_TcpServer.Init(m_nPort); if (ret = 0) labelServer.Text = 消息:服务器初始化成功; else labelServer.Text = 消息:服务器初始化失败; m_TCPClient = new TcpClient(); labelClient.Text = 消息:客户端初始化成功; m_ReceiveThread = new Thread(new ThreadStart(TCPReceive); m_ReceiveThread.Start(); m_DisplayThread = new Thread(new ThreadStart(Display); m_DisplayThread.Start(); /* * 函数功能:显示发送数量、接收数量、正确数量、错误数量和误码率 * 输入参数:无 * 输出参数:无 * 描述:线程调用 */ private void Display() / 显示发送数量、接收数量、正确数量、错误数量和误码率 UpdateTextBox wt = new UpdateTextBox(UpdateInformation); while (!m_bExit) try this.Invoke(wt); Thread.Sleep(20); catch (Exception e) e.ToString(); /* * 函数功能:显示配置文件信息 * 输入参数:无 * 输出参数:无 * 描述: */ private void FillData() try maskedTextBoxIP.Text = m_IP.ToString(); maskedTextBoxPort.Text = m_nPort.ToString(); maskedTextBoxSendCount.Text = m_nMaxSendCount.ToString(); maskedTextBoxData.Text = m_szSendData; maskedTextBoxDelay.Text = m_nSendDelay.ToString(); catch (Exception e) Console.WriteLine(e.ToString(); /* * 函数功能:读取XML文件 * 输入参数:无 * 输出参数:整数,读取成功标志 * 描述:读取文件成功,返回;读取文件失败,返回 */ private int ReadXml() try / 查找配置问价路径 XmlDocument doc = new XmlDocument(); string UserinfoPath = System.Environment.CurrentDirectory + userinfo.xml; doc.Load(UserinfoPath); /获取当前项目所在根目录 string tmp = ; /查找个配置信息 m_IP = (XmlNode)doc.SelectSingleNode(/地址).InnerText.ToString(); m_IP.Trim(); tmp = (XmlNode)doc.SelectSingleNode(/端口号).InnerText.ToString(); int.TryParse(tmp, out m_nPort); tmp = (XmlNode)doc.SelectSingleNode(/发送数量).InnerText.ToString(); int.TryParse(tmp, out m_nMaxSendCount); m_szSendData = (XmlNode)doc.SelectSingleNode(/数据).InnerText.ToString(); m_szSendData.ToUpper(); m_szSendData.Trim(); tmp = (XmlNode)doc.SelectSingleNode(/发送延时).InnerText.ToString(); int.TryParse(tmp, out m_nSendDelay); if (m_nSendDelay 0) m_nSendDelay = 0; / 3/12/2010 tmp = (XmlNode)doc.SelectSingleNode(/接收超时).InnerText.ToString(); int.TryParse(tmp, out m_nReceiveTimeOut); if (m_nReceiveTimeOut 0) m_nReceiveTimeOut = 0; return 0; catch (Exception e) Console.WriteLine(e.ToString(); return 1; /* * 函数功能:将界面信息,更新至配置文件 * 输入参数:无 * 输出参数:无 * 描述: */ private void UpdateData() try m_IP = maskedTextBoxIP.Text; int.TryParse(maskedTextBoxPort.Text, out m_nPort); int.TryParse(maskedTextBoxSendCount.Text, out m_nMaxSendCount); m_szSendData = maskedTextBoxData.Text; String2Byte(m_szSendData, ref m_bySendData, ref m_iSendDataLength); int.TryParse(maskedTextBoxRandLength.Text, out m_iRandomLen); int.TryParse(textBoxInvert.Text, out m_iInvertIdx); int.TryParse(maskedTextBoxDelay.Text, out m_nSendDelay); if (m_nSendDelay 0) if (i 0) tmpstr = instring.Substring(0, pos); byte.TryParse(tmpstr, NumberStyles.AllowHexSpecifier, null, out outbytei); i+; instring = instring.Substring(pos + 1, length - pos - 1); length = instring.Length; else tmpstr = instring; byte.TryParse(tmpstr, NumberStyles.AllowHexSpecifier, null, out outbytei); i+; outbytei = 0; length = 0; else break; datalength = i; catch (Exception e) Console.WriteLine(e.ToString(); return 0; /* * 函数功能:byte数组转换为字符串 * 输入参数:输入byte数组,输入数据长度,输出字符串 * 输出参数:整数,成功返回,失败返回 * 描述:byte数组转换为空格隔开的十六进制字符串 */ public int Byte2String(byte intbyte, int datalength, ref String outstring) string tmpstr = ; int i = 0; try for (i = 0; i datalength; i+) if (intbytei 16) tmpstr += 0 + intbytei.ToString(X) + ; else tmpstr += intbytei.ToString(X) + ; catch (Exception e) Console.WriteLine(e.ToString(); outstring = tmpstr.Trim(); return 0; /* * 函数功能:截取一定长度的byte数组输出 * 输入参数:输入byte数组,子数组的长度 * 输出参数:输出的截取后的子byte数组 * 描述: */ private byte SubByteArray(byte bArray, int len) byte tmpdata = new bytelen; try int i; for (i = 0; i 0) m_iRecvCount += m_bysend.Length * 8; int count = m_bysend.Length; int i; for (i = 0; i 500) /删除所有的内容 listBoxSend.Items.Clear(); / 在列表末尾显示数据 Byte2String(data, data.Length, ref tmpstring); listBoxSend.Items.Add(tmpstring); listBoxSend.SelectedIndex = listBoxSend.Items.Count - 1; else if (listBoxReceive.Items.Count 500) /删除所有的内容 listBoxReceive.Items.Clear(); Byte2String(data, data.Length, ref tmpstring); listBoxReceive.Items.Add(tmpstring); listBoxReceive.SelectedIndex = listBoxReceive.Items.Count - 1; catch (Exception e) Console.WriteLine(e.ToString(); /* * 函数功能:将发送数量、接收数量等误码率信息显示至界面对应位置 * 输入参数:无 * 输出参数:无 * 描述: */ private void UpdateInformation() try textBoxSendCount.Text = m_iSendCount.ToString(); textBoxReceiveCount.Text = m_iRecvCount.ToString(); textBoxCorrectCount.Text = m_iCorrectCout.ToString(); /if (!m_TCPClient.Connected) /m_iErrorCout = m_iSendCount - m_iCorrectCout; /m_dBER = (Double)m_iErrorCout / m_iSendCount; textBoxErrorCount.Text = m_iErrorCout.ToString(); textBoxBER.Text = m_dBER.ToString(); catch (Exception e) Console.WriteLine(e.ToString(); /* * 函数功能:停止发送数据线程 * 输入参数:无 * 输出参数:无 * 描述:停止发送数据,更新结束时间 */ private void StopSendData() try m_szStoptime = DateTime.Now.ToString(yyyy-MM-dd HH:mm:ss); UpdateTextBox wt = new UpdateTextBox(UpdateStopTime); this.Invoke(wt); /UDPClose(); TCPClose(); catch (Exception e) e.ToString(); /* * 函数功能:更新程序停止发送数据时间 * 输入参数:无 * 输出参数:无 * 描述:更新程序停止发送数据时间 */ private void UpdateStopTime() try textBoxStopTime.Text = m_szStoptime; catch (Exception e) e.ToString(); /* * 函数功能:更新TCP客户端连接情况消息,显示至界面 * 输入参数:需要显示的消息 * 输出参数:无 * 描述:更新TCP客户端连接情况消息,显示至界面 */ private void ClientMessage(string msg) try labelClient.Text = msg; catch (Exception e) e.ToString(); /* * 函数功能:开始发送按钮单击事件 * 输入参数:无 * 输出参数:无 * 描述:启动线程开始发送数据 */ private void buttonStar_Click(object sender, EventArgs e) UpdateData(); int.TryParse(maskedTextBoxSendCount.Text, out m_iPlanSendCount); m_iSendCount = 0; m_iRecvCount = 0; m_iCorrectCout = 0; m_iErrorCout = 0; m_dBER= 0.0; /判断输入参数合法性 Thread.Sleep(100); /if (m_bInvert) / /

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论