将NodeMCU作为客户端而C#作为服务器使用UDP通过WiFi网络时没有收到任何信息

时间:2018-03-26 11:19:17

标签: c# udp esp8266 nodemcu arduino-esp8266

我试图让它发挥作用几天都感到沮丧。我发现的相关内容似乎也没有帮助。我在这里有点新意,所以请善待。我希望能够从作为客户端的NodeMCU发送消息或日期到我的C#控制台应用程序,通过使用UDP的wifi网络充当服务器。但它似乎根本不起作用。

这是我的C#服务器:

using System;
using System.Text;
using System.Net;
using System.Net.Sockets;


namespace UDP_Server
{
    class Program
    {
        private const int listenPort = 12346;
        private static void StartListener()
        {
            bool done = false;

            UdpClient listener = new UdpClient(listenPort);
            IPEndPoint groupEP = new IPEndPoint(IPAddress.Any, listenPort);
            try
            {
                while (!done)
                {
                    Console.WriteLine("Waiting for broadcast");
                    byte[] bytes = listener.Receive(ref groupEP);
                    Console.WriteLine("Received broadcast from {0} :\n {1}\n", groupEP.ToString(), Encoding.ASCII.GetString(bytes, 0, bytes.Length));
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e.ToString());
            }
            finally
            {
                listener.Close();
            }
        }

        public static int Main()
        {
            StartListener();

            return 0;
        }
    }

}

这是我的NodeMCU客户端:

#include <ESP8266WiFi.h>
#include <WiFiUDP.h>

// WIFI
const char* ssid = "****";  //  your network SSID (name)
const char* pass = "****";       // your network password

//testing with election server
const char* serverIP="192.168.254.111"; //IPV4 addresss?
unsigned int serverPort = 12346; 

byte packetBuffer[512]; //buffer to hold incoming and outgoing packets
// A UDP instance to let us send and receive packets over UDP
WiFiUDP Udp;

// NodeMCU pin mapping
//const uint8_t D0   = 16;
//const uint8_t D1   = 5;
//const uint8_t D2   = 4;
//const uint8_t D3   = 0;
//const uint8_t D4   = 2;
//const uint8_t D5   = 14;
//const uint8_t D6   = 12;
//const uint8_t D7   = 13;
//const uint8_t D8   = 15;
//const uint8_t D9   = 3;
//const uint8_t D10  = 1;

void setup(){
  Serial.begin(115200);
  Serial.println("starting");
  start_wifi();
}

void printWifiStatus() {
  // print the SSID of the network you're attached to:
  Serial.print("SSID: ");
  Serial.println(WiFi.SSID());
  // print your WiFi shield's IP address:
  IPAddress ip = WiFi.localIP();
  Serial.print("IP Address: ");
  Serial.println(ip);
}

void start_wifi() {
    // setting up Station AP
  WiFi.begin(ssid, pass);
  // Wait for connect to AP
  Serial.print("[Connecting]");
  Serial.print(ssid);
  int tries=0;
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
    tries++;
    if (tries > 30){
      break;
    }
  }
  Serial.println();
  printWifiStatus();
  Serial.println("Connected to wifi");
  Serial.print("Udp server started at port ");
  Serial.println(localPort);
  Udp.begin(localPort);
}

void loop() {        
  Udp.beginPacket(serverIP, serverPort);
  Udp.write("Test Message");
  delay(500);
  Serial.println("OK");
}

我希望我的客户能够发送由我的C#程序收到的消息。非常感谢你。

1 个答案:

答案 0 :(得分:0)

我忘了把Udp.endPacket();放在我客户的循环语句中。