9-51单片机ESP8266学习-AT指令(8266TCP服务器,编写自己的C#TCP客户端发信息给单片机控制小灯的亮灭)

http://www.cnblogs.com/yangfengwu/p/8780182.html

自己都是现做现写,如果想知道最终实现的功能,请看最后



先把源码和资料链接放到这里


链接:https://pan.baidu.com/s/10MxI8-Q33-M_R2WEHqEi1A密码:j1sz



先说一下哈,不要嫌界面不好看,自己是为了程序尽量的简单,可以通过调整颜色或者通过重绘来使使界面好看,,,,,,,,咱先学会走.....




因为咱们会用到图片所以先把图片资源加载上来,为了







 调整的好看一点


现在设置,切换图片


其实呢导入图片应该先建一个资源文件更合理,后期再说

现在是让按钮状态改变了


也修改一下灯的

privatevoidpictureBox2_Click(object sender, EventArgs e)

        {

            if(LedFlage ==false)

            {

                LedFlage =true;

                pictureBox2.BackgroundImage = Properties.Resources.switchon;

                pictureBox3.BackgroundImage = Properties.Resources.ledon;

            }

            else            {

                LedFlage =false;

                pictureBox2.BackgroundImage = Properties.Resources.switchoff;

                pictureBox3.BackgroundImage = Properties.Resources.ledoff;

            }

        }


现在做连接服务器

先说一下很多初学者会遇到的问题


这种情况是你添加了控件的事件函数,然后你又删除了,,,因为我也是经常删.................

我刚才在考虑要不要用委托和回调.....后来想了想这篇就不用了,

大家记得自己试一下这个(反正给大家说了,下次自己肯定用委托和回调写,记住不要偷懒,如果你偷懒了,后期的文章你就会无从下手,因为你连基础的都不知道)

http://www.cnblogs.com/yangfengwu/p/5761841.html

因为和android 一样只有主线程才允许操作控件,咱们就

现在做连接服务器和断开连接

先在电脑上测试






先给现在的程序

using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Net;using System.Net.Sockets;using System.Text;using System.Threading;using System.Threading.Tasks;using System.Windows.Forms;namespace TCPClient

{

    publicpartialclass Form1 : Form

    {

        boolLedFlage =false;

        boolConncetFlage =false;

        privateThread ThreadConnectService;//连接服务器线程privateIPAddress ipAddress;//ip地址intPort =0;//端口号privateTcpClient myTcpClient =null;// TcpClientprivateNetworkStream networkstrem =null;//网络数据流public Form1()

        {

            InitializeComponent();

        }

        privatevoidForm1_Load(object sender, EventArgs e)

        {

            System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls =false;//加了这一句           


        }

        /*连接按钮点击事件*/privatevoidbutton1_Click(object sender, EventArgs e)

        {

            if(ConncetFlage ==false)

            {

                try{ThreadConnectService.Abort();}//先清除一下以前的catch (Exception){}

                ThreadConnectService =newThread(ConncetService);//把连接服务器的函数加入任务ThreadConnectService.Start();//启动任务            }

            else            {

                ConncetFlage =false;

                button1.Text ="连接";

                pictureBox1.BackgroundImage = Properties.Resources.lightoff;

                try{  myTcpClient.Close(); }catch(Exception){}//关闭通道            }

        }

        /*LED灯控制按钮(图片)*/privatevoidpictureBox2_Click(object sender, EventArgs e)

        {

            if(LedFlage ==false)

            {

                LedFlage =true;

                pictureBox2.BackgroundImage = Properties.Resources.switchon;

                pictureBox3.BackgroundImage = Properties.Resources.ledon;

            }

            else            {

                LedFlage =false;

                pictureBox2.BackgroundImage = Properties.Resources.switchoff;

                pictureBox3.BackgroundImage = Properties.Resources.ledoff;

            }

        }

        /*连接服务器函数*/privatevoid ConncetService()

        {

            ipAddress = IPAddress.Parse(textBox1.Text);//获取IP地址Port = Convert.ToInt32(textBox2.Text);//获取端口号try            {

                myTcpClient =newTcpClient();//实例化myTcpClientmyTcpClient.Connect(ipAddress, Port);//连接服务器ConncetFlage =true;

                button1.Text ="断开";

                pictureBox1.BackgroundImage = Properties.Resources.lighton;

            }

            catch (Exception)

            {

                ConncetFlage =false;

                button1.Text ="连接";

                pictureBox1.BackgroundImage = Properties.Resources.lightoff;

                try { myTcpClient.Close(); }

                catch (Exception) { }

            }

        }

    }

}


 断开

忘了加一个功能,,,判断服务器是不是断开了

using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Net;using System.Net.Sockets;using System.Text;using System.Threading;using System.Threading.Tasks;using System.Windows.Forms;namespace TCPClient

{

    publicpartialclass Form1 : Form

    {

        boolLedFlage =false;

        boolConncetFlage =false;

        privateThread ThreadConnectService;//连接服务器线程privateIPAddress ipAddress;//ip地址intPort =0;//端口号privateTcpClient myTcpClient =null;// TcpClientprivateNetworkStream networkstrem =null;//网络数据流privateThread ThreadReadData;//接收消息线程privateboolThreadReadDataFlage =false;//接收数据任务循环用byte[] ReadBuffer =newbyte[1024];//设置缓冲区1024个字节intReadCnt =0;//获取接收到了几个字节public Form1()

        {

            InitializeComponent();

        }

        privatevoidForm1_Load(object sender, EventArgs e)

        {

            System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls =false;//加了这一句           


        }

        /*连接按钮点击事件*/privatevoidbutton1_Click(object sender, EventArgs e)

        {

            if(ConncetFlage ==false)

            {

                try{ThreadConnectService.Abort();}//先清除一下以前的catch (Exception){}

                ThreadConnectService =newThread(ConncetService);//把连接服务器的函数加入任务ThreadConnectService.Start();//启动任务            }

            else            {

                ConncetFlage =false;

                ThreadReadDataFlage =false;

                button1.Text ="连接";

                pictureBox1.BackgroundImage = Properties.Resources.lightoff;

                try{  myTcpClient.Close(); }catch(Exception){}//关闭通道            }

        }

        /*LED灯控制按钮(图片)*/privatevoidpictureBox2_Click(object sender, EventArgs e)

        {

            if(LedFlage ==false)

            {

                LedFlage =true;

                pictureBox2.BackgroundImage = Properties.Resources.switchon;

                pictureBox3.BackgroundImage = Properties.Resources.ledon;

            }

            else            {

                LedFlage =false;

                pictureBox2.BackgroundImage = Properties.Resources.switchoff;

                pictureBox3.BackgroundImage = Properties.Resources.ledoff;

            }

        }

        /*连接服务器函数*/privatevoid ConncetService()

        {

            ipAddress = IPAddress.Parse(textBox1.Text);//获取IP地址Port = Convert.ToInt32(textBox2.Text);//获取端口号try            {

                myTcpClient =newTcpClient();//实例化myTcpClientmyTcpClient.Connect(ipAddress, Port);//连接服务器ConncetFlage =true;

                button1.Text ="断开";

                pictureBox1.BackgroundImage = Properties.Resources.lighton;

                networkstrem = myTcpClient.GetStream();//获取数据流                ThreadReadDataFlage =true;

                try{ ThreadReadData.Abort(); }//先清除一下以前的catch (Exception) { }

                ThreadReadData =newThread(ReadData);//把接收数据的函数加入任务                ThreadReadData.Start();

            }

            catch (Exception)

            {

                ConncetFlage =false;

                ThreadReadDataFlage =false;

                button1.Text ="连接";

                pictureBox1.BackgroundImage = Properties.Resources.lightoff;

                try { myTcpClient.Close(); }

                catch (Exception) { }

            }

        }

        /*接收消息函数*/privatevoid ReadData()

        {

            while (ThreadReadDataFlage)

            {

                try                {

                    ReadCnt = networkstrem.Read(ReadBuffer,0, ReadBuffer.Length);//读取数据if(ReadCnt !=0)//有数据                    {

                    }

                    else//异常断开                    {

                        ConncetFlage =false;

                        ThreadReadDataFlage =false;

                        button1.Text ="连接";

                        pictureBox1.BackgroundImage = Properties.Resources.lightoff;

                        try { myTcpClient.Close(); }

                        catch (Exception) { }

                    }

                }

                catch (Exception)

                {

                    ThreadReadDataFlage =false;

                }

            }

        }

    }

}



现在做数据发送部分,和APP那块几乎是一个模子刻出来的


using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Net;using System.Net.Sockets;using System.Text;using System.Threading;using System.Threading.Tasks;using System.Windows.Forms;namespace TCPClient

{

    publicpartialclass Form1 : Form

    {

        boolLedFlage =false;

        boolConncetFlage =false;

        privateThread ThreadConnectService;//连接服务器线程privateIPAddress ipAddress;//ip地址intPort =0;//端口号privateTcpClient myTcpClient =null;// TcpClientprivateNetworkStream networkstrem =null;//网络数据流privateThread ThreadReadData;//接收消息线程privateboolThreadReadDataFlage =false;//接收数据任务循环用privateThread ThreadSendData;//发送消息线程privateboolThreadSendDataFlage =false;//发送数据任务循环用byte[] ReadBuffer =newbyte[1024];//设置缓冲区1024个字节intReadCnt =0;//获取接收到了几个字节byte[] SendBuffer =newbyte[1024];//设置发送缓冲区1024个字节intSendCnt =0;//发送的个数public Form1()

        {

            InitializeComponent();

        }

        privatevoidForm1_Load(object sender, EventArgs e)

        {

            System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls =false;//加了这一句           


        }

        /*连接按钮点击事件*/privatevoidbutton1_Click(object sender, EventArgs e)

        {

            if(ConncetFlage ==false)

            {

                try{ThreadConnectService.Abort();}//先清除一下以前的catch (Exception){}

                ThreadConnectService =newThread(ConncetService);//把连接服务器的函数加入任务ThreadConnectService.Start();//启动任务            }

            else            {

                ConncetFlage =false;

                ThreadReadDataFlage =false;

                ThreadSendDataFlage =false;

                button1.Text ="连接";

                pictureBox1.BackgroundImage = Properties.Resources.lightoff;

                try{  myTcpClient.Close(); }catch(Exception){}//关闭通道            }

        }

        /*LED灯控制按钮(图片)*/privatevoidpictureBox2_Click(object sender, EventArgs e)

        {

            if(LedFlage ==false)

            {

                SendBuffer[0] =0xaa;

                SendBuffer[1] =0x55;

                SendBuffer[2] =0x02;

                SendBuffer[3] =0xff;

                SendCnt =4;


                LedFlage =true;

                pictureBox2.BackgroundImage = Properties.Resources.switchon;

                pictureBox3.BackgroundImage = Properties.Resources.ledon;

            }

            else            {

                SendBuffer[0] =0xaa;

                SendBuffer[1] =0x55;

                SendBuffer[2] =0x02;

                SendBuffer[3] =0x00;

                SendCnt =4;

                LedFlage =false;

                pictureBox2.BackgroundImage = Properties.Resources.switchoff;

                pictureBox3.BackgroundImage = Properties.Resources.ledoff;

            }

        }

        /*连接服务器函数*/privatevoid ConncetService()

        {

            ipAddress = IPAddress.Parse(textBox1.Text);//获取IP地址Port = Convert.ToInt32(textBox2.Text);//获取端口号try            {

                myTcpClient =newTcpClient();//实例化myTcpClientmyTcpClient.Connect(ipAddress, Port);//连接服务器ConncetFlage =true;

                button1.Text ="断开";

                pictureBox1.BackgroundImage = Properties.Resources.lighton;

                networkstrem = myTcpClient.GetStream();//获取数据流/*接收消息任务*/                ThreadReadDataFlage =true;

                try{ ThreadReadData.Abort(); }//先清除一下以前的catch (Exception) { }

                ThreadReadData =newThread(ReadData);//把接收数据的函数加入任务                ThreadReadData.Start();

                /*发送消息任务*/                ThreadSendDataFlage =true;

                try{ ThreadSendData.Abort(); }//先清除一下以前的catch (Exception) { }

                ThreadSendData =new Thread(SendData);

                ThreadSendData.Start();

            }

            catch (Exception)

            {

                ConncetFlage =false;

                ThreadReadDataFlage =false;

                ThreadSendDataFlage =false;

                button1.Text ="连接";

                pictureBox1.BackgroundImage = Properties.Resources.lightoff;

                try { myTcpClient.Close(); }

                catch (Exception) { }

            }

        }

        /*接收消息函数*/privatevoid ReadData()

        {

            while (ThreadReadDataFlage)

            {

                try                {

                    ReadCnt = networkstrem.Read(ReadBuffer,0, ReadBuffer.Length);//读取数据if(ReadCnt !=0)//有数据                    {

                    }

                    else//异常断开                    {

                        ConncetFlage =false;

                        ThreadReadDataFlage =false;

                        ThreadSendDataFlage =false;

                        button1.Text ="连接";

                        pictureBox1.BackgroundImage = Properties.Resources.lightoff;

                        try { myTcpClient.Close(); }

                        catch (Exception) { }

                    }

                }

                catch (Exception)

                {

                    ThreadReadDataFlage =false;

                }

            }

        }

        /*发送消息函数*/privatevoid SendData()

        {

            while (ThreadSendDataFlage)

            {

                try                {

                    if(SendCnt>0)

                    {

                        networkstrem.Write(SendBuffer, 0, SendCnt);

                        SendCnt =0;

                    }

                }

                catch (Exception)

                {

                    ConncetFlage =false;

                    ThreadReadDataFlage =false;

                    ThreadSendDataFlage =false;

                    button1.Text ="连接";

                    pictureBox1.BackgroundImage = Properties.Resources.lightoff;

                    try { myTcpClient.Close(); }

                    catch (Exception) { }

                }

            }

        }

    }

}



现在用调试助手试一下



好了咱现在用8266试一试 



 C#的源码



好了.....但是刚才我在软件连接的时候复位了一下芯片发现软件没有检测出来断开..现在如果服务器主动断开

可以检测的到,异常好像不可以,后期再看看....今天太晚了写的匆忙,不知道软件还有没有其它的Bug,慢慢的去发现吧...

突然有想起来单片机程序有个BUG



http://www.cnblogs.com/yangfengwu/p/8798512.html

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容