概述
- 背景
项目中存在多个Socket,按找类型分为两类:一是条码扫描设备,第二种是输送设备。条码扫描设备负责条码采集,是允许接收数据,不存在发送数据的情况。输送设备既可以接收数据,也可以发送数据。并且,输送设备存在多种动作或者流程:入、出、盘点,每种动作对应的逻辑处理都不相同。
同时考虑存在以后设备数量和设备类型扩展的情况,而且设备动作也会增多。 - 连接对象类设计
SocketClient类为抽象类,描述一个socket连接对象,每一个设备都创捷一个连接,即创建一个SocketClient类,类中包含IP、端口号、名称、编码等基本属性,并包含连接、接收、发送等方法定义。可以参考上一篇:c# Socket异步通讯
根据两种设备类型,创建两个类ScanerSocketClient和MedicineSocketClient,全部继承SocketClient类。
string ip;
int port;
string name = null;
string code = null;
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
public DelegateMsg OnConnect;
public DelegateMsg OnErr;
public DelegateMsg OnSend;
public DelegateMsg OnReceive;
public DelegateMsg OnServerDown;
public string Ip
{
get
{
return ip;
}
set
{
ip = value;
}
}
public int Port
{
get
{
return port;
}
set
{
port = value;
}
}
public string Name
{
get
{
return name;
}
set
{
name = value;
}
}
public string Code
{
get
{
return code;
}
set
{
code = value;
}
}
public Socket Socket
{
get
{
return socket;
}
}
public void Connect()
{
try
{
socket.BeginConnect(ip, port, new AsyncCallback(ConnectCallback), socket);
}
catch (Exception e)
{
OnErr(e.Message);
}
}
- SocketCache类
同时,为了管理连接对象,创建一个socket对象的管理类。
public static class SocketCache
{
static IList<SocketClient> clientList = new List<SocketClient>();
public static IList<SocketClient> ClientList
{
get
{
return clientList;
}
}
//获得发送字符串
public static string GetData<T>(T[] Data)
{
string strData = string.Empty;
for (int i = 0; i < Data.Length; i++)
{
strData += Data[i].ToString() + " ";
}
return strData;
}
public static void Add(SocketClient client)
{
if (ClientList.Count(r => r== client) == 0)
{
ClientList.Add(client);
}
}
public static void Remove(SocketClient client)
{
if (ClientList.Count(r => r == client) > 0)
{
ClientList.Remove(client);
}
}
public static void Clear()
{
ClientList.Clear();
}
public static SocketClient GetClient(string ip)
{
if(ClientList.Count(r=>r.Ip == ip)>0)
{
return ClientList.First(r=>r.Ip==ip);
}
return null;
}
}
最后
以上就是无限鸡为你收集整理的C#利用行为模式实现socket异步通讯(一)的全部内容,希望文章能够帮你解决C#利用行为模式实现socket异步通讯(一)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复