Что делает сетевое соединение «более медленным», чем другое, связано с задержкой и / или пропускной способностью. Поэтому, если вы хотите иметь реалистичное моделирование, вам нужно найти пропускную способность вашего мобильного телефона, а также его задержку и смоделировать это в вашей клиентской программе.
Но вы, похоже, подразумеваете, что отправляете очень мало данных, поэтому пропускная способность, вероятно, не повлияет на скорость вашего соединения. Таким образом, вы можете просто имитировать задержку, и это делает то, что вы делаете: сон (задержка) между каждым отправленным пакетом. 5 секунд, похоже, много.
Но если вы думаете, что пропускная способность может быть релевантной, на самом деле очень просто смоделировать: пропускная способность - это максимальное количество байтов в секунду, которое вы можете отправить, а задержка - это длительность, необходимая для достижения цели.
Как это сделать: иметь глобальную временную метку «заблокирован», представляющую время, когда ваше соединение снова становится свободным для отправки данных. Инициализируйте значение 0 в начале вашей программы, поскольку мы предполагаем, что она еще не используется. Затем, каждый раз, когда у вас есть пакет для отправки, если «_blockedUntil» меньше чем now (), установите его в now (). Затем подсчитайте время, которое потребуется для записи в вымышленный «провод», выполнив: packet.size () / bandwidth, который даст вам продолжительность, добавит задержку и добавит ее в «blockUntil».
Теперь вычислите dt = blockUntil - now (), добавьте пакет в очередь и добавьте таймер, запускающий в «dt», который вставит первый пакет в очередь и отправит его.
Итак, вы смоделировали пропускную способность и задержку.
Редактировать: как кто-то упомянул, есть и вопрос об отброшенных пакетах. Вы можете смоделировать это, имея вероятность сброса пакетов. Примечание: Это возможно только при манипулировании пакетами из неподключенного протокола, такого как Ethernet или UDP. Например, в случае TCP он не будет работать.