TCP / IP-связь между сервером ESP8266 и клиентским приложением WinForm на C # - PullRequest
0 голосов
/ 29 сентября 2019

Я пытаюсь установить связь между клиентом / сервером .... В приложении C # в качестве клиента я отправляю данные на последовательный монитор ESP без проблем, поскольку я могу только отправлять данные из приложения в ESP. Мой запрос заключается в том, как отправить данные с последовательного монитора сервера ESP
enter image description here

В приложение C #, например, текстовое поле
enter image description here

Я попробовал несколько примеров кода, но у меня проблема с отправкой данных с сервера ESP в приложение C # в качестве клиента. Есть ли у вас какие-либо предложения о том, как решить мою проблему? Спасибо за любой ответ. Я прилагаю коды.

Код сервера ESP:

#include <ESP8266WiFi.h>
#include <WiFiClient.h>

//const char* ssid = "KTEEM";           // Skola
//const char* password = "88888888";    // Skola

//const char* ssid = "Mi A3";               // Ja
//const char* password = "44114144";        // Ja

const char* ssid = "Slavo";             //Domov
const char* password = "bubo2222";    //Domov   

//const char* host = "192.168.0.111"; //ipWifiSkola
//const char* host = "192.168.43.39"; //ipWifiMobil
const char* host = "192.168.0.105"; //ipWifiDomov

//const int udpPort = 8080;             //portserver

int newData;
String data;
WiFiServer server(5045);
WiFiClient client;

void setup()
{
  Serial.begin(115200);
  wifiConnect(); 
  server.begin();
}
void loop() {
    if (WiFi.status() != WL_CONNECTED)
    {
        wifiConnect();
    }   
    client = server.available();
    if(Serial.available())
        {
            String command = Serial.readStringUntil('\n');
            client.print(command);
            delay(300);
        }
    if (client){

            String data;
            Serial.println("Client connected");
            while (client.connected()){
                while(client.available()>0)
                {
                    //data = client.readStringUntil('\n');
                    //Serial.println(data);
                    char c = client.read();
                    Serial.write(c);
                }
                delay(10);
        }   
    client.stop();
    Serial.println("Client Disconnected");
    }   
}

void wifiConnect()
{
      WiFi.begin(ssid, password);
      Serial.println("");
      while (WiFi.status () != WL_CONNECTED)
      {
        delay(500);
        Serial.print(".");
      }
      Serial.println("");
      Serial.print("Connected to ");
      Serial.println(ssid);
      Serial.print("IP address: ");
      Serial.println(WiFi.localIP());

}

Код клиента C #:

    using System;
    using System.Text;
    using System.Threading;
    using System.Net.Sockets;
    using System.IO;

    namespace TCPIP_ESP
    {
        class TCPClient
        {
            public int HostPort = 5045;
            public string HostDomov = "192.168.0.105"; //Skola
            public string HostMobil = "192.168.43.39"; //Mobil
            public string HostSkola = "192.168.0.111"; //Domov
            private TcpClient tcpClient = new TcpClient();
            public Thread W_Thread;
            public Thread R_Thread;
            public bool IsListening = true;
            NetworkStream networkStream = null;
            public StreamReader serverData;
            public StreamWriter clientData;
            private StreamWriter streamWriter;   

            public NetworkStream NetworkStream { get => networkStream; set => networkStream = value; }

            public void SendData(Client c)
            {
                if (NetworkStream.CanWrite)
                {
                    byte[] sendBytes = Encoding.ASCII.GetBytes(c.txtMsg.Text + "$");
                    NetworkStream.Write(sendBytes, 0, sendBytes.Length);
                    c.txtMsg.Text = string.Empty;
                    NetworkStream.Flush();
                }
                else if (!NetworkStream.CanWrite)
                {
                    Console.WriteLine("You can not read data from this stream");
                    tcpClient.Close();
                }
            }
            public void ReadData(Client c)
            {
                try
                {
                    string returnData = null;
                    byte[] bytes = new byte[4096];
                    if (NetworkStream.CanRead)
                    {
                        int bytesRead = NetworkStream.Read(bytes, 0, bytes.Length);
                        returnData = Encoding.UTF8.GetString(bytes, 0, bytesRead);
                        Console.WriteLine("Data read ..." + returnData);
                        tcpClient.Close();
                        NetworkStream.Close();
                    }
                    else
                    {
                        Console.WriteLine("You cannot read data from this stream.");
                        tcpClient.Close();
                        NetworkStream.Close();
                    }
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.ToString());
                }

            }
            public void CreateConnection(Client c)
            {
                tcpClient.Connect(HostDomov, HostPort);
                NetworkStream = tcpClient.GetStream();
                streamWriter = new StreamWriter(NetworkStream);
                c.lblChangeData.Text = "Client Socket Porgram - Server Connected ...";
                tcpClient.ReceiveBufferSize = 1024;
                tcpClient.SendBufferSize = 1024;
                if (tcpClient.Connected)
                {
                    c.checkBox1.BackColor = System.Drawing.Color.Green;
                }
                else
                    c.checkBox1.BackColor = System.Drawing.Color.Red;
            }
            public void Disconnect()
            {
                tcpClient.Dispose();
                tcpClient.Close();
                NetworkStream.Close();
            }
            public void msg(Client c, string mesg)
            {
                c.listBox_Receive.Text = c.txtMsg.Text + Environment.NewLine + " >> " + mesg;
            }        
        }
    }
...