通过Nuget安装Supersocket 2.0
按照官网的例子写的代码。
注意服务端发送数据的时候,要带回车换行符
using SuperSocket.Client;
using SuperSocket.ProtoBase;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Net;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft;
using Newtonsoft.Json;
using aa.Common;
namespace aa.Communication
{
public class TCPSuperSocket
{
public static TCPSuperSocket instance;
public IEasyClient<TextPackageInfo> client1 { get; set; } = new EasyClient<TextPackageInfo>(new LinePipelineFilter()).AsClient();
public static TCPSuperSocket GetInstance()
{
if (instance == null)
{
instance = new TCPSuperSocket();
}
return instance;
}
public async void Connect()
{
//RunClient();
Task.Run(() =>
{
RunClient();
});
}
private async void RunClient()
{
string ClassName = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name;
string FuncName = System.Reflection.MethodBase.GetCurrentMethod().Name;
string TCPTestIP = Config.GetInstance().GetConfig("TCPTestIP");
int TCPTestPort = int.Parse(Config.GetInstance().GetConfig("TCPTestPort"));
if (!await client1.ConnectAsync(new IPEndPoint(IPAddress.Parse(TCPTestIP), TCPTestPort)))
{
App.Log.Warn(" 连接失败!目标地址!");
Debug.WriteLine($" 连接失败!目标地址!{TCPTestIP} {TCPTestPort}");
return;
};
while (true)
{
//if(client1.)
Debug.WriteLine($"{util.GetNow()} -- {client1.LocalEndPoint}");
var pp = await client1.ReceiveAsync();
if (pp != null)
{
try
{
if (pp.Text.Length > 0)
{
TestCMDJSONModel tcjm = new TestCMDJSONModel();
tcjm = JsonConvert.DeserializeObject<TestCMDJSONModel>(pp.Text);
string msg = $"{util.GetNow()} -- 222- {pp.Text} {tcjm.CMD}";
Debug.WriteLine(msg);
GlobalValue.SetFormLog(msg);
}
}
catch (Exception ex)
{
App.Log.Error($"{ex.Message}");
}
// Task.Delay(1000).Wait();
}
else
{
await client1.ConnectAsync(new IPEndPoint(IPAddress.Parse(TCPTestIP), TCPTestPort));
}
}
//client.SendAsync()
}
public void Send(string cmd)
{
try
{
byte[] byteArray = System.Text.Encoding.ASCII.GetBytes(cmd);
client1.SendAsync(byteArray);
}
catch (Exception ex)
{
string ClassName = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name;
string FuncName = System.Reflection.MethodBase.GetCurrentMethod().Name;
string msg = @$"
Class Name [{ClassName}]
Function [{FuncName}]
RecvTime [{util.GetNow()}]
Parameter
Message 视觉通讯出现异常 [{ex.Message}]";
//Debug.WriteLine(msg);
App.Log.Error(msg);
}
}
public void Dispose()
{
client.CloseAsync();
}
}
}