当前位置: 代码迷 >> .NET面试 >> .net cs TCP通信框架解决思路
  详细解决方案

.net cs TCP通信框架解决思路

热度:340   发布时间:2016-05-02 01:31:07.0
.net cs TCP通信框架
.net cs TCP通信框架

 

版本:1.0.0.1

开发主言:c#

开发环境:vs2008+.net framework 2.0

软件特点:支持动软代码生成器所生成三层框架代码。支持阻塞式函数调用。可以用于聊天软件开发,以及简单游戏通信框架。

解决了 cs程序开发过程中的直连数据库所造成的连接安全隐患的问题。

解决了 webservice以及wcf开发时的性能问题以及开发效率的问题。

解决了 与现有三层框架代码兼容的问题。

解决了 cs程序用户间互相通信的问题。

解决了 wince系统下gprs信号不稳定时程序使用的问题。

服务器端示例介绍:

创建监听对象:

 

?
SocketListener listener = new SocketListener();
 

  启动监听并注册事件:

?
listener.BeforeDataReceive += new SocketListener.BeforeDataReceiveEventHandler(listener_BeforeDataReceive);
listener.DataReceive += new SocketListener.DataReceiveEventHandler(listener_DataReceive);
listener.ClientChanged +=new ClientChangedHandler(listener_ClientChanged);     
listener.RegeditSession += new RegeditSessionEventHandler(listener_RegeditSession);
listener.StartListening();
  BeforeDataReceive 事件用于对通信框架事件接收前的判断是否需要处理。

  DataReceive          事件用框架未处理的数据。

  RegeditSession     用于用户登录。这里要以作为是否允许用户登录的判断。

  StartListening      用于开启监听。

  如果用于作为数据处理服务器需要对DbHelper.ConnectionString 属性进行初始化。

  DbHelper可以自定义用于支持不同数据库比如mysql,oracle,sqllite等。

服务器端示例截图:

  



客户端示例介绍:
 
MsSqlClient client
  客户端需要定义:MsSqlClient 与服务器端进行通信。

客户端的事件有:
 
DbHelperSQL.client = client;
client.SystemMessageRecv += new SocketClient.SystemMessageRecvEventHandler(client_SystemMessageRecv);
client.ClientChanged += new SocketClient.ClientChangedEventHandler(client_ClientChanged);
client.TextRecv += new SocketClient.TextRecvEventHandler(client_TextRecv);
client.Connected += new SocketClient.ConnectedEventHandler(client_Connected);
client.InitOnLineUsers += new SocketClient.InitOnLineUsersEventHandler(client_InitOnLineUsers);
client.ClosedConnected += new SocketClient.ClosedConnectedEventHandler(client_ClosedConnected);
client.StartClient();

  SystemMessageRecv 事件用于接收服务器端发送的通知。

  ClientChanged 事件用于处理其他用户的断开连接处理。

  TextRecv 事件用于接收其用户发送的文本消息。

  InitOnLineUsers 事件用于接收在线用户列表。

客户端提供的函数有:
 
My.Net.Tcp.MsSqlClient.ColumnExists(string, string) 
My.Net.Tcp.MsSqlClient.ColumnExists(string, string, int) 
My.Net.Tcp.MsSqlClient.ExecuteSql(string) 
My.Net.Tcp.MsSqlClient.ExecuteSql(string, params System.Data.SqlClient.SqlParameter[]) 
My.Net.Tcp.MsSqlClient.ExecuteSql(string, int) 
My.Net.Tcp.MsSqlClient.ExecuteSql(string, int, params System.Data.SqlClient.SqlParameter[]) 
My.Net.Tcp.MsSqlClient.ExecuteSqlTran(System.Collections.Generic.List<string>) 
My.Net.Tcp.MsSqlClient.ExecuteSqlTran(System.Collections.Generic.List<My.Data.SqlClient.ModleInfo>) 
My.Net.Tcp.MsSqlClient.ExecuteSqlTran(System.Collections.Generic.List<string>, int) 
My.Net.Tcp.MsSqlClient.ExecuteSqlTran(System.Collections.Generic.List<My.Data.SqlClient.ModleInfo>, int) 
My.Net.Tcp.MsSqlClient.Exists(string) 
My.Net.Tcp.MsSqlClient.Exists(string, params System.Data.SqlClient.SqlParameter[]) 
My.Net.Tcp.MsSqlClient.Exists(string, int) 
My.Net.Tcp.MsSqlClient.Exists(string, int, params System.Data.SqlClient.SqlParameter[]) 
My.Net.Tcp.MsSqlClient.GetMaxID(string, string) 
My.Net.Tcp.MsSqlClient.GetMaxID(string, string, int) 
My.Net.Tcp.MsSqlClient.GetSingle(string) 
My.Net.Tcp.MsSqlClient.GetSingle(string, params System.Data.SqlClient.SqlParameter[]) 
My.Net.Tcp.MsSqlClient.GetSingle(string, int) 
My.Net.Tcp.MsSqlClient.GetSingle(string, int, params System.Data.SqlClient.SqlParameter[]) 
My.Net.Tcp.MsSqlClient.MsSqlClient(System.Net.IPAddress, int) 
My.Net.Tcp.MsSqlClient.MsSqlClient() 
My.Net.Tcp.MsSqlClient.MsSqlClient(System.Net.IPAddress) 
My.Net.Tcp.MsSqlClient.MsSqlClient(string) 
My.Net.Tcp.MsSqlClient.Query(string) 
My.Net.Tcp.MsSqlClient.Query(string, params System.Data.SqlClient.SqlParameter[]) 
My.Net.Tcp.MsSqlClient.Query(string, int) 
My.Net.Tcp.MsSqlClient.Query(string, int, params System.Data.SqlClient.SqlParameter[]) 
My.Net.Tcp.MsSqlClient.TabExists(string) 
My.Net.Tcp.MsSqlClient.TabExists(string, int)

  这30个函数,包括一般代码生器所需要的所有的函数。

如果与其他用户通信你可以使用下面的6个函数:
 
My.Net.Tcp.SocketClient.SendToAllUser(string) 
My.Net.Tcp.SocketClient.SendToAllUser(int, byte[]) 
My.Net.Tcp.SocketClient.SendToOtherUser(string, string) 
My.Net.Tcp.SocketClient.SendToOtherUser(string, int, byte[]) 
My.Net.Tcp.SocketClient.SendToOtherUser(System.Collections.Generic.List<string>, string) 
My.Net.Tcp.SocketClient.SendToOtherUser(System.Collections.Generic.List<string>, int, byte[])

  你可以发送字符串,也要以发送自定义的数据流。

客户端示例图片:



Tab 发送消息:

是将消息发送给其他客户。
  相关解决方案