转载一个很经典的--C# Socket TCP和UDP报文及端口测试工具的开发(提供源码)
转载地址: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报文及端口测试工具的开发(提供源码)相关推荐
- 发布一个练笔的 Android 阅读器,轻微仿91 Android 阅读器【后续将提供源码】
由于是练笔Demo,所以界面上和优化方面并没有太多考虑,只是实现了一些基础功能和一些阅读器所必要的几个功能 阅读界面如下: 底下滚动条,模仿91阅读器的方式显示,按照文本长度百分比记算显示进度条,文本 ...
- android 仿阅读,发布一个练笔的 Android 阅读器,轻微仿91 Android 阅读器【后续将提供源码】...
由于是练笔Demo,所以界面上和优化方面并没有太多考虑,只是实现了一些基础功能和一些阅读器所必要的几个功能 阅读界面如下: 底下滚动条,模仿91阅读器的方式显示,按照文本长度百分比记算显示进度条,文本 ...
- 【java毕业设计】基于java+Socket+Eclipse的坦克大战游戏设计与实现(毕业论文+程序源码)——坦克大战游戏
基于java+Socket+Eclipse的坦克大战游戏设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于java+Socket+Eclipse的坦克大战游戏设计与实现,文章末尾附有本毕业设 ...
- java毕业设计——基于java+Socket+sqlserver的远程监控系统软件设计与实现(毕业论文+程序源码)——远程监控系统
基于java+Socket+sqlserver的远程监控系统软件设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于java+Socket+sqlserver的远程监控系统软件设计与实现,文章 ...
- tcp,udp报文最大长度
tcp,udp报文最大长度是怎么样的呢? 先来看看各个报文格式: ip报文 tcp报文 udp报文 ip和udp都有16位的长度字段,所以ip和udp报文的最大负载长度应该为2^16,64KB 网络层 ...
- python监听多个udp端口_用Python写一个UDP端口测试工具(一)
需求 最近有个运维需求,需要测试客户端的UDP端口与服务器的连通性. 需求也很简单:客户端测往服务端发UDP包,服务端收到包后响应客户端,当客户端能收到服务端的响应则可断定端口是可达的.但是客户端需要 ...
- 学编程很枯燥?用Python制作3个小游戏,边玩边学(含源码)
经常听到有朋友说,学习编程是一件非常枯燥无味的事情.其实,大家有没有认真想过,可能是我们的学习方法不对? 比方说,你有没有想过,可以通过打游戏来学编程?今天我想跟大家分享几个Python小游戏,教你如 ...
- 路由器NAT功能如何转发数据(路由器对ICMP、TCP、UDP报文处理)
目录 一.引言 二.以太网帧及IP数据报格式回顾 三.路由器对ICMP.TCP.UDP报文处理 3.1.路由器对ICMP报文处理 3.2.路由器对UDP报文处理 3.3.路由器对TCP报文处理 四.遗 ...
- mysql socket tcp udp_TCP/UDP/HTTP/SOCKET深入浅出
该篇文章主要回顾--TCP/IP协议族中的TCP/UDP.HTTP:还有Socket.(--该文很干,酝酿了许久!你能耐心看完吗?) 另外还分享c/c++ Linux,Nginx,MySQL,Redi ...
最新文章
- 嵌入式编程与c语言有何区别,有的嵌入式设备也提供C++编译器,那还有理由坚持使用C语言吗?...
- 一文读懂MySQL查询语句的执行过程
- jq 直接调用php文件_PHP性能分析工具,你在用哪一个?
- 如何下载和安装SQL Server数据库实验助手(DEA)
- Android NDK JNI C++ 3
- 『WPF』DataGrid的使用
- java去除音频无声_java – 使用FFMPEG和silencedetect删除音频静音
- Visual Studio 2013安装教程
- KISS保持简单:纪念丹尼斯·里奇
- 计算机函数sumif实例,Excel2019中SUMIF函数的语法及使用方法与实例
- 浅谈大数据时代web数据可视化探析
- 各大硬核应用渠道开放平台SDK文档地址
- 赵俊峰内蒙古大学计算机学院,内蒙古大学计算机学院研究生导师:赵俊峰
- iOS 判断系统版本
- 只用一行代码就能搞定,博弈论究竟是什么神仙算法?
- overflow溢出处理
- 治疗开发拖延症-任务拆分和执行
- 我写了个随机点名系统,非常好用~ 我给它取名叫做——随机点名系统
- 国家计算机职业技能鉴定4级考试内容大全
- 基于Python的工人员工工资管理系统