[C#] Socket Byte Array Dynamic Length

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by ShkiperLol, 15 Aug 2010.

  1. ShkiperLol

    ShkiperLol Banned

    Joined:
    17 Apr 2010
    Messages:
    182
    Likes Received:
    1
    Reputations:
    0
    Есть Сервер - Есть Клиент.

    Например, Клиент передает Серверу маасив байт, например 5000. НО сервер не знает, сколько он передает и приходится создавать массив больше чем 5000. Но поскольку клиент передает не вечно 5000, а разные значения угадать тяжело есть ли ответ? :confused:

    Поскольку я не знаю, сколько clientData (потому-то массив не создается статически)
     
  2. BrainDeaD

    BrainDeaD Elder - Старейшина

    Joined:
    9 Jun 2005
    Messages:
    774
    Likes Received:
    292
    Reputations:
    214
    перед отсылкой данных посылай их размер.
     
  3. ShkiperLol

    ShkiperLol Banned

    Joined:
    17 Apr 2010
    Messages:
    182
    Likes Received:
    1
    Reputations:
    0
    я понимаю. НО вот я не хочу отправлять количество (время). Может как-то можно по другому. А то отправлять исче и размер.

    Но все, же отправлять размер это их переводить в байты и отправлять это вы имеете в виду?
     
  4. herfleisch

    herfleisch Elder - Старейшина

    Joined:
    7 Jan 2009
    Messages:
    578
    Likes Received:
    203
    Reputations:
    13
    Отправляешь данные частями фиксированного размера. В частях (пакетах) указываешь номер, чтобы принимающая сторона могла восстановить данные в единое целое.

    Как правило, нормально спроектированные протоколы не отправляют данные наугад, простым мусором. Всё должно быть чётко согласованно. Разбиение данных переменной длины на части фиксированной - один из вариантов.
     
  5. Irdis

    Irdis Elder - Старейшина

    Joined:
    6 Feb 2006
    Messages:
    248
    Likes Received:
    52
    Reputations:
    3
    Ещё вариант.
    Обозначим начало и конец пакета каким-нибудь супер битом 22(например).
    так же необходимо взять ещё один супер бит в рассмотрение 23(например)
    скажем что
    22=>'23' '0'
    23=>'23' '1'
    Так вот если мы хотим отправить
    сообщение
    "11 22 23 0 5 22" то прежде перекодируем его в
    "22 11 23 0 23 1 0 5 23 1 22".
    Так мы будем знать начало и конец пакета и однозначно преобразовывать принятое сообщение в исходное.
    И цикл работы программы будет следующий:
    пришло "22 принимаем принимаем ... принимаем 22" парсим, принимаем следующее сообщение....
    Но при всём этом понятно, что передаваемое сообщение сильно набирает вес (и проще передавать размер).
     
    1 person likes this.