基于Socket的.NET应用组件
2006-07-04 14:09
274 查看
HFSoft.Net组件主要用于简化基于TCP/IP下Socket的程序编写;它在.Net的Socket基础进行应用层面的封装,使开发人员编写基于Socket的网络程序更方便.
组件主要包括以下几个对象: NetListener, IChannel, IMessage和MessageChannel.
NetListener[/b]
服务监听对象,用于连接请求、数据接收和发送处理。对象提供连接请求、连接断开、数据接收事件和连接管理等。
IChannel[/b]
数据处理通道,主要用于数据的发送和接收;服务端通道和请求端通道统一由IChannel描述。请求端通道通过NetListener的CreateChannel方法创建,服务端通道由NetListener内部创建。
IChannel具体描述:
/// <summary>
/// 数据处理通道
/// </summary>
public interface IChannel
{
/// <summary>
/// 通道关闭事件
/// </summary>
event EventChannelClose Closed;
/// <summary>
/// 运行错误事件
/// </summary>
event EventRunError RunError;
/// <summary>
/// 通道ID,在服务端用于标识唯一性
/// </summary>
string ID
{
get;
set;
}
/// <summary>
///通道名称
/// </summary>
string Name
{
get;
set;
}
/// <summary>
/// 发送数据,当数据过大时通道会自动对数据进行分割和接收
/// </summary>
void Send(Byte[] bytes);
/// <summary>
/// 关闭当前连接
/// </summary>
void Close();
/// <summary>
/// 数据发送和接收大小
/// </summary>
int ReceiveSize
{
get;
set;
}
/// <summary>
/// 当前通道的Socket对象
/// </summary>
System.Net.Sockets.Socket Socket
{
get;
}
/// <summary>
/// 数据接收事件
/// </summary>
event EventChannelReceive Receive;
/// <summary>
/// 获取最近一次处理的错误信息
/// </summary>
Exception Error
{
get;
}
/// <summary>
/// 获了最近一次接收的数据
/// </summary>
byte[] Data
{
get;
}
/// <summary>
/// 获取或设置当前通道是否安全
/// </summary>
bool Sureness
{
get;
set;
}
}
IMessageChannel[/b]
消息处理通道,是基于IChannel的扩展。它主要提供对象的发送和接收。IMessageChannel处理的对象必须实现IMessage接口,并不需要可序列化标记。当发送对象数据超过了通道处理范围时,通道会自动对数据分割发送和接收。
IMessageChannel具体描述:
/// <summary>
/// 消息处理通道描述
/// </summary>
public interface IMessageChannel:IDisposable
{
/// <summary>
/// 运行错误事件
/// </summary>
event EventRunError RunError;
/// <summary>
/// 基础数据通道
/// </summary>
IChannel BaseChannel
{
get;
}
/// <summary>
/// 消息接收事件
/// </summary>
event EventMessageReceive Receive;
/// <summary>
/// 关闭消息通道
/// </summary>
void Close();
/// <summary>
/// 消息发送
/// </summary>
/// <param name="message">IMessage</param>
void Send(IMessage message);
/// <summary>
/// 获取最后一次接收的消息对象
/// </summary>
IMessage Message
{
get;
}
/// <summary>
/// 获取最后一次处理的错误信息
/// </summary>
System.Exception Error
{
get;
}
}
IMessage[/b]
消息描述接口,用于描述对象的保存和加载过程。当需要发送和接收对象时,对象必须实现IMessage接口,用于实现对象数据的保存和加载。
/// <summary>
/// 消息对象描述接口
/// </summary>
public interface IMessage
{
/// <summary>
/// 对象信息保存方法
/// </summary>
/// <returns>byte[]</returns>
Byte[] Save();
/// <summary>
/// 对象加载信息方法
/// </summary>
/// <param name="bytes">byte[]</param>
void Load(byte[] bytes);
}
为了使用方便,组件提供MessageAdapter对象用于简化消息对象信息的保存和加载。当从MessageAdapter派生类只需要重写protected override object OnSave()和protected override void OnLoad(object obj)方法。
一个简单的登陆验证消息对象:
/// <summary>
/// 登陆验证对象
/// </summary>
public class Login:HFSoft.Net.Message.MessageAdapter
{
public Login()
{
}
private string mClientName;
/// <summary>
/// 登陆的名称
/// </summary>
public string ClientName
{
get
{
return mClientName;
}
set
{
mClientName= value;
}
}
private string mClientPWD;
/// <summary>
/// 登陆密码
/// </summary>
public string ClientPWD
{
get
{
return mClientPWD;
}
set
{
mClientPWD= value;
}
}
protected override object OnSave()
{
object[] objs = new object[]{base.OnSave (),ClientName,ClientPWD};
return objs;
}
protected override void OnLoad(object obj)
{
Object[] objs =(object[])obj;
base.OnLoad (objs[0]);
ClientName =(string)objs[1];
ClientPWD =(string)objs[2];
}
}
IPAddress ip = IPAddress.Parse("192.168.1.229);
IPEndPoint point = new IPEndPoint(ip,8080);
Config.Listener = new NetListener(point);
Config.Listener.Start();
//请求连接跟踪
Config.Listener.Accepted += new EventClientPoolChange(ClientConn);
//释放连接跟踪
Config.Listener.Released += new EventClientPoolChange(ClientDis);
//数据接收跟踪
Config.Listener.Receive += new EventChannelReceive(DataReader);
//运行错误跟踪
Config.Listener.RunError += new EventRunError(OnError);
创建连接:
IPAddress ip = IPAddress.Parse("192.168.0.229);
IPEndPoint point = new IPEndPoint(ip,8080);
HFSoft.Net.IChannel ch = HFSoft.Net.NetListener.CreateChannel( point);
对象只要实现的IMessage接口或承继MessageAdapter就可以接受IMessageChannel的处理。当你制定的消息对象过于庞大时,IMessageChannel会自动对消息进行切割并进行发送和接收处理。
创建消息处理通道:
IPAddress ip = IPAddress.Parse(txtIPAddress.Text);
IPEndPoint point = new IPEndPoint(ip,(int)txtIPPort.Value);
IChannel ch = HFSoft.Net.NetListener.CreateChannel(point);
IMessageChannel mc = new HFSoft.Net.Message.MessageChannel(ch);
向服务端发送验证请求对象:
Message.Library.Login login = new Message.Library.Login();
login.ClientName = txtUserName.Text;
mc.Send(login);
net1.1代码
net2.0代码
组件主要包括以下几个对象: NetListener, IChannel, IMessage和MessageChannel.
NetListener[/b]
服务监听对象,用于连接请求、数据接收和发送处理。对象提供连接请求、连接断开、数据接收事件和连接管理等。
IChannel[/b]
数据处理通道,主要用于数据的发送和接收;服务端通道和请求端通道统一由IChannel描述。请求端通道通过NetListener的CreateChannel方法创建,服务端通道由NetListener内部创建。
IChannel具体描述:
/// <summary>
/// 数据处理通道
/// </summary>
public interface IChannel
{
/// <summary>
/// 通道关闭事件
/// </summary>
event EventChannelClose Closed;
/// <summary>
/// 运行错误事件
/// </summary>
event EventRunError RunError;
/// <summary>
/// 通道ID,在服务端用于标识唯一性
/// </summary>
string ID
{
get;
set;
}
/// <summary>
///通道名称
/// </summary>
string Name
{
get;
set;
}
/// <summary>
/// 发送数据,当数据过大时通道会自动对数据进行分割和接收
/// </summary>
void Send(Byte[] bytes);
/// <summary>
/// 关闭当前连接
/// </summary>
void Close();
/// <summary>
/// 数据发送和接收大小
/// </summary>
int ReceiveSize
{
get;
set;
}
/// <summary>
/// 当前通道的Socket对象
/// </summary>
System.Net.Sockets.Socket Socket
{
get;
}
/// <summary>
/// 数据接收事件
/// </summary>
event EventChannelReceive Receive;
/// <summary>
/// 获取最近一次处理的错误信息
/// </summary>
Exception Error
{
get;
}
/// <summary>
/// 获了最近一次接收的数据
/// </summary>
byte[] Data
{
get;
}
/// <summary>
/// 获取或设置当前通道是否安全
/// </summary>
bool Sureness
{
get;
set;
}
}
IMessageChannel[/b]
消息处理通道,是基于IChannel的扩展。它主要提供对象的发送和接收。IMessageChannel处理的对象必须实现IMessage接口,并不需要可序列化标记。当发送对象数据超过了通道处理范围时,通道会自动对数据分割发送和接收。
IMessageChannel具体描述:
/// <summary>
/// 消息处理通道描述
/// </summary>
public interface IMessageChannel:IDisposable
{
/// <summary>
/// 运行错误事件
/// </summary>
event EventRunError RunError;
/// <summary>
/// 基础数据通道
/// </summary>
IChannel BaseChannel
{
get;
}
/// <summary>
/// 消息接收事件
/// </summary>
event EventMessageReceive Receive;
/// <summary>
/// 关闭消息通道
/// </summary>
void Close();
/// <summary>
/// 消息发送
/// </summary>
/// <param name="message">IMessage</param>
void Send(IMessage message);
/// <summary>
/// 获取最后一次接收的消息对象
/// </summary>
IMessage Message
{
get;
}
/// <summary>
/// 获取最后一次处理的错误信息
/// </summary>
System.Exception Error
{
get;
}
}
IMessage[/b]
消息描述接口,用于描述对象的保存和加载过程。当需要发送和接收对象时,对象必须实现IMessage接口,用于实现对象数据的保存和加载。
/// <summary>
/// 消息对象描述接口
/// </summary>
public interface IMessage
{
/// <summary>
/// 对象信息保存方法
/// </summary>
/// <returns>byte[]</returns>
Byte[] Save();
/// <summary>
/// 对象加载信息方法
/// </summary>
/// <param name="bytes">byte[]</param>
void Load(byte[] bytes);
}
为了使用方便,组件提供MessageAdapter对象用于简化消息对象信息的保存和加载。当从MessageAdapter派生类只需要重写protected override object OnSave()和protected override void OnLoad(object obj)方法。
一个简单的登陆验证消息对象:
/// <summary>
/// 登陆验证对象
/// </summary>
public class Login:HFSoft.Net.Message.MessageAdapter
{
public Login()
{
}
private string mClientName;
/// <summary>
/// 登陆的名称
/// </summary>
public string ClientName
{
get
{
return mClientName;
}
set
{
mClientName= value;
}
}
private string mClientPWD;
/// <summary>
/// 登陆密码
/// </summary>
public string ClientPWD
{
get
{
return mClientPWD;
}
set
{
mClientPWD= value;
}
}
protected override object OnSave()
{
object[] objs = new object[]{base.OnSave (),ClientName,ClientPWD};
return objs;
}
protected override void OnLoad(object obj)
{
Object[] objs =(object[])obj;
base.OnLoad (objs[0]);
ClientName =(string)objs[1];
ClientPWD =(string)objs[2];
}
}
创建服务和连接
创建服务:IPAddress ip = IPAddress.Parse("192.168.1.229);
IPEndPoint point = new IPEndPoint(ip,8080);
Config.Listener = new NetListener(point);
Config.Listener.Start();
//请求连接跟踪
Config.Listener.Accepted += new EventClientPoolChange(ClientConn);
//释放连接跟踪
Config.Listener.Released += new EventClientPoolChange(ClientDis);
//数据接收跟踪
Config.Listener.Receive += new EventChannelReceive(DataReader);
//运行错误跟踪
Config.Listener.RunError += new EventRunError(OnError);
创建连接:
IPAddress ip = IPAddress.Parse("192.168.0.229);
IPEndPoint point = new IPEndPoint(ip,8080);
HFSoft.Net.IChannel ch = HFSoft.Net.NetListener.CreateChannel( point);
对象处理
传统的Socket应用程序是对字节进行发送和接收。因为字节没有任何逻辑表达性,所以开发人员需要制定逻辑数据和字节的一个转换过程这是一件很烦琐的事件。HFSoft.Net就是在传统的Socket处理上进对象处理的封装,开发人员可以通过IMessageChannel进行对象的发送和接收操作。对象只要实现的IMessage接口或承继MessageAdapter就可以接受IMessageChannel的处理。当你制定的消息对象过于庞大时,IMessageChannel会自动对消息进行切割并进行发送和接收处理。
创建消息处理通道:
IPAddress ip = IPAddress.Parse(txtIPAddress.Text);
IPEndPoint point = new IPEndPoint(ip,(int)txtIPPort.Value);
IChannel ch = HFSoft.Net.NetListener.CreateChannel(point);
IMessageChannel mc = new HFSoft.Net.Message.MessageChannel(ch);
向服务端发送验证请求对象:
Message.Library.Login login = new Message.Library.Login();
login.ClientName = txtUserName.Text;
mc.Send(login);
实现简单聊天工具
基于HFSoft.Net实现的简单聊天工具net1.1代码
net2.0代码
相关文章推荐
- 基于Socket的.NET应用组件
- Flex与.NET互操作(一):基于Socket的网络连接
- 从架构设计到系统实施-基于.NET 3.0的全新企业应用之设计基于WPF的客户端
- 【转载】COM 组件设计与应用(十四)——事件和通知(vc.net)
- 基于.NET技术的监控应用分析(一)(转)
- 基于C++ Builder 5的Socket组件实现的聊天程序(一)
- 移动网络应用开发中,使用 HTTP 协议比起使用 socket 实现基于 TCP 的自定义协议有哪些优势?
- 基于php socket(fsockopen)的应用实例分析
- 【Android 应用开发】 自定义组件 宽高适配方法, 手势监听器操作组件, 回调接口维护策略, 绘制方法分析 -- 基于 WheelView 组件分析自定义组件
- 基于php socket(fsockopen)的应用实例分析
- 基于移动端Reactive Native轮播组件的应用与开发详解
- 基于.net技术的代码高亮显示组件
- [导入]从架构设计到系统实施——基于.NET 3.0的全新企业应用系列课程(9):设计基于CardSpace的身份验证系统.zip(7.98 MB)
- [导入]从架构设计到系统实施——基于.NET 3.0的全新企业应用系列课程(1):基于.NET 3.0的系统架构.zip(8.83 MB)
- [导入]从架构设计到系统实施——基于.NET 3.0的全新企业应用系列课程(2):设计基于WCF的服务.zip(8.29 MB)
- COM 组件设计与应用(十四)——事件和通知(vc.net)
- 从架构设计到系统实施-基于.NET 3.0的全新企业应用之加入Silverlight支持
- 基于.NET技术的监控应用分析(二)(转)
- 基于组件的.NET软件开发(3)