public Bitmap ReceiveImage()
        {
            int      receivedPackages = 0;
            ImageBit image            = Deserialize(client.Receive());

            ImageBit[] arrStructs = new ImageBit[image.NumberBits];
            arrStructs[image.CurrentBit] = image;
            int imageNumber = image.ImageNumber;

            receivedPackages++;
            while (true)
            {
                image = Deserialize(client.Receive());
                if (imageNumber == image.ImageNumber)
                {
                    receivedPackages++;
                    arrStructs[image.CurrentBit] = image;
                    if ((receivedPackages == (image.NumberBits)) && (imageNumber == image.ImageNumber))
                    {
                        client.SendResponse(response);
                        return(AssemblyBitmap(arrStructs, image.Size));
                    }
                }
                else
                {
                    imageNumber = image.ImageNumber;
                    arrStructs  = new ImageBit[image.NumberBits];
                    arrStructs[image.CurrentBit] = image;
                    receivedPackages             = 1;
                }
            }
        }
        public void SendImage(Bitmap bmp, int imageNumber)
        {
            int count = 0, currentBit = 0;

            byte[] arr        = StreamToArray(ScreenCapture.VaryQualityLevel(bmp));
            int    numberBits = (arr.Length / PackageSize) + ((arr.Length % PackageSize) == 0 ? 0 : 1);

            while (count < arr.Length)
            {
                int    arrLength = (arr.Length - count) > PackageSize ? PackageSize : arr.Length - count;
                byte[] tempArr   = new byte[arrLength];
                Array.Copy(arr, count, tempArr, 0, arrLength);
                ImageBit bit = new ImageBit()
                {
                    NumberBits  = numberBits,
                    CurrentBit  = currentBit++,
                    Data        = tempArr,
                    ImageNumber = imageNumber,
                    Size        = arr.Length
                };
                tempArr = Serialize(bit);
                count  += arrLength;
                client.Send(tempArr);
            }
        }
        private byte[] Serialize(ImageBit image)
        {
            BinaryFormatter formatter = new BinaryFormatter();
            MemoryStream    ms        = new MemoryStream();

            formatter.Serialize(ms, image);
            return(StreamToArray(ms));
        }