А я вот так
Код:
void checkDataFromClientTimerCallback(object sender, EventArgs e)
{
if (SocketToClient.Available > 2)
{
bool PacketRecived = false;
MainWindow.textBoxLog.AppendText("Получен пакет от Клиента\n");
//Считываем первые 2 байта пакета и преобразоваваем их в размер пакета
byte[] CurrentPacketSize = new byte[2];
SocketToClient.Receive(CurrentPacketSize,2,SocketFlags.None);
uint CurrentPacketSizeInInt = Packet.ReadH(CurrentPacketSize, 0);
//Если Полученых данных достаточно для считывания читаем
while (!PacketRecived)
{
if (SocketToClient.Available >= CurrentPacketSizeInInt - 2)
{
//Считываем Содержимое пакета
byte[] BytesRecivedFromClient = new byte[CurrentPacketSizeInInt - 2];
SocketToClient.Receive(BytesRecivedFromClient);
PacketRecived = true;
//Создаем пакет на основе полученных данных
Packets.Add(new Packet(BytesRecivedFromClient, CurrentPacketSizeInInt, false, this));
//Шлем пакет Клиенту
byte[] PacketToSend = new byte[BytesRecivedFromClient.Length + 2];
PacketToSend[0] = CurrentPacketSize[0];
PacketToSend[1] = CurrentPacketSize[1];
for (int index = 2; index < PacketToSend.Length; index++)
{
PacketToSend[index] = BytesRecivedFromClient[index - 2];
}
SocketToServer.Send(PacketToSend);
}
Thread.Sleep(100);
}
//MainWindow.dataGridPackets.Items.Refresh();
}
}
Дешифровка пакетов в обоих направлениях наконецто работает нормально.
Парсинг тоже теперь заработал.
Завтра буду вводить еще 2 ключа GKey для подпихивания своих пакетов.