zoukankan      html  css  js  c++  java
  • TCP通信用委托刷新消息

    1.在TcpHelper中声明委托

    public delegate void PushSockets(Sockets sockets);

    public static PushSockets pushSockets;

    2.在使用的地方,比如CLientDemo的Form_Load内实例化委托,并将要执行的函数导入委托

    private void Form1_Load(object sender, EventArgs e)
    {
    //客户端如何处理异常等信息参照服务端
    SocketHelper.pushSockets = new SocketHelper.PushSockets(Rec);//注册推送器
    client = new SocketHelper.TcpClients();
    ip = txtIP.Text;
    port = txtPort.Text;
    }

    3.定义要执行的函数Rec

    private void Rec(SocketHelper.Sockets sks)
    {
    this.Invoke(new ThreadStart(delegate
    {
    if (infolist.Items.Count > 1000)
    {
    infolist.Items.Clear();
    }
    if (sks.ex != null)
    {
    //在这里判断ErrorCode 可以自由扩展
    switch (sks.ErrorCode)
    {
    case SocketHelper.Sockets.ErrorCodes.objectNull:
    break;
    case SocketHelper.Sockets.ErrorCodes.ConnectError:
    break;
    case SocketHelper.Sockets.ErrorCodes.ConnectSuccess:
    statuslist.Items.Add("连接成功.!");
    break;
    case SocketHelper.Sockets.ErrorCodes.TrySendData:
    break;
    default:
    break;
    }
    infolist.Items.Add(string.Format("客户端信息{0}", sks.ex));

    }
    else
    {
    byte[] buffer = new byte[sks.Offset];
    Array.Copy(sks.RecBuffer, buffer, sks.Offset);
    string str = Encoding.UTF8.GetString(buffer);
    if (str == "ServerOff")
    {
    infolist.Items.Add("服务端主动关闭");
    }
    else
    {
    infolist.Items.Add(string.Format("服务端{0}发来消息:{1}", sks.Ip, str));
    txtThis.Text += " ";
    txtThis.Text += string.Format("服务端{0}发来消息:{1}", sks.Ip, str);
    }
    }
    }));
    }

    注:在Rec函数内使用this.Invoke是以为要刷新界面listbox控件,new ThreadStart则可用也可不用,写成new EventHandler也可以

  • 相关阅读:
    小程序教程3
    小程序教程2
    小程序教程1
    sublime介绍常用插件和快捷键
    ionic1跨域问题
    上传文件到windows server, 导出文件到linux, 打包压缩
    windows远程管理服务winrm
    windows配置ssh服务
    前端:websocket脚本
    前端实现: 抓拍和定时弹出任务
  • 原文地址:https://www.cnblogs.com/ifelse6/p/9609142.html
Copyright © 2011-2022 走看看