登录
首页 » C# » MQTT通讯(基于C# MQTTNet开发)

MQTT通讯(基于C# MQTTNet开发)

于 2019-10-08 发布
0 237
下载积分: 1 下载次数: 0

代码说明:

基于C# MQTTNet开发,Visual Studio 2017打开项目,其他版本不保证好用

下载说明:请别用迅雷下载,失败请重下,重下不扣分!

发表评论

0 个回复

  • Space_Environment
    倾情奉献,这是我编的一个电离层的解算程序,里面有各参数的详细说明,希望对大家有所帮助(Portrait of dedication, which I made a solution of the ionosphere counting procedures, which have a detailed description of each parameter, and they hope to help everyone)
    2008-04-19 13:35:16下载
    积分:1
  • ns2-analysis-code
    ns2网络仿真的实例以及对应测试分析代码,含有时延,抖动,丢包率等(ns2 network simulation examples and counterparts test analysis code, containing latency, jitter, packet loss rate etc.)
    2009-02-27 21:08:56下载
    积分:1
  • 代理IP自动更新校验器完整项目源码
    代理IP用途非常广泛,但是因为其不够稳定所以需要不停的更新,C#源码世界第二季重磅出击,能够自动获取更新代理IP地址并自动校验有效性。                                  整个项目非常完整,从数据库设计到流程,多线程执行任务。数据库基于SQLite,实现了以下功能:                                 定时自动从代理IP网站提取代理到数据库中并判断该代理ip的位置。                                 多线程校验代理IP有效性,自动剔除无效代理。                                 提供了现成的随机去除一个有效代理IP的方法,并附送一个demo,自动提取一个有效IP并使用这个IP访问网站。                                  源码采用简单三层架构:                                 Model:模型层,主要放了一个tb_proxy模型,包含代理ip的IP、端口、有效性、地址、最后校验时间                                 Common:数据交互,主要存放了一个tb_proxy类,包含了对代理IP的增加、删除、修改和随机提取                                 Library:公用类库,包含一个HttpHelper类、RegHelper正则帮助类、IPHelper根据ip查询位置信息类和一个SQLiteHelper类。                                 主程序:一个主窗体和一个代理提取测试窗体。主窗体中主要完成代理的提取和多线程校验,测试窗体主要实现随机提取一个有效代理并访问一个ip查询网站,测试代理有效性和真实性。                                  源码特色:                                 项目非常简洁明了,代码都有详细的注释说明。                                 使用了qqwry.dat根据IP获取所在地址。                                 多线程校验使用了lock以防止冲突,默认开启了50个线程,如果觉得CPU扛不住可以适当减少。                                 更新数据库的方法也使用了lock,因为太多的并发会导致SQLite出错,这样这样做并不影响更新速度。                                 日志显示采用了公共的日志列队方法,直接在主项目的任何地方调用都可以。            
    2017-03-14下载
    积分:1
  • PsSuspendThread
    内核中暂停任意线程代码,qq Protect相关(Kernel suspend any thread)
    2013-07-29 14:46:02下载
    积分:1
  • MultiPing
    ICMP扫描器的设计源码。能实现ping功能,扫描IP地址可以手动输入。方便初学者学习。。(ICMP scanner design source. Ping function, scanning the IP address can be entered manually.)
    2012-11-08 14:23:46下载
    积分:1
  • C# 不同进程间通讯实例源码下载(SendMessage方式)
    在.NET中基于Windows消息的IPC实现 一、什么是IPC IPC(Inter process Communication)就是“进程间通讯”。我们都知道,在windows系统中,各个应用程序(进程)之间常常需要交换、传递数据,这就要解决进程间的数据通信问题。在最初的16位Windows3.x系统中,所有Windows应用程序共享单一地址,任何进程都能够对这一共享地址空间的数据进行读写操作。 随着Windwos98、Windows NT、Windows2000等32位的操作系统的出现,每个进程都有自己的地址空间,一个Windows进程不能存取另一个进程的私有数据,也就是说,虽然两个进程可以用具有相同值的指针寻址,但所读写的只是它们各自的数据,这样就减少了进程之间的相互干扰。 二、如何实现IPC 那么在windows当前系统下,如何实现进程通讯呢?其实有很多方法,如: 1、    剪贴板Clipboard 2、    DDE(动态数据交换) 3、    内存映像 4、    消息管道 5、    邮件槽 6、    Socket 7、    RPC 8、    串行/并行通信(Serial/Parallel Communication) 9、    COM/DCOM 10、Windows消息 三、基于Windows消息的IPC 现在让我们进入今天我们要讲的主题:“基于Windows消息的IPC实现”。 在这里,我假定大家对Windows消息机制都有很好的理解,所以我就不在这上面费太多的墨水了。我们直接看看Windows消息是怎么样实现进程间通讯的。我们首先看看Windows的消息常数: WM_COPYDATA=0x004A//  当一个应用程序传递数据给另一个应用程序时发送此消息。 这就是我们要的。下面我们来看看如何利用它来实现IPC。 让我们先看看几个API函数,没有它们,我们没有办法将数据发送出去。 1、 PostMessage  函数功能:该函数将一个消息放入(寄送)到与指定窗口创建的线程相联系消息队列里,不等待线程处理消息就返回。消息队列里的消息通过调用GetMessage和PeekMessage取得。 函数原型:B00L PostMessage(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam); 参数 hWnd:其窗口程序接收消息的窗口的句柄。可取有特定含义的两个值: HWND.BROADCAST:消息被寄送到系统的所有顶层窗口,包括无效或不可见的非自身拥有的窗口、被覆盖的窗口和弹出式窗口。消息不被寄送到子窗口。 NULL:此函数的操作和调用参数dwThread设置为当前线程的标识符PostThreadMessage函数一样。 Msg:指定被寄送的消息。 wParam:指定附加的消息特定的信息。 IParam:指定附加的消息特定的信息。 返回值:如果函数调用成功,返回非零值:如果函数调用失败,返回值是零。若想获得更多的错误信息,请调用GetLastError函数。 2、 SendMessage  函数功能:该函数将指定的消息发送到一个或多个窗口。此函数为指定的窗口调用窗口程序,直到窗口程序处理完消息再返回。而函数PostMessage不同,将一个消息寄送到一个线程的消息队列后立即返回。 函数原型:LRESULT SendMessage(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM IParam); 参数: hWnd:其窗口程序将接收消息的窗口的句柄。如果此参数为HWND_BROADCAST,则消息将被发送到系统中所有顶层窗口,包括无效或不可见的非自身拥有的窗口、被覆盖的窗口和弹出式窗口,但消息不被发送到子窗口。 Msg:指定被发送的消息。 wParam:指定附加的消息指定信息。 IParam:指定附加的消息指定信息。 返回值:返回值指定消息处理的结果,依赖于所发送的消息。 3、 RegisterWindowMessage 函数功能:RegisterWindowMessage函数定义一个新的窗口消息,该消息保证在整个系统范围内是唯一的。调用SendMessage或PostMessage函数时可以使用该函数返回的消息值。 函数原型:UINT RegisterWindowMessage(lpsz) 参数: lpsz指向一个以NULL结束的字符串,该字符串指定待登记的消息。 返回值:若成功地登记了消息,返回值是一个消息标识符。该标识符值的范围在0XC000到0XFFFF之间,否则,返回值为0。 我们现在在C#中声明这些API函数:         [DllImport("user32")]        internal static extern int RegisterWindowMessage(string lpString);        [DllImport("user32")]        internal static extern int PostMessage(IntPtr hWnd, int Msg, int wParam, int lParam);        [DllImport("user32")]        internal static extern int PostMessage(IntPtr hwnd, int wMsg, IntPtr wParam, IntPtr lParam);        [DllImport("user32")]        internal static extern int SendMessage(IntPtr hWnd, int Msg, IntPtr wParam, ref COPYDATASTRUCT lParam); 然后定义一些我们需要的常数:                 internal const int WM_COPYDATA = 0x004A; //当一个应用程序传递数据给另一个应用程序时发送此消息        internal const int WM_DESTROY = 0x0002; //窗体被销毁        internal const int WM_CREATE = 0x0001; //应用程序创建一个窗口        internal const int WM_QUERYENDSESSION = 0x0011; //当用户选择结束对话框或程序自己调用ExitWindows函数        internal static readonly IntPtr HWND_BROADCAST = new IntPtr(0xFFFF); 我们还需要一个传送数据的结构:     ///    ///发送WM_COPYDATA消息的数据结构  ///    internal struct COPYDATASTRUCT    {        ///        ///用户自定义数据        ///        internal IntPtr dwData;        ///        ///数据长度        ///        internal int cbData;        ///        ///数据首地址指针        ///        internal IntPtr lpData;    } 现在我们来看看具体如何实现: 1、 我们首先创建一个类,让它从Form类继承,因为我们需要一个窗体,然后对它的消息进行处理:   internal class WinMsg : Form{        private string _messageString;        private List _windowList;        private int _message;        private int _intHandler;        private bool _isConnected;}   2、 然后定义构造函数,在构造函数里注册一个消息通道值,并发出一个广播通知其它在这个通道的窗口。         internal WinMsg(string messageString)        {            _messageString = messageString;            _isConnected = false;            _intHandler = Handle.ToInt32();            _windowList = new List();            _message = Win32.RegisterWindowMessage(_messageString);//注册一个消息通道            int errCode = Win32.PostMessage(Win32.HWND_BROADCAST, _message, Win32.CONNECTION, _intHandler);//向此通道内所有的窗口广播自己的句柄            if (errCode == 0)            {                throw new Win32Exception(errCode);//发生错误,抛出异常            }            else            {                _isConnected = true;            }        } 3、 重写基类的WndProc函数,处理接收到的消息:         protected override void WndProc(ref Message m)        {            if (m.Msg == _message)//接收到广播消息,进行处理            {                int LParam = m.LParam.ToInt32();                int WParam = m.WParam.ToInt32();                if (LParam != 0 && LParam != _intHandler)                {                    if (WParam == Win32.DISCONNECTION)                    {                        _windowList.Remove(m.WParam);//将对方窗口的句柄从列表中删除                    }                    else                    {                        if (WParam==Win32.CONNECTION)                        {                            Win32.PostMessage(m.LParam, _message, Win32.REVERSION, _intHandler);                        }                        _windowList.Add(m.LParam);//将对方窗口的句柄存入列表中                    }                }                return;            }            switch (m.Msg)            {                case Win32.WM_COPYDATA://接收到其它窗口发送过来的数据                    {                        COPYDATASTRUCT data = new COPYDATASTRUCT();                        data = (COPYDATASTRUCT)m.GetLParam(data.GetType());                        byte[] message = new byte[data.cbData];                        Marshal.Copy(data.lpData, message, 0, data.cbData);//从非托管内存中将数据复制到我们的byte数组中。                        Anyzler(m.WParam, message);//在这里处理接收到的数据。                    }                    break;                case Win32.WM_DESTROY:                case Win32.WM_QUERYENDSESSION://窗口被关闭,向其它窗口广播通知从队列中删除自己                    Win32.PostMessage(Win32.HWND_BROADCAST, _message, Win32.DISCONNECTION, _intHandler);                    base.WndProc(ref m);//调用基类的消息处理函数。                    break;                default:                    base.WndProc(ref m); //调用基类的消息处理函数。                    break;            }        }4、 定义发送消息的函数:         internal void Send(byte[] message)        {            if (_isConnected)            {                int length = message.Length;                IntPtr ptr = Marshal.AllocHGlobal(length);//申请一块非托管内存                Marshal.Copy(message, 0, ptr, length);//将要发送的数据封送到非托管内存                COPYDATASTRUCT data = new COPYDATASTRUCT();                data.dwData = IntPtr.Zero;//这里可以随意定义。                data.cbData = length;//传递要发送的数据的长度                data.lpData = ptr;//传递要发送的数据的地址指针                //向其它所有窗口发送数据,这里不能发广播消息。必须一个一个发送。                foreach (IntPtr window in _windowList)                {                    Win32.SendMessage(window, Win32.WM_COPYDATA, this.Handle, ref data);                }                Marshal.FreeHGlobal(ptr);//释放这块非托管内存,这行一定要写上,不然会内存泄漏。            }        }好了,主要代码就是这些了!
    2013-09-14下载
    积分:1
  • _157
    CS1.6 175PT僵尸模型包括全部僵尸 欧阳 威武 依其 安琪(COUNTER STRIKE175 ZOMBIE MODELS)
    2015-08-22 21:18:03下载
    积分:1
  • hyenae-0.35-2
    Hyenae是一种高度灵活和平台独立的网络数据包发生器。它允许你复制水平低以太网攻击的情况(如MITM , DOS ,和的DDoS )揭示您的网络中潜在的安全漏洞。(Hyenae is a highly flexible and platform independent network packet generator. It allows you to copy the low level of attacks over Ethernet (such as MITM, DOS, and the DDoS) reveals the potential of your network security vulnerabilities.)
    2010-11-20 11:32:10下载
    积分:1
  • 新建文件夹
    说明:  ◎ 为所有socket函数调用添加错误处理代码; ◎ 范例中服务器地址和端口是固定值,请你将它们改成——允许用户以参数形式从命令行输入; ◎ 范例中客户机发送的是固定文本”Hello Network!”,请改成——允许用户输入字符串,按回车发送;实现循环,直至客户机输入“bye”退出; ◎ 服务器迭代地处理客户机:一个客户机退出后、才接受下一个,按Ctrl+C可以终止服务器程序。(Add error handling code for all socket function calls; In the example, the server address and port are fixed values. Please change them to - allow users to input from the command line in the form of parameters; In the example, the client sends the fixed text "Hello network!", please change it to -- allow the user to input the string and press enter to send; realize the loop until the client enters "Bye" to exit; Server processes clients iteratively: one client exits before accepting the next. Press Ctrl + C to terminate the server program.)
    2020-11-28 22:43:54下载
    积分:1
  • signal-protocol
    各种协议的讲解,是初学的好资料。 各种协议的讲解,是初学的好资料。 (Explain the various agreements is a good beginner information. Explain the various agreements is a good beginner information.)
    2008-07-22 19:56:38下载
    积分:1
  • 696516资源总数
  • 106914会员总数
  • 0今日下载