开启左侧

C# 网口通讯类SocketEx.cs 20190901

  [复制链接]
Criss 发表于 2017-9-19 09:15:08 | 显示全部楼层 |阅读模式
说明:集成TCP服务端、客户端、UDP发送端、UDP接收端网口通讯类
演示效果:
QQ截图20170919092022.png
加载方式:
工程解决方案视图中,右键工程名称,添加现有存在项目,加载SocketEx.cs即可
使用方式:
  1. //添加命名空间引用
  2. using com.tlsvision.soft
复制代码

添加对象
  1. private SocketManager m_sockConn = null;
复制代码

然后在类的构造函数或者单独的初始化函数中初始化
  1. m_sockConn = new SocketManager(TcpMode==0? SocketManager.TcpType.SERVER: SocketManager.TcpType.CLIENT);
  2. m_sockConn.SetSocketParam(m_cfgManager.sysSetting.CommCfg.m_strTcpAddr, m_cfgManager.sysSetting.CommCfg.m_nTcpPort);
  3. m_sockConn.RegSocketEvent(new TcpEvent.MsgCallBack(SocketMsgCallback), new TcpEvent.StateCallBack(SocketStateCallback));
  4. m_sockConn.OpenSocketService();
复制代码


接收消息的事件为:

  1. private void SocketStateCallback(object sender, SocketStateEventArgs state)
  2.         {
  3.             string str = string.Empty;
  4.             if (null != state.stateInfo)
  5.             {
  6.                 str = Encoding.Default.GetString(state.stateInfo, 0, state.stateInfo.Length);
  7.             }

  8.             switch (state.state)
  9.             {
  10.                 case SocketState.ONLINE:
  11.                     m_freshLogs?.Invoke("开启TCP通讯服务!");
  12.                     break;
  13.                 case SocketState.OFFLINE:
  14.                     m_freshLogs?.Invoke("关闭TCP通讯服务!");
  15.                     break;
  16.                 case SocketState.ERROR:
  17.                     m_freshLogs?.Invoke("TCP通讯服务异常:{0}", str);
  18.                     break;
  19.                 case SocketState.CONNECTED:
  20.                     m_freshLogs?.Invoke("对方:{0} 建立连接!", str);
  21.                     m_mainFrm.CheckTcpStatus(true, str);
  22.                     break;
  23.                 case SocketState.DISCONNECT:
  24.                     m_freshLogs?.Invoke("对方断开连接!");
  25.                     m_mainFrm.CheckTcpStatus(false, "");
  26.                     break;
  27.             }
  28.         }

  29.         private void SocketMsgCallback(object sender, SocketMsgEventArgs msg)
  30.         {
  31.             m_freshLogs?.Invoke("收到对方Msg:{0}", Encoding.Default.GetString(msg.data));
  32.         }
复制代码

说明:
m_freshLogs是用来显示日志的委托对象,自己定义就好了,这样就可以在界面上显示收到的数据!
  1.         public delegate void FreshLogs(string str,params object[] arg);
  2.         public FreshLogs m_freshLogs = null;
复制代码

照抄上面代码,根据TcpMode来初始化的,你需要定义TcpMode这个int类型的变量,0为服务端模式,1为客户端模式。

SOCKET调试助手:链接:http://pan.baidu.com/s/1bpeMZDl 密码:293d

20190901 修改传递的内容为事件驱动方式


开源下载链接:
链接:https://pan.baidu.com/s/1VKTD3Pd5bzymbqLRgjVz1A 密码:
游客,本帖隐藏的内容需要积分高于 5 才可浏览,您当前积分为 0
yinzhiqiang 发表于 2017-11-30 17:19:13 | 显示全部楼层
很不错的啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表