Проблема связи с ENC28J60
Я хочу отправлять/получать строки в/из ENC28J60 через приложение C#. Для этого я использовал свой собственный «протокол». Например, я отправляю «» в Arduino, и он отвечает строкой, содержащей значения температуры. Этот метод отлично работает в режиме последовательной связи, но зависает в сетевом режиме. Что мне здесь не хватает? Есть ли лучший способ сделать это? Я новичок в программировании сокетов. Я использую UIPEthernet.h от ntruchsess.
Мой серверный код (Arduino):
void checkAndReceiveFromTCPClients(){
size_t size;
if (EClient = EServer.available()){
char* strIn;
if(size = EClient.available() > 0){
strIn = (char*)malloc(size + 1);
memset(strIn, 0, size + 1);
EClient.read(strIn, size);
}
strIn[size] = 0;
String strInput = String(strIn);
strInput.trim();
//Это отвечает клиенту (отправляет строку) строкой (EClient.write(ответ)):
InterpretInputString(strInput);
//EClient.stop();
EClient.flush();
}
}
Код C#:
string SendAndReceiveOverNet(string Command) {
Byte[] data = System.Text.Encoding.ASCII.GetBytes(Command);
NetworkStream stream = TClient.GetStream();
stream.Write(data, 0, data.Length);
data = new Byte[256];
String responseData = String.Empty;
Int32 bytes = stream.Read(data, 0, data.Length);
responseData = System.Text.Encoding.ASCII.GetString(data, 0, bytes);
return responseData;
}
@Safa Seed, 👍1
1 ответ
▲ 1
Здесь нужно что-то подобное. Если вы используетеstream.Read без TClient.Available, программа зависнет или выйдет из строя.
Код C#:
string SendAndReceiveOverNet(string Command) {
Byte[] data = System.Text.Encoding.ASCII.GetBytes(Command);
NetworkStream stream = TClient.GetStream();
stream.Write(data, 0, data.Length);
String responseData = String.Empty;
Int32 size = TClient.Available;
if (size > 0)
{
data = new Byte[size];
Int32 bytes = stream.Read(data, 0, data.Length);
responseData = System.Text.Encoding.ASCII.GetString(data, 0, bytes);
}
return responseData;
}
,
@NaLex Software
Смотрите также:
- Обнаружение ESP8266 в сети
- Плата Arduino 4G LTE
- Использование AysncUDPMessage для ESP32 для отправки строковых данных
- Arduino Ethernet shield server и клиент одновременно
- Подключение Arduino к Philips Hue
- Как создать сервер сокетов Arduino для получения сообщений
- TCP-клиент readStringUntil только при наличии данных
- Безопасный HTTPS-запрос не выполняется в 90 % случаев.