通过实现Import方法来处理协议数据分析,对于http头的拆分可以通过下载完整代码查看. 实现一个HTTP服务并在浏览中访问
组件提供基础的服务对象,只需要在继承指写对应的协议分析器即可,用起来也非常简单方便.
class Program:ServerBase<Beetle.Packages.HttpPackage>
{
static void Main(string[] args)
{
//初如化组件
TcpUtils.Setup("beetle");
Program server = new Program();
server.Listens = 1000;
//在所有IP的8088端口上监听服务
server.Open(8088);
Console.WriteLine("Beetle Http Server start@8088");
System.Threading.Thread.Sleep(-1);
}
protected override void OnConnected(object sender, ChannelEventArgs e)
{
base.OnConnected(sender, e);
e.Channel.EnabledSendCompeletedEvent = true;
e.Channel.SendMessageCompleted = (o, i) => {
HttpPackage.HttpAdater adapter = (HttpPackage.HttpAdater)i.Messages[i.Messages.Count - 1];
//消息发送完成后判断是否关闭对应的连接
if (adapter.Message is HttpPackage.HttpHeader)
{
if (((HttpPackage.HttpHeader)adapter.Message).ContentLength == 0 && e.Channel != null)
e.Channel.Dispose();
}
else if (adapter.Message is HttpPackage.HttpDataSegment)
{
if (((HttpPackage.HttpDataSegment)adapter.Message).Eof && e.Channel != null)
e.Channel.Dispose();
}
};
}
//错误处理事件,可以获取协议分析和逻辑处理环节中出现的异常
protected override void OnError(object sender, ChannelErrorEventArgs e)
{
base.OnError(sender, e);
Console.WriteLine("{0} error:{1}", e.Channel.EndPoint, e.Exception.Message);
Console.WriteLine(e.Exception.StackTrace);
}
//连接释放过程
protected override void OnDisposed(object sender, ChannelDisposedEventArgs e)
{
base.OnDisposed(sender, e);
}
//消息接收处理事件
protected override void OnMessageReceive(PacketRecieveMessagerArgs e)
{
base.OnMessageReceive(e);
if (e.Message is HttpPackage.HttpHeader)
{
OnRequestHeader(e.Channel, (HttpPackage.HttpHeader)e.Message);
}
else if (e.Message is HttpPackage.HttpDataSegment)
{
OnRequestSegment(e.Channel, (HttpPackage.HttpDataSegment)e.Message);
}
}
//得到请求头信息处理过程
private void OnRequestHeader(TcpChannel channel, Beetle.Packages.HttpPackage.HttpHeader header)
{
//Console.WriteLine(header.MethodInfo);
//foreach (object key in header.Headers.Keys)
//{
// Console.WriteLine("{0}:t{1}", key, header[(string)key]);
/
(责任编辑:12图资源库)