好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

Socket报文和端口测试工具的开发(提供源码)

Socket报文和端口测试工具的开发(提供源码)

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

S   ocket测试工具   Socket测试工具源码 

年底不忙了,终于写了一个,提供给大家使用,源码可以随便使用和修改,欢迎多提意见,让这个工具更易用,方便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  > 

 

 

 

标签:  Socket测试工具

作者: Leo_wl

    

出处: http://HdhCmsTestcnblogs测试数据/Leo_wl/

    

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

版权信息

查看更多关于Socket报文和端口测试工具的开发(提供源码)的详细内容...

  阅读:46次