SUPERSOCKET.CLIENTENGINE 简单使用
首先
引用 SuperSocket.ClientEngine.Core.dll和 SuperSocket.ClientEngine.Common.dll
然后
就可以使用ClientEngine了。
ClientEngine
我找了好久,只找到 AsyncTcpSession这么一个可以实例化的连接会话,那么,就用这个吧。
string ip = "127.0.0.1";
int port = ;
AsyncTcpSession client = new AsyncTcpSession(new IPEndPoint(IPAddress.Parse(ip), port));
处理连接的事件
// 连接断开事件
client.Closed += client_Closed;
// 收到服务器数据事件
client.DataReceived += client_DataReceived;
// 连接到服务器事件
client.Connected += client_Connected;
// 发生错误的处理
client.Error += client_Error;
处理函数
void client_Error(object sender, ErrorEventArgs e)
{
Console.WriteLine(e.Exception.Message);
} void client_Connected(object sender, EventArgs e)
{
Console.WriteLine("连接成功");
} void client_DataReceived(object sender, DataEventArgs e)
{
string msg = Encoding.Default.GetString(e.Data);
Console.WriteLine(msg);
} void client_Closed(object sender, EventArgs e)
{
Console.WriteLine("连接断开");
} public void Connect()
{
client.Connect();
string loginCmd = "LOGIN test";
byte[] data = Encoding.Default.GetBytes(loginCmd);
client.Send(data, , data.Length);
}
连接到服务器
client.Connect();
向服务器发送数据
string loginCmd = "LOGIN test\r\n";
byte[] data = Encoding.Default.GetBytes(loginCmd);
client.Send(data, , data.Length);
需要注意的是,因为服务器是使用的命令行协议,所以在数据末需要加上 \r\n。如果是使用其它协议,只是这里数据的结构发生变化。
如果服务器返回了数据,那么就可以在client_DataReceived函数中处理了。
具体的不怎么清楚,我也没有测试,从名称AsyncTcpSession来看,这个连接是异步的,也就是说,如果直接在client.Connect()后执行 client.Send(xxxx) 很可能会异常,因为此时连接不一定建立了。所以,发送数据要在事件session_ConnectStarted调用后。
最后,就有了这样的代码:
using SuperSocket.ClientEngine;
using System;
using System.Collections.Generic;
using System.Net;
using System.Text; namespace hyjiacan.com
{
public class SSClient
{
private AsyncTcpSession client; /// <summary>
///
/// </summary>
/// <param name="ip">服务器IP</param>
/// <param name="port">服务器端口</param>
public SSClient(string ip, int port)
{
client = new AsyncTcpSession(new IPEndPoint(IPAddress.Parse(ip), port));
// 连接断开事件
client.Closed += client_Closed;
// 收到服务器数据事件
client.DataReceived += client_DataReceived;
// 连接到服务器事件
client.Connected += client_Connected;
// 发生错误的处理
client.Error += client_Error;
}
void client_Error(object sender, ErrorEventArgs e)
{
Console.WriteLine(e.Exception.Message);
} void client_Connected(object sender, EventArgs e)
{
Console.WriteLine("连接成功");
} void client_DataReceived(object sender, DataEventArgs e)
{
string msg = Encoding.Default.GetString(e.Data);
Console.WriteLine(msg);
} void client_Closed(object sender, EventArgs e)
{
Console.WriteLine("连接断开");
} /// <summary>
/// 连接到服务器
/// </summary>
public void Connect()
{
client.Connect();
} /// <summary>
/// 向服务器发命令行协议的数据
/// </summary>
/// <param name="key">命令名称</param>
/// <param name="data">数据</param>
public void SendCommand(string key, string data)
{
if (client.IsConnected)
{
byte[] arr = Encoding.Default.GetBytes(string.Format("{0} {1}", key, data));
client.Send(arr, , arr.Length);
}
else
{
throw new InvalidOperationException("未建立连接");
}
}
}
}
SUPERSOCKET.CLIENTENGINE 简单使用的更多相关文章
- SuperSocket.ClientEngine介绍
项目地址:https://github.com/kerryjiang/SuperSocket.ClientEngine 其中需要引入的SuperSocket.ProtoBase项目:SuperSock ...
- Unity中引入Supersocket.ClientEngine并测试
在使用Supersocket Server的过程中,发现Server是不支持.net 3.5的. 1.Server端中的几个Command: namespace SuperSocketProtoSer ...
- SuperSocket与SuperSocket.ClientEngine实现Protobuf协议
参考资料说明 SuperSocket文档 http://docs.supersocket.net/ Protobuf语言参考 https://developers.google.com/protoco ...
- c#基于supersocket的简单websocket服务端收发消息实现
using log4net; using SuperSocket.SocketBase; using SuperSocket.WebSocket; using System; using System ...
- SUPERSOCKET 客户端
SUPERSOCKET.CLIENTENGINE 简单使用 2015年5月27日 HYJIACAN 发表回复 阅读 11,105 次 江大没有给ClientEngine的Demo,一直没有找到其它的. ...
- SuperSocket与Netty之实现protobuf协议,包括服务端和客户端
今天准备给大家介绍一个c#服务器框架(SuperSocket)和一个c#客户端框架(SuperSocket.ClientEngine).这两个框架的作者是园区里面的江大渔. 首先感谢他的无私开源贡献. ...
- 使用SuperSocket打造逾10万长连接的Socket服务
SuperSocket 是一个轻量级, 跨平台而且可扩展的 .Net/Mono Socket 服务器程序框架.你无须了解如何使用 Socket, 如何维护 Socket 连接和 Socket 如何工作 ...
- SuperSocket
1.目前稳定版是 v1.6: 2.轻量级.可扩展.Socket应用程序框架: 3.你可以用来开发Socket服务端应用,不用关心如何使用Socket.如何维护Socket连接和Socket如何工作. ...
- SupperSocket深入浅出(一)
花了几天时间了解了SupperSocket工作原理,各各类之间的工作关系.SupperSocket大部资料网上都有,但写的都不适合初学者. 今天花点时间写下这几天的学习成果,一方面是为了将来更好的回顾 ...
随机推荐
- flask的基础1
1.python 现阶段三大主流web框架Django Tornado Flask的对比 1.Django 主要特点是大而全,集成了很多组件,例如: Models Admin Form 等等, 不管你 ...
- LGOJP4381 [IOI2008]Island
题目链接 https://www.luogu.org/problem/P4381 题解 基环树直径的板子.但是dfs会爆栈...所以最后改成了bfs.还是一个很考验码力的板子. 首先基环树的直径显然有 ...
- Django之路——5 Django的模板层
你肯能已经注意到我们在例子视图中返回文本的方式有点特别. 也就是说,HTML被直接硬编码在 Python代码之中. def current_datetime(request): now = datet ...
- BZOJ3277 串 和 BZOJ3473 字符串
字符串 给定n个字符串,询问每个字符串有多少子串(不包括空串)是所有n个字符串中至少k个字符串的子串? 分析 参照自为风月马前卒和Candy?的题解. 广义后缀自动机不就是把很多串的SAM建到了一个S ...
- SVM: 相对于logistic regression而言SVM的 cost function与hypothesis
很多学习算法的性能都差不多,关键不是使用哪种学习算法,而是你能得到多少数据量和应用这些学习算法的技巧(如选择什么特征向量,如何选择正则化参数等) SVM在解决非线性问题上提供了强大的方法. logis ...
- phpcms站点部署
1 wamp部署使用wamp2.4以下版本. 2.4版本自带的php5.4以上底层变化,phpcms运行不了. 2.2版自带的php5.3.10可以兼容. 2 安装配置时,尽量为每个站点配置(http ...
- 编程判断输入的字符是否为‘y’或‘Y’,若是,则输出‘yes’,否则输出‘no’
#include<stdio.h>void main(){ char ch; ch=getchar(); ch == 'y' || ch == 'Y' ? printf("yes ...
- jupyter安装小结
jupyter安装小结 更新时间:2016年03月13日 15:42:37 投稿:hebedich 我要评论 jupyter (之前的 ipython notebook )于我的最大意义在于 ...
- tcp三次握手和四次握手的理解
三次握手:发生在建立tcp的时候 1.客户端:发送一个syn包给服务端(同步) 2.服务端:发送一个ack包再加一个syn包给客户端(应答+同步) 3.客户端:发送一个ack包给服务端(应答) 四次握 ...
- centos6.5下安装docker的过程办法
转载:https://www.cnblogs.com/tymagic/p/10794477.html 在看了网上N多复制粘贴的文章,又尝试无效后,我把我最终成功的办法发出来,希望能帮到拼命干环境的你. ...