在日常碰到的项目中,有些场景需要发送文本数据,也就是字符串,比如简单的聊天文字,JSON字符串等场景。那么如何如何使用SharpSocket来收发此类数据呢?其中要掌握的关键点是什么呢?

TCP服务端的实现

设置授权

第一步:在引用了SharpSocket.dll之后,调用SharpSocket方法之前,一定要先通过下面代码来设置授权信息,如果是试用版,直接输入Test即可。

1
KeyMgr.SetKey("Test", "Test");

获取ITcpServer的示例

从之前的一篇博文中,我们介绍了一张图看懂SharpSocket,从那篇文章我们可以看出,SharpSocket通过ITCPServer来实现tcp服务端。那么如何获取该接口的示例,从而使用该接口提供的各个方法呢?请看下面的代码:

1
2
3
4
if (tcpServerIntance == null)
{
tcpServerIntance = SocketFactory.GetTextTcpServer(8888, new DefaultTextFormatHelper("\0"));
}

在上段代码中,通过工厂类获取了文本数据的tcp服务接口的示例,里边通过传入监听的端口号,从而监听该端口。同时传入关键的DefaultTextFormatHelper类。该类非常关键,SharpSocket通过它来解析文本数据,这个默认的是实现的UTF8编码的文本,您也可以自行实现ITextFormatHelper接口,实现个性化文本数据解析。

绑定事件

获取到了ITCPServer的示例后,为其绑定各个事件,比如客户端连接,断开连接,收到数据等等。这里要注意关键的是收到数据的事件MessageReceived。引擎会将数据上交给该事件的响应函数上,您就可以进行下一步的分析。

1
2
3
4
this.tcpServerIntance.ClientCountChanged += new SGDelegate<int>(ClientCountChanged);
this.tcpServerIntance.ClientConnected += new SGDelegate<System.Net.IPEndPoint>(ClientConnected);
this.tcpServerIntance.ClientDisconnected += new SGDelegate<System.Net.IPEndPoint>(ClientDisconnected);
this.tcpServerIntance.MessageReceived += new SGDelegate<IPEndPoint, byte[]>(MessageReceived);

启动监听

处理完上述步骤后,开始监听了,服务就正式启动了。如下:

1
tcpServerIntance.Initialize();

断开连接

您可以随时断开所有连接,即停止服务。

1
2
tcpServerIntance.CloseAllClient();
tcpServerIntance.Dispose();

服务端主动向指定的客户端推送数据

您可以随时向任意的客户端连接发送数据,这通常被称为推送数据。代码如下:

1
2
3
4
5
6
7
 //原始要发送的字符串加上一个结尾字符,由于使用的是DefaultTextFormatHelper,因此这里用"\0" 表示一个消息的结尾
string msg = this.textBox_msg.Text + "\0";

//DefaultTextFormatHelper使用UTF-8编码
byte[] bMsg = System.Text.Encoding.UTF8.GetBytes(msg);

tcpServerIntance.SendDataToClient(client, bMsg);

其中client为IPEndPoint类型,即包含IP和端口号。就是一个特定的客户端tcp连接。

TCP客户端的实现

设置授权

第一步:在引用了SharpSocket.dll之后,调用SharpSocket方法之前,一定要先通过下面代码来设置授权信息,如果是试用版,直接输入Test即可。

1
KeyMgr.SetKey("Test", "Test");

获取ITCPClient示例

第二步:获取ITCPClient的示例。代码如下:

1
2
//获取tcp客户端接口实例
clientInstance = SocketFactory.GetTextTcpClient(this.txtIP.Text, int.Parse(this.txtPort.Text), new DefaultTextFormatHelper("\0"));

绑定事件

第三步:绑定相关的事件,比如连接建立和断开,收到数据等,关键的也是MessageReceived,每当引擎收到服务端发来的数据,都会传递给该事件的响应函数。如下:

1
2
3
4
//绑定事件
clientInstance.MessageReceived += new SGDelegate<System.Net.IPEndPoint, byte[]>(MessageReceived);
clientInstance.ConnectionDisconnected += new SGDelegate(ConnectionInterrupted);
clientInstance.ConnectionReconnectSucceed += new SGDelegate(ConnectionRebuildSucceed);

开始连接服务端

上述步骤处理完成后,准备工作就做好了,下边可以开始连接服务端,建议tcp连接了,您可以在连接建立前,决定是否让引擎帮助您进行断线重连,代码如下:

1
2
3
4
5
//启动掉线自动重连
clientInstance.AutoReconnect = true;

//开始初始化,SharpSocket将初始化和服务端的连接
clientInstance.Initialize();

发送数据到服务端

您可以随时发送数据到服务端,如下:

1
2
//发送请求消息
clientInstance.PostDataToServer(reqMessage);

demo源码下载:

点击下载源码