<acronym id="xonnx"></acronym>
      <td id="xonnx"></td>
    1. <pre id="xonnx"></pre>

      1. 專注電子技術學習與研究
        當前位置:單片機教程網 >> STM32 >> 瀏覽文章

        Rainbow網絡通信:一個TCP服務器,通過網絡控制LED亮和滅

        作者:白櫟旸   來源:本站原創   點擊數:  更新時間:2014年04月30日   【字體:

          使用Rainbow開發包的TCP/IP協議棧,除了可以做TCP客戶端外,還可以作為服務端,接受客戶端連接并進行數據交互。我們先來看看軟件運行的效果:將本文的程序進行編譯、燒寫到Rainbow中,將USB-TTL與電腦連接(這個不是必須的),將網線插入網絡接口,按下Rainbow復位鍵,在串口、網絡通用調試工具中我們將看到:

         
        表明此時Rainbow作為網絡服務器已經啟動,我們在網絡設置區域選擇作為客戶端、并設置正確的服務器(Rainbow)IP地址、端口,然后點擊“connect”按鈕,此時將會在網絡接收數據區域顯示一個菜單:


        在網絡發送的輸入區域輸入0,然后按“send”,板子上的LED便會熄滅;輸入1,然后按“send”,LED又會被點亮。
            
            在軟件包的“Projects\TCP-Server”文件夾包含了本文的完整工程,可以直接編譯、燒寫和調試。這個程序主要展示如何通過TCP向服務器端發送字符串,看看main.cpp的代碼:
        #include "WProgram.h"
        #include "Ethernet.h"
        #include "EthernetServer.h"
        #include "EthernetClient.h"
         
        //定義客戶端通過TCP協議控制LED亮和滅的管腳
        #define LED_PIN PC13
         
        //網絡模塊的MAC地址
        byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
        //網絡模塊的IP地址
        IPAddress ip(192, 168, 1, 15);
         
        //在6000進行監聽
        EthernetServer server(6000);
        //連接成功后標識設置為true
        bool connectFlag = false;
         
        void setup()
        {
          //初始化Rainbow
          boardInit();
          //初始化默認串口
          Serial.begin();
          Serial.println("TCP-Server start...");
          //對網絡進行初始化
          Ethernet.begin(mac, ip);
          //開始進行監聽
          server.begin();
          //使用LED作為指示,客戶端發送on的時候LED發光;發送off的時候LED熄滅
          pinMode(LED_PIN, GPIO_Mode_Out_PP);
        }
         
        void loop()
        {
          //取得客戶端socket對象
          EthernetClient client = server.available();
         
          //是否和客戶端正確握手
          if(client.connected())
          {
            if(connectFlag)
            {
              //客戶端是否傳來數據
              client.parsePacket();
              while(client.available() > 0)
              {
                //設置超時時間,這個時間主要用于readString()來判斷是否有數據輸入,如果在10ms沒有數據輸入則認為數據輸入完畢,默認是1s
                client.setTimeout(10);
                String msg = client.readString();
                //根據客戶端輸入的數據點亮或關閉LED
                if(msg == "1")
                  digitalWrite(LED_PIN, LOW);
                else if(msg == "0")
                  digitalWrite(LED_PIN, HIGH);
                }
             }
            else
            {
              //握手成功,輸出操作菜單
              connectFlag = true;
              String menuStr = "請輸入操作指令:\r\n";
              menuStr += "1 - 開燈\r\n";
              menuStr += "0 - 關燈\r\n";
              client.print(menuStr);
            }
          }
          else if(connectFlag)
          {
            connectFlag = false;
          }
        }
         
        int main()
        {
          setup();
          while(1) loop();
        }
         
            在Rainbow中對TCP服務端編程和客戶端一樣簡單,按照以下步驟進行:
            1、定義TCP服務端對象,在定義對象的時候需要指定監聽的端口號:EthernetServer server(6000);
            2、開始進行監聽:server.begin();
            3、獲取客戶端socket對象:EthernetClient client = server.available();
            4、通信前需要判斷與客戶端是否成功握手:client.connected(),成功握手返回true
            5、與客戶端進行網絡通信。在接收客戶端傳來的數據之前需要調用client.parsePacket(),然后調用client.available()可以返回客戶端發來的數據量,接下來可以使用EthernetClient提供的各種讀寫方法從網絡上讀寫數據,EthernetClient是Stream的子類,具體讀寫方法參見Stream類
        關閉窗口

        相關文章

        欧美性色欧美精品视频,99热这里只有精品mp4,日韩高清亚洲日韩精品一区二区,2020国自产拍精品高潮