Esempio n. 1
0
        public void Write(string data)
        {
            try
            {
                var dataAsBytes = Encoding.ASCII.GetBytes(data + "\r\n\r\n");

                var dataStringEncrypted = Crypting.EncryptStringToBytes(data + "\r\n\r\n");


                Debug.WriteLine("Non encrypted.. " + Encoding.ASCII.GetString(dataAsBytes));

                Debug.WriteLine("Encrypted " + Encoding.ASCII.GetString(dataStringEncrypted));

                Stream.Write(BitConverter.GetBytes(dataStringEncrypted.Length), 0, 4);
                Stream.Write(BitConverter.GetBytes(dataAsBytes.Length), 0, 4);

                Stream.Write(dataStringEncrypted, 0, dataStringEncrypted.Length);

                Stream.Flush();
            }
            catch (IOException e)
            {
                Disconnect();
            }
        }
Esempio n. 2
0
        private void OnRead(IAsyncResult ar)
        {
            try
            {
                int receivedBytes = Stream.EndRead(ar);
                TotalBuffer = Concat(TotalBuffer, Buffer, receivedBytes);


                while (TotalBuffer.Length > 8)
                {
                    int encryptedLength = BitConverter.ToInt32(TotalBuffer, 0);
                    int decryptedLength = BitConverter.ToInt32(TotalBuffer, 4);

                    if (TotalBuffer.Length >= 8 + encryptedLength)
                    {
                        //string receivedText = Encoding.ASCII.GetString(buffer, 0, receivedBytes);
                        byte[] PartialBuffer = TotalBuffer.Skip(8).Take(encryptedLength).ToArray();
                        String Decrypted     = Crypting.DecryptStringFromBytes(PartialBuffer);


                        string[] packetData = Regex.Split(Decrypted, "\r\n");
                        HandleData(packetData);
                        TotalBuffer = TotalBuffer.Skip(encryptedLength + 8).Take(TotalBuffer.Length - encryptedLength - 8).ToArray();
                    }
                    else
                    {
                        break;
                    }
                }
            }
            catch (IOException)
            {
                Program.Disconnect(this);
                return;
            }

            Stream.BeginRead(Buffer, 0, Buffer.Length, new AsyncCallback(OnRead), null);
        }