最近在项目中由于同步阻塞通讯带来程序效率过低学习了异步Socket通讯。这里粘贴Socket客户端异步非阻塞工具类代码。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;
namespace com.qjcz.weighing.Utils
{
public class AsyncTCPClient
{
/// <summary>
/// 内部类,用于消息接收
/// </summary>
internal class SocketObject
{
public string KeyID = "";
public Socket WorkSocket = null;
public const int BufferSize = 1024;
public byte[] Buffer = new byte[BufferSize];
public StringBuilder sbBuffer = new StringBuilder();
}
#region 变量
private Socket mSocket = null;
private string localIPAddress = "";
private int localPort = 0;
private string remoteIPAddress = "";
private int remotePort = 0;
private string keyID = "";
private bool IsExit = false;
private SocketObject so = new SocketObject();
#endregion
#region 变量属性
/// <summary>
/// Socket标志
/// </summary>
public string KeyID
{
get
{
return keyID;
}
}
/// <summary>
/// 本机地址
/// </summary>
public string LocalIPAddress
{
get
{
return localIPAddress;
}
}
/// <summary>
/// 本机端口
/// </summary>
public int LocalPort
{
get
{
return localPort;
}
}
/// <summary>
/// 主机地址
/// </summary>
public string RemoteIPAddress
{
get
{
return remoteIPAddress;
}
}
/// <summary>
/// 主机端口
/// </summary>
public int RemotePort
{
get
{
return remotePort;
}
}
/// <summary>
/// 消息的终止判断符
/// </summary>
public static string EndChar
{
get
{
return new string((char)0, 1);
}
}
#endregion
#region 代理委托
/// <summary>
/// Socket异常错误事件
/// &