博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SUPERSOCKET.CLIENTENGINE 简单使用
阅读量:6280 次
发布时间:2019-06-22

本文共 3343 字,大约阅读时间需要 11 分钟。

首先

引用 SuperSocket.ClientEngine.Core.dll和 SuperSocket.ClientEngine.Common.dll

然后

就可以使用ClientEngine了。

ClientEngine

我找了好久,只找到 AsyncTcpSession这么一个可以实例化的连接会话,那么,就用这个吧。

string ip = "127.0.0.1";int port = 12345;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, 0, data.Length);}

连接到服务器

client.Connect();

向服务器发送数据

 

string loginCmd = "LOGIN test\r\n";byte[] data = Encoding.Default.GetBytes(loginCmd);client.Send(data, 0, 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;         ///         ///         ///         /// 服务器IP        /// 服务器端口        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("连接断开");        }         ///         /// 连接到服务器        ///         public void Connect()        {            client.Connect();        }         ///         /// 向服务器发命令行协议的数据        ///         /// 命令名称        /// 数据        public void SendCommand(string key, string data)        {            if (client.IsConnected)            {                byte[] arr = Encoding.Default.GetBytes(string.Format("{0} {1}", key, data));                client.Send(arr, 0, arr.Length);            }            else            {                throw new InvalidOperationException("未建立连接");            }        }    }}

 

 http://www.hyjiacan.com/supersocket-chat-telnet/

 

转载地址:http://hqnva.baihongyu.com/

你可能感兴趣的文章
从源码剖析useState的执行过程
查看>>
地包天如何矫正?
查看>>
中间件
查看>>
Android SharedPreferences
查看>>
css面试题
查看>>
Vue组建通信
查看>>
用CSS画一个带阴影的三角形
查看>>
前端Vue:函数式组件
查看>>
程鑫峰:1.26特朗.普力挺美元力挽狂澜,伦敦金行情分析
查看>>
safari下video标签无法播放视频的问题
查看>>
01 iOS中UISearchBar 如何更改背景颜色,如何去掉两条黑线
查看>>
对象的继承及对象相关内容探究
查看>>
Spring: IOC容器的实现
查看>>
Serverless五大优势,成本和规模不是最重要的,这点才是
查看>>
Nginx 极简入门教程!
查看>>
iOS BLE 开发小记[4] 如何实现 CoreBluetooth 后台运行模式
查看>>
Item 23 不要在代码中使用新的原生态类型(raw type)
查看>>
为网页添加留言功能
查看>>
JavaScript—数组(17)
查看>>
Android 密钥保护和 C/S 网络传输安全理论指南
查看>>