Socket报文和端口测试工具的开发(提供源码)
2013-01-26 18:25 GPS视频平台产品经理 阅读(9496) 评论(22) 编辑 收藏 举报因为自己经常做Socket开发,经常要调试和维护多个服务器端和客户端的通信、报文数据等,网上的工具都是功能简单,用的不爽,所以一直都想自己写一个。
Socket测试工具 已下载 822 次
Socket测试工具源码 已下载 894 次
年底不忙了,终于写了一个,提供给大家使用,源码可以随便使用和修改,欢迎多提意见,让这个工具更易用,方便Socket编程开发人鱼。主要的功能如下:
1.建立Socket测试服务器端和测试客户端,并向其他端发送或接受报文数据,支持自动发送和自动应答,支持UDP和TCP;
2.录入的IP地址和端口等参数数据进行本地XML序列化,下次自动打开。(这个是我需要的,不用每次都录入各种IP地址端口了);
3.接受或发送的报文数据,可以直接保存在日志文件当中,便于离线分析。
4.服务器端,可以查看接入的各个连接信息;
5.支持AscII和16进制的数据发送和接收显示。
由于界面要同时支持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进制格式或AscII public string Format { get; set; } public string ServerIp { get; set; } public int Port { get; set; } //TCP或UDP public 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 XMLReader XmlReader 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> <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>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库