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报文和端口测试工具的开发(提供源码)的详细内容...