Сразу начну с сути проблемы, я хочу отправить на устройство echo
пакет и при создании пакета размером больше, чем 255, выдает ошибку
byte[] packet = new byte[64000]; "Can't send packet: send error: PacketSendPacket failed"
сборка пакета была осуществлена вручную
byte[] packet = new byte[64000];
char[] ranMAC = MacDestination.ToCharArray(); //преобразуем мак адрес в символы
int g = 0;
//Адрес доставки
for (int i = 0; i < ranMAC.Count(); i += 2)
{
string t = "" + ranMAC[i] + ranMAC[i + 1];
packet[g] = Convert.ToByte(t, 16);
g++;
}
char[] array = MacSource.ToCharArray();
//Источник физ. адреса
for (int i = 0; i < array.Count(); i += 2)
{
string t = "" + array[i] + array[i + 1];
packet[g] = Convert.ToByte(t, 16);
g++; //заполняем и идем дальше
}
packet[g++] = Convert.ToByte("08", 16);
packet[g++] = Convert.ToByte("00", 16); //ip заголовок
packet[g++] = Convert.ToByte("45", 16);
packet[g++] = Convert.ToByte("00", 16);
packet[g++] = 0xF2; //тут должны быть длина пакета
packet[g++] = 0xf9; //длина пакета
packet[g++] = Convert.ToByte(("" + ranMAC[0] + ranMAC[1]), 16); // identifier
packet[g++] = Convert.ToByte(("" + ranMAC[2] + ranMAC[3]), 16);
packet[g++] = Convert.ToByte("00", 16);
packet[g++] = Convert.ToByte("00", 16);
packet[g++] = Convert.ToByte("80", 16);
packet[g++] = Convert.ToByte("01", 16);
packet[g++] = Convert.ToByte("00", 16);
packet[g++] = Convert.ToByte("00", 16);
byte[] tPacket = target.GetAddressBytes(); //ип адрес доставки
foreach (byte b in tPacket)
{
packet[g] = b;
g++;
}
tPacket = sources.GetAddressBytes(); //ип адрес
foreach (byte b in tPacket)
{
packet[g] = b;
g++;
}
Random rnd = new Random();
packet[g++] = Convert.ToByte("08", 16);
packet[g++] = Convert.ToByte("00", 16);
packet[g++] = Convert.ToByte("4d", 16); // чексума
packet[g++] = Convert.ToByte("53", 16); //чексумму я вычислил вручную, опыта не хватает, чтобы сделать это автоматически
packet[g++] = Convert.ToByte("00", 16);
packet[g++] = Convert.ToByte("01", 16);
packet[g++] = 0x00;
packet[g++] = 0x08;
packet[g++] = Convert.ToByte("61", 16);
packet[g++] = Convert.ToByte("62", 16);
packet[g++] = Convert.ToByte("63", 16);
packet[g++] = Convert.ToByte("64", 16);
packet[g++] = Convert.ToByte("65", 16);
packet[g++] = Convert.ToByte("66", 16);
packet[g++] = Convert.ToByte("67", 16);
packet[g++] = Convert.ToByte("68", 16);
packet[g++] = Convert.ToByte("69", 16);
packet[g++] = Convert.ToByte("6a", 16);
packet[g++] = Convert.ToByte("6b", 16);
packet[g++] = Convert.ToByte("6c", 16);
packet[g++] = Convert.ToByte("6d", 16);
packet[g++] = Convert.ToByte("6e", 16);
packet[g++] = Convert.ToByte("6f", 16);
packet[g++] = Convert.ToByte("70", 16);
packet[g++] = Convert.ToByte("71", 16);
packet[g++] = Convert.ToByte("72", 16);
packet[g++] = Convert.ToByte("73", 16);
packet[g++] = Convert.ToByte("74", 16);
packet[g++] = Convert.ToByte("75", 16);
packet[g++] = Convert.ToByte("76", 16);
packet[g++] = Convert.ToByte("77", 16);
packet[g++] = Convert.ToByte("61", 16);
packet[g++] = Convert.ToByte("62", 16);
packet[g++] = Convert.ToByte("63", 16);
packet[g++] = Convert.ToByte("64", 16);
packet[g++] = Convert.ToByte("65", 16);
packet[g++] = Convert.ToByte("66", 16);
packet[g++] = Convert.ToByte("67", 16);
packet[g++] = Convert.ToByte("68", 16);
packet[g++] = Convert.ToByte("69", 16);
//завершаем пакет
device.SendPacket(packet);
}
Приветствуется любая помощь и даже ссылки на документацию(ибо в интернете половину мертвы либо на старую версию)
Добрый деньНужен совет, потому что я не понимаю в какую сторону копать для решения проблемы
При нажатии на ячейку открывается новая форма, где должен отобразиться текст label:
Здравствуйте, есть функция которая отправляет в послед порт N байт, и ожидает получение ответа (N байт ответа) заданное время, если данные получены...
Нашел неплохой пример для работы с протоколом Modbus RTU Code Project