zoukankan      html  css  js  c++  java
  • Socket报文和端口测试工具的开发(提供源码)

    因为自己经常做Socket开发,经常要调试和维护多个服务器端和客户端的通信、报文数据等,网上的工具都是功能简单,用的不爽,所以一直都想自己写一个。

    Socket测试工具Socket测试工具 已下载 822 次   Socket测试工具源码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>
    我的微信号: jt808_com 添加微信
  • 相关阅读:
    利用模板实现c++智能指针
    movit 相关函数(二)
    moveit相关函数解释
    ros常用函数(1)
    Qtcreator中cin函数无法在application output中进行输入的问题的解决
    c++速成,适合有c基础的朋友(3)
    【重要通知】本博客不再更新,更多教程请访问 makermaker.cc
    BBC micro:bit 学习资源汇总(最近更新2019年1月6日....)
    [20个项目学会BBC micro:bit编程] 20-无线通信
    [20个项目学会BBC micro:bit编程] 19-直流电机控制
  • 原文地址:https://www.cnblogs.com/productivity/p/2878047.html
Copyright © 2011-2022 走看看