[netMarketing类库] SocketComm类:Socket Tcp客户端与服务端类

命名空间:netMarketing.Net.SocketComm.ReaderMethod

功能:基于socket的 TcpClient,TcpServer


功能详细说明:
封装了TcpClient,TcpServer
这个类使用简单好用,SocketHelper的Server端有时候会报异常,由于勇哥没有精力排除该问题,因此凡是要使用Tcp Server的,推荐使用本类。

2019/8/3 勇哥注:

后来发现这个类的ReceiveCallback有问题,机器人使用socket client方式发指令过来后,第一次可以收到,之后再发一次就收不到。
但是奇怪的是,使用socket工具不间断的发,却没有发现这种问题。
因此,在这个问题没有修正之前,请不要使用这个类创建tcp server!


常用函数列表:

///数据接收回调
public ReciveDataCallback ReceiveCallback;
///数据发送回调
public SendDataCallback SendCallback;
///异步回调
public AnalyDataCallback AnalyCallback;
///构造函数
public ReaderMethod()
///创建客户端,连接服务器
public int ConnectServer(IPAddress ipAddress, int nPort, out string strException)
///创建服务器
public void OpenServer(int portNum)
///回发消息,无论是tcp客户端或者服务端都使用这个函数回发消息
public bool ServerSendMessage(byte[] by)


服务端的参考例子:


image.png


using netMarketing.Net.SocketComm;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        private winData configdata = new winData();
        private int serverPort = 5000;
        private int sendBytesCount = 0;
        private int recvBytesCount = 0;

        ReaderMethod server = new ReaderMethod();
        
        public Form1()
        {
            InitializeComponent();
            //回调函数
            server.ReceiveCallback = ReceiveDataCamera;
        }

        private void ReceiveDataCamera(byte[] btAryReceiveData)
        {
            string str = System.Text.Encoding.Default.GetString(btAryReceiveData);//数据接收转string                                         
            outmsg("接收到数据:" + str);
        }

        //private void Rec(SocketHelper.Sockets sks)
        //{
        //    this.Invoke(new ThreadStart(delegate
        //    {
        //        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:
        //                    outmsg("连接成功.!");
        //                    break;
        //                case SocketHelper.Sockets.ErrorCodes.TrySendData:
        //                    break;
        //                default:
        //                    break;
        //            }
        //            recvBytesCount += sks.ex.ToString().Length;
        //            outmsg(string.Format("收:{0}字节, 发:{1}字节", recvBytesCount, sendBytesCount));
        //            var msg = string.Format("客户端信息{0}", sks.ex);
        //            outmsg(string.Format("客户端信息{0}", msg));
        //        }
        //        else
        //        {
        //            byte[] buffer = new byte[sks.Offset];

        //            recvBytesCount += buffer.Length;
        //            outmsg(string.Format("收:{0}字节, 发:{1}字节", recvBytesCount, sendBytesCount));
        //            Array.Copy(sks.RecBuffer, buffer, sks.Offset);
        //            string str = Encoding.UTF8.GetString(buffer);
        //            if (str == "ServerOff")
        //            {
        //                outmsg("服务端主动关闭");
        //            }
        //            else
        //            {
        //                outmsg(string.Format("服务端{0}发来消息:{1}", sks.Ip, str));
        //                cmd(sks.Ip,str);
        //                outmsg("\r\n");
        //            }
        //        }
        //    }));
        //}

        private void cmd(System.Net.IPEndPoint ip, string str)
        {
            string pos = "";
            switch(str.ToLower())
            {
                case "scanreq":
                    var sn = "abcdefg";
                    server.ServerSendMessage(Encoding.Default.GetBytes(sn));
                    outmsg(sn+Environment.NewLine);
                    break;
                case "1go":
                    pos = "369.090,-329.904,359.417,129,990";
                    server.ServerSendMessage(Encoding.Default.GetBytes(pos));
                    outmsg(Environment.NewLine+pos + Environment.NewLine);
                    break;
                case "go2":
                    pos = "269.909,20.096,359.417,129.990";
                    server.ServerSendMessage(Encoding.Default.GetBytes(pos));
                    outmsg(Environment.NewLine + pos + Environment.NewLine);
                    break;
                case "go3":
                    pos = "369.909,120.095,359.417,129.990";
                    server.ServerSendMessage(Encoding.Default.GetBytes(pos));
                    outmsg(Environment.NewLine + pos + Environment.NewLine);
                    break;
                case "go4":
                    pos = "219.909,420.096,359.418,129.990";
                    server.ServerSendMessage(Encoding.Default.GetBytes(pos));
                    outmsg(Environment.NewLine + pos + Environment.NewLine);
                    break;
                case "go5":
                    pos = "269.919,-329.895,359.425,129.996";
                    server.ServerSendMessage(Encoding.Default.GetBytes(pos));
                    outmsg(Environment.NewLine + pos + Environment.NewLine);
                    break;
                case "go6":
                    pos = "69.909,420.096,359.417,129.990";
                    server.ServerSendMessage(Encoding.Default.GetBytes(pos));
                    outmsg(Environment.NewLine + pos + Environment.NewLine);
                    break;
                default:
                    server.ServerSendMessage(Encoding.Default.GetBytes("error A1"));
                    break;
            }
        }

        private void outmsg(string msg)
        {
            if (rtbMsg.InvokeRequired)
            {
                rtbMsg.Invoke(new Action(() =>
                {
                    rtbMsg.AppendText(msg);
                }));
            }
            else
            {
                rtbMsg.AppendText(msg);
            }
        }

        private void btnStart_Click(object sender, EventArgs e)
        {
            int.TryParse(this.tbPort.Text, out this.serverPort);
            configdata.laserPort = this.serverPort;
            workInfoToDisk();
          

            int nPort = configdata.laserPort;
            server.OpenServer(nPort);
            MessageBox.Show("OK");
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            if (workInfoFromDisk())
            {
                this.tbPort.Text = configdata.laserPort.ToString();
            }
        }

        public bool workInfoFromDisk()
        {
            try
            {
                //var res = Serialize.FileDeSerialize(AppDomain.CurrentDomain.BaseDirectory + "autoCaliSetting");
                //if (null != res)
                //{
                //    configdata = res as winData;
                //    return true;
                //}
                return false;
            }
            catch (Exception ex)
            {
                return false;
            }
        }

        public bool workInfoToDisk()
        {
            try
            {
                //Serialize.FileSerialize(AppDomain.CurrentDomain.BaseDirectory + "autoCaliSetting", configdata);
                return true;
            }
            catch (Exception ex)
            {
                throw new ArgumentException(ex.Message);
            }
        }

        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            
        }
    }

    [Serializable]
    public class winData
    {
        public int laserChannel { get; set; }
        public int dataSum { get; set; }
        public string laserIP { get; set; }
        public int laserPort { get; set; }
    }
}


--------------------- 

作者:hackpig
来源:
www.skcircle.com
版权声明:本文为博主原创文章,转载请附上博文链接!

返回类库功能说明目录



本文出自勇哥的网站《少有人走的路》wwww.skcircle.com,转载请注明出处!讨论可扫码加群:

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

会员中心
搜索
«    2024年4月    »
1234567
891011121314
15161718192021
22232425262728
2930
网站分类
标签列表
最新留言
    热门文章 | 热评文章 | 随机文章
文章归档
友情链接
  • 订阅本站的 RSS 2.0 新闻聚合
  • 扫描加本站机器视觉QQ群,验证答案为:halcon勇哥的机器视觉
  • 点击查阅微信群二维码
  • 扫描加勇哥的非标自动化群,验证答案:C#/C++/VB勇哥的非标自动化群
  • 扫描加站长微信:站长微信:abc496103864
  • 扫描加站长QQ:
  • 扫描赞赏本站:
  • 留言板:

Powered By Z-BlogPHP 1.7.2

Copyright Your skcircle.com Rights Reserved.

鄂ICP备18008319号


站长QQ:496103864 微信:abc496103864