C # Web Socket: отправить строку размером более 125 байт [дубликат]

$("#submit_car").click( function() {
  var formData = new FormData($('#car_cost_form')[0]);
$.ajax({
       url: 'car_costs.php',
       data: formData,
       async: false,
       contentType: false,
       processData: false,
       cache: false,
       type: 'POST',
       success: function(data)
       {
       },
     })    return false;    
});

изменить: указать тип контента и данные процесса. Вы можете просто использовать это для загрузки файлов через Ajax ...... submit input не может быть элементом внешней формы:)

0
задан ralph 20 February 2012 в 09:55
поделиться

2 ответа

Ваш код для записи длины сообщения должен быть расширен. Расширенная полезная нагрузка в диаграмме формирования данных спецификации протокола показывает, что отсутствует.

Для сообщений длиной до 125 байт ваш код верен. Для сообщений> 125, но & lt; = 65536 байтов, вам необходимо записать 3 байта - первый байт равен 126; следующие 2 байта дают длину сообщения. Для сообщений> 65536 байт вам нужно написать 9 байтов - первый байт равен 127; следующие 8 байтов дают длину сообщения.

2
ответ дан simonc 22 August 2018 в 07:06
поделиться

Вы должны создать правильный фрейм, вот метод:

static private byte[] CreateFrame(string message, MessageType messageType = MessageType.Text, bool messageContinues = false)
    {
        byte b1 = 0;
        byte b2 = 0;

        switch (messageType)
        {
            case MessageType.Continuos:
                b1 = 0;
                break;
            case MessageType.Text:
                b1 = 1;
                break;
            case MessageType.Binary:
                b1 = 2;
                break;
            case MessageType.Close:
                b1 = 8;
                break;
            case MessageType.Ping:
                b1 = 9;
                break;
            case MessageType.Pong:
                b1 = 10;
                break;
        }

        b1 = (byte)(b1 + 128); // set FIN bit to 1

        byte[] messageBytes = Encoding.UTF8.GetBytes(message);

        if (messageBytes.Length < 126)
        {
            b2 = (byte)messageBytes.Length;
        }
        else
        {
            if (messageBytes.Length < Math.Pow(2,16)-1)
            {                   
                b2 = 126;

            }
            else
            {
                b2 = 127;
            }

        }

        byte[] frame = null;

        if(b2 < 126)
        {
            frame = new byte[messageBytes.Length + 2];
            frame[0] = b1;
            frame[1] = b2;
            Array.Copy(messageBytes, 0, frame, 2, messageBytes.Length);
        }
        if(b2 == 126)
        {
            frame = new byte[messageBytes.Length + 4];
            frame[0] = b1;
            frame[1] = b2;
            byte[] lenght = BitConverter.GetBytes(messageBytes.Length);
            frame[2] = lenght[1];
            frame[3] = lenght[0];
            Array.Copy(messageBytes, 0, frame, 4, messageBytes.Length);
        }

        if(b2 == 127)
        {
            frame = new byte[messageBytes.Length + 10];
            frame[0] = b1;
            frame[1] = b2;
            byte[] lenght = BitConverter.GetBytes((long)messageBytes.Length);

            for(int i = 7, j = 2; i >= 0; i--, j++)
            {
                frame[j] = lenght[i];
            }
        }

        return frame;
    }
1
ответ дан Jarek 22 August 2018 в 07:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: