Как Вы регулируете пропускную способность сокетного соединения в C?

Сохранять и извлекать глобальные переменные функциональным способом. Чтобы проверить, убедитесь, что на странице есть элементы Textview, раскомментируйте две строки в коде и запустите. Затем прокомментируйте две строки и запустите. Здесь идентификатор TextView - это имя пользователя и пароль.

В каждом классе, где вы хотите его использовать, добавьте эти две процедуры в конец. Я бы хотел, чтобы эта процедура была глобальной процедурой, но не знаю, как это сделать. Это работает.

Варианты доступны везде. Он хранит переменные в «MyFile». Вы можете изменить его на своем пути.

Вы вызываете его с помощью

 storeSession("username","frans");
 storeSession("password","!2#4%");***

, имя пользователя переменной будет заполнено «frans» и пароль с «! 2 # 4%». Даже после перезапуска они доступны.

и вы извлекаете его с помощью

 password.setText(getSession(("password")));
 usernames.setText(getSession(("username")));

ниже всего кода моей grid.java

    package nl.yentel.yenteldb2;
    import android.content.SharedPreferences;
    import android.os.Bundle;
    import android.support.design.widget.FloatingActionButton;
    import android.support.design.widget.Snackbar;
    import android.support.v7.app.AppCompatActivity;
    import android.support.v7.widget.Toolbar;
    import android.view.View;
    import android.widget.EditText;
    import android.widget.TextView;

    public class Grid extends AppCompatActivity {
    private TextView usernames;
    private TextView password;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_grid);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                        .setAction("Action", null).show();
            }
        });
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);

      ***//  storeSession("username","frans.eilering@gmail.com");
        //storeSession("password","mijn wachtwoord");***
        password = (TextView) findViewById(R.id.password);
        password.setText(getSession(("password")));
        usernames=(TextView) findViewById(R.id.username);
        usernames.setText(getSession(("username")));
    }

    public void storeSession(String key, String waarde) { 
        SharedPreferences pref = getApplicationContext().getSharedPreferences("MyFile", MODE_PRIVATE);
        SharedPreferences.Editor editor = pref.edit();
        editor.putString(key, waarde);
        editor.commit();
    }

    public String getSession(String key) {
//http://androidexample.com/Android_SharedPreferences_Basics/index.php?view=article_discription&aid=126&aaid=146
        SharedPreferences pref = getApplicationContext().getSharedPreferences("MyFile", MODE_PRIVATE);
        SharedPreferences.Editor editor = pref.edit();
        String output = pref.getString(key, null);
        return output;
    }

    }

ниже вы найдете элементы textview

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="usernames"
    android:id="@+id/username"
    android:layout_below="@+id/textView"
    android:layout_alignParentStart="true"
    android:layout_marginTop="39dp"
    android:hint="hier komt de username" />

 <TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="password"
    android:id="@+id/password"
    android:layout_below="@+id/user"
    android:layout_alignParentStart="true"
    android:hint="hier komt het wachtwoord" />
21
задан Brian R. Bondy 10 March 2009 в 17:42
поделиться

3 ответа

Проблема со сном постоянной суммы 1 секунды после каждой передачи состоит в том, что у Вас будет изменчивая производительность сети.

BandwidthMaxThreshold, которому Позволяют, быть желаемым порогом пропускной способности.

TransferRate, которому Позволяют, быть текущей скоростью передачи соединения.

Тогда...

при обнаружении TransferRate> BandwidthMaxThreshold тогда Вы делаете SleepTime = 1 + SleepTime * 1.02 (время сна увеличения на 2%)

Прежде или после того, как каждая сетевая операция делает Сон (SleepTime)

при обнаружении TransferRate, намного ниже, чем BandwidthMaxThreshold, можно уменьшить SleepTime. Кроме того, Вы могли просто затухать/уменьшать свой SleepTime со временем всегда. В конечном счете Ваш SleepTime достигнет 0 снова.

Вместо увеличения 2% Вы могли также сделать увеличение большей суммой линейно различия между TransferRate - BandwidthMaxThreshold.

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

17
ответ дан 29 November 2019 в 20:59
поделиться

Лучший способ состоял бы в том, чтобы использовать маркерный блок .

Передача только, когда у Вас есть достаточно маркеров для заполнения пакета (1 460 байтов были бы хорошей суммой), или если Вы - получить сторона, читала из сокета только, когда у Вас есть достаточно маркеров; немного простой математики скажет Вам, сколько времени необходимо ожидать, прежде чем у Вас будет достаточно маркеров, таким образом, можно спать, что количество времени (стараться вычислить то, для какого количества маркеров полученный тем, насколько Вы на самом деле спали, начиная с большинства операционных систем, можно спать процесс дольше, чем Вы, спросило).

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

11
ответ дан 29 November 2019 в 20:59
поделиться

Мне везло с струйка . Это прохладно, потому что это может отрегулировать произвольные приложения пространства пользователя без модификации. Это работает путем предварительно загружения его собственных send/recv функций обертки, которые делают вычисление пропускной способности для Вас.

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

Обновление в 2017: это похоже на струйку, перемещенную в https://github.com/mariusae/trickle

7
ответ дан 29 November 2019 в 20:59
поделиться