2014-01-03 3 views
0

Я пытаюсь реализовать алгоритм маркера токена в C ... но я застрял в том, как создавать пакеты фиксированного размера, такие как 10 МБ, 20 МБ, 100 МБ и т. Д.c program - создавать всплески фиксированного размера

мой код для передачи данных 2Mb

for(i=0;i<2047;i++) 
    buffer[i] = 'a' ;   // some char 
if(sendto(sock_fd, buffer , 2048, 0, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0) 
      perror("\nmessage sending failed"); 
else 
     printf("message sent successfully"); 

Я думаю, мне просто нужно заполнить буфер символов с количеством мы хотим ... это правильный путь ?? Я думаю, что это поглотит много памяти для массива buffer? Любой лучший и стандартный способ сделать это?

+0

Не могли бы вы прояснить, как это работает, почему это не так и чего именно вы хотите достичь? – Ari

+0

память вашего массива буфера уже выделена и исправлена ​​(2048), поэтому он не будет потреблять много памяти! –

+0

Я имею в виду, что клиент отправляет пакет 100 МБ в течение 2 секунд, то есть 200 МБ данных ... так, как это сделать? – Subbu

ответ

0

Если вы говорите о попытке реализовать определенную скорость передачи данных, то это гораздо более сложная проблема. Если вы просто хотите отправить больше данных, тогда поставьте свой выше код в цикле и сделайте это несколько раз. (например: отправить 10 МБ, сделать свой цикл 5 раз). Чтобы разложить его на несколько секунд, вы можете добавить спящий режим (1) в цикл или какой-либо другой тип задержки (возможно, наномет).

Приблизительный метод для скорости передачи данных будет использовать меньший размер буфера, скажем, несколько К, а затем рассчитать задержку и количество циклов, необходимых для ее отправки. Например, используя 32-килобайтный буфер, чтобы отправить 200 МБ за 2 секунды, вы будете цитировать 200M/32K = 6400 раз. Задержка в будет составлять не более 2 с/6400 = 312500 наносекунд. Конечно, это будет не так точно, из-за времени, затраченного на выполнение кода, времени, необходимого для отправки пакетов через сокет, любых сетевых задержек и потери пакетов и т. Д. Но это может быть достаточно близко для вашего цели.

Смежные вопросы