转载地址:http://www.ltmonitor.com/blog/?p=285

因为自己经常做Socket开发,经常要调试各种协议,如TCP、UDP和SIP等协议,还要维护多个服务器端和客户端的通信、报文数据等,网上的TCP和UDP测试工具都是功能简单,用的不爽,特别是二进制报文的发送支持上还有压力测试上功能都不够,所以一直都想自己写一个。

Socket测试工具 已下载 1178 次   Socket测试工具源码 已下载 1286 次

年底不忙了,终于写了一个,提供给大家使用,源码可以随便使用和修改,欢迎多提意见,让这个工具更易用,方便Socket编程开发人员。主要的亮点功能如下:

1.建立Socket测试服务器端和测试客户端,并向其他端发送或接受报文数据,支持自动发送和自动应答,支持UDP和TCP;

2.录入的IP地址和端口等参数数据进行本地XML序列化,下次自动打开。(这个是我需要的,不用每次都录入各种IP地址端口了);

3.接受或发送的报文数据,可以直接保存在日志文件当中,便于离线分析。

4.服务器端,可以查看接入的各个连接信息;

5.支持AscII和16进制的数据发送和接收显示,这样就支持了二进制的报文数据测试,只需要从生产环境中获取到报文,以16进制的字符串形式拷贝到工具中即可由工具转换成字节数组发送出。

6.可以用于编程开发,带有全套UI界面和socket源码、日志,稍加修改就直接用于自己的产品当中,省去了很多繁琐的工作,如界面监控、日志跟踪等操作。

7.可以建立多个客户端对同一服务器进行压力测试,在服务器端可以跟踪多个连接,并可跟踪每个连接的信息,可以终止某个连接,也可单独对某一个连接进行数据应答。

由于界面要同时支持TCP和UDP的数据通信,所以编写了两个接口IServer和IClient,便于屏蔽底层协议不同,造成发送和接收行为的不同,同时也将界面和通信剥离分开。

public interface IServer{//初始化void Init(string serverIp, int port);//从服务器端给某个连接发送数据void Send(string connId, byte[] data, int length);//监听int Listen();//得到当前的连接List<IConnection> GetConnectionList();//Socket事件event ReceivedHandler OnDataReceived;event SocketErrorHandler OnSocketError;void Close();}

为了保存参数数据,所以构造了一个SocketInfo类,对应客户端和服务器端,然后将这个集合序列化到XML文件中。每次打开程序后自动反序列化,读取数据,并生成界面。

序列化的代码如下:

[Serializable]public class SocketInfo{public string Name { get; set; }//Server端或客户端类型public string Type { get; set; }//16进制格式或AscIIpublic string Format { get; set; }public string ServerIp { get; set; }public int Port { get; set; }//TCP或UDPpublic string Protocol { get; set; }//报文数据public string Data {get;set;}//是否自动发送或接收数据public Boolean IsAuto {get;set;}public SocketInfo(){Format = "AscII";Protocol = "Tcp";Port = 8890;ServerIp = "127.0.0.1";Data = "请录入测试数据";}}

public class MySerializer{      public static void Serialize<T>(T value, string xmlFileName){if (value == null){return;}XmlSerializer serializer = new XmlSerializer(typeof(T));XmlWriterSettings settings = new XmlWriterSettings();settings.Encoding = new UnicodeEncoding(false, false);settings.Indent = false;settings.OmitXmlDeclaration = false;FileStream fs = new FileStream(xmlFileName, FileMode.OpenOrCreate);serializer.Serialize(fs, value);fs.Close();}public static T Deserialize<T>(string xmlFileName){if (string.IsNullOrEmpty(xmlFileName)){return default(T);}XmlSerializer serializer = new XmlSerializer(typeof(T));//XmlSerializer serializer = new XmlSerializer(typeof(ArrayList));XmlReaderSettings settings = new XmlReaderSettings();//settings.
FileStream fs = null;try{fs = new FileStream(xmlFileName, FileMode.Open);// Deserialize the content of the XML file to a Contact array // utilizing XMLReaderXmlReader reader = new XmlTextReader(fs);T contacts = (T)serializer.Deserialize(reader);return contacts;}catch (FileNotFoundException){// Do nothing if the file does not exists
            }finally{if (fs != null) fs.Close();}return default(T);}}

客户端的报文和服务器端的报文数据存放在Client.log和Server.log两个文件当中.主要是借助了Log4net的配置实现的. 这样做非常省事,通过log4net配置可以为每一个类配置一个独立的日志,达到了记录并跟踪数据的目的,避免自己再写文件的IO操作,以下是为Server类和Client类配置了Client.log和Server.log两个独立日志文件,方便跟踪。

<log4net><root><level value="ALL" /><appender-ref ref="RollingFileAppender" /></root><appender name="ClientLogFileAppender" type="log4net.Appender.RollingFileAppender"><param name="File" value="client.log"/><lockingModel type="log4net.Appender.FileAppender+MinimalLock" /><appendToFile value="true" /><rollingStyle value="Size" /><maxSizeRollBackups value="3" /><maximumFileSize value="2MB" /><staticLogFileName value="true" /><layout type="log4net.Layout.PatternLayout"><conversionPattern value="记录时间:%date 日志:%message%newline" /></layout></appender><logger name="SocketTool.ClientForm"><level value="DEBUG" /><appender-ref ref="ClientLogFileAppender" /></logger><appender name="ServerLogFileAppender" type="log4net.Appender.RollingFileAppender"><param name="File" value="server.log"/><lockingModel type="log4net.Appender.FileAppender+MinimalLock" /><appendToFile value="true" /><rollingStyle value="Size" /><maxSizeRollBackups value="3" /><maximumFileSize value="2MB" /><staticLogFileName value="true" /><layout type="log4net.Layout.PatternLayout"><conversionPattern value="记录时间:%date 日志:%message%newline" /></layout></appender><logger name="SocketTool.ServerForm"><level value="DEBUG" /><appender-ref ref="ServerLogFileAppender" /></logger></log4net>

标签: Socket

发表评论

转载一个很经典的--C# Socket TCP和UDP报文及端口测试工具的开发(提供源码)相关推荐

  1. 发布一个练笔的 Android 阅读器,轻微仿91 Android 阅读器【后续将提供源码】

    由于是练笔Demo,所以界面上和优化方面并没有太多考虑,只是实现了一些基础功能和一些阅读器所必要的几个功能 阅读界面如下: 底下滚动条,模仿91阅读器的方式显示,按照文本长度百分比记算显示进度条,文本 ...

  2. android 仿阅读,发布一个练笔的 Android 阅读器,轻微仿91 Android 阅读器【后续将提供源码】...

    由于是练笔Demo,所以界面上和优化方面并没有太多考虑,只是实现了一些基础功能和一些阅读器所必要的几个功能 阅读界面如下: 底下滚动条,模仿91阅读器的方式显示,按照文本长度百分比记算显示进度条,文本 ...

  3. 【java毕业设计】基于java+Socket+Eclipse的坦克大战游戏设计与实现(毕业论文+程序源码)——坦克大战游戏

    基于java+Socket+Eclipse的坦克大战游戏设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于java+Socket+Eclipse的坦克大战游戏设计与实现,文章末尾附有本毕业设 ...

  4. java毕业设计——基于java+Socket+sqlserver的远程监控系统软件设计与实现(毕业论文+程序源码)——远程监控系统

    基于java+Socket+sqlserver的远程监控系统软件设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于java+Socket+sqlserver的远程监控系统软件设计与实现,文章 ...

  5. tcp,udp报文最大长度

    tcp,udp报文最大长度是怎么样的呢? 先来看看各个报文格式: ip报文 tcp报文 udp报文 ip和udp都有16位的长度字段,所以ip和udp报文的最大负载长度应该为2^16,64KB 网络层 ...

  6. python监听多个udp端口_用Python写一个UDP端口测试工具(一)

    需求 最近有个运维需求,需要测试客户端的UDP端口与服务器的连通性. 需求也很简单:客户端测往服务端发UDP包,服务端收到包后响应客户端,当客户端能收到服务端的响应则可断定端口是可达的.但是客户端需要 ...

  7. 学编程很枯燥?用Python制作3个小游戏,边玩边学(含源码)

    经常听到有朋友说,学习编程是一件非常枯燥无味的事情.其实,大家有没有认真想过,可能是我们的学习方法不对? 比方说,你有没有想过,可以通过打游戏来学编程?今天我想跟大家分享几个Python小游戏,教你如 ...

  8. 路由器NAT功能如何转发数据(路由器对ICMP、TCP、UDP报文处理)

    目录 一.引言 二.以太网帧及IP数据报格式回顾 三.路由器对ICMP.TCP.UDP报文处理 3.1.路由器对ICMP报文处理 3.2.路由器对UDP报文处理 3.3.路由器对TCP报文处理 四.遗 ...

  9. mysql socket tcp udp_TCP/UDP/HTTP/SOCKET深入浅出

    该篇文章主要回顾--TCP/IP协议族中的TCP/UDP.HTTP:还有Socket.(--该文很干,酝酿了许久!你能耐心看完吗?) 另外还分享c/c++ Linux,Nginx,MySQL,Redi ...

最新文章

  1. 嵌入式编程与c语言有何区别,有的嵌入式设备也提供C++编译器,那还有理由坚持使用C语言吗?...
  2. 一文读懂MySQL查询语句的执行过程
  3. jq 直接调用php文件_PHP性能分析工具,你在用哪一个?
  4. 如何下载和安装SQL Server数据库实验助手(DEA)
  5. Android NDK JNI C++ 3
  6. 『WPF』DataGrid的使用
  7. java去除音频无声_java – 使用FFMPEG和silencedetect删除音频静音
  8. Visual Studio 2013安装教程
  9. KISS保持简单:纪念丹尼斯·里奇
  10. 计算机函数sumif实例,Excel2019中SUMIF函数的语法及使用方法与实例
  11. 浅谈大数据时代web数据可视化探析
  12. 各大硬核应用渠道开放平台SDK文档地址
  13. 赵俊峰内蒙古大学计算机学院,内蒙古大学计算机学院研究生导师:赵俊峰
  14. iOS 判断系统版本
  15. 只用一行代码就能搞定,博弈论究竟是什么神仙算法?
  16. overflow溢出处理
  17. 治疗开发拖延症-任务拆分和执行
  18. 我写了个随机点名系统,非常好用~ 我给它取名叫做——随机点名系统
  19. 国家计算机职业技能鉴定4级考试内容大全
  20. 基于Python的工人员工工资管理系统

热门文章

  1. [Games101] Lecture 03-04 Transformation
  2. 小程序 : js获取今日日期、加日期、减日期; 判断今日 、判断昨日
  3. 第6例:菲波那切数列
  4. 蜻蜓FM语音下载(qingtingdown)
  5. matlab画一元函数图
  6. warnings模块
  7. 抖音小店无货源,怎么操作可以出单?资深电商人在线分享
  8. 高数下|级数4|手写笔记(绝对收敛与条件收敛)
  9. linux基础(五)----linux命令系统学习----系统管理命令
  10. BN和Dropout在训练和测试时的差别