我试图让它发挥作用几天都感到沮丧。我发现的相关内容似乎也没有帮助。我在这里有点新意,所以请善待。我希望能够从作为客户端的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#程序收到的消息。非常感谢你。
答案 0 :(得分:0)
我忘了把Udp.endPacket();
放在我客户的循环语句中。