Показать сообщение отдельно
Непрочитано 12.10.2015, 03:05   #1
Аватар для Zubastic
ZG troll squad

Автор темы (Топик Стартер) Чтение из сокета

Собственно пришел к тому, что код, который был у меня написан неэффективен, и как следствие тормозит все. Другое дело, что я понятия не имею, как переписать этот кусок:
            while (Connected)
            {
                try
                {
                    var tmpbuffer = new byte[1];
                    SocketToServer.Receive(tmpbuffer, 1, SocketFlags.None);
                    var newBuffer = new byte[_bufferFc.Length + 1];
                    _bufferFc.CopyTo(newBuffer, 0);
                    newBuffer[_bufferFc.Length] = tmpbuffer[0];
                    var packetLength = -1;
                    if (newBuffer.Length > 1) packetLength = BitConverter.ToInt16(new[] { newBuffer[0], newBuffer[1] }, 0);
                    if (newBuffer.Length >= packetLength && packetLength != -1)
                    {
                        var finalPacket = new byte[packetLength];
                        var leftOver = new byte[newBuffer.Length - packetLength];
                        newBuffer.CopyTo(finalPacket, 0);
                        newBuffer.CopyTo(finalPacket, newBuffer.Length - packetLength);
                        newBuffer = leftOver;
                        DataReceivedToClient(finalPacket);
                        _dbg.Information(finalPacket.Length + " Fc: " + BitConverter.ToString(finalPacket));
                    }
                    _bufferFc = newBuffer;
                }
                catch
                {
                    Close();
                }
            }
Code: C++
Собирать пакет по 1 байту мне кажется глупым занятием, хотя возможно я не прав и это решение оптимально...вообщем буду рад комментариям.
__________________
Zubastic вне форума Ответить с цитированием