Kryonet отключает клиента 1, как только подключается клиент 2.

Я уже работал с Kryonet, когда я общался один на один, и это работало хорошо.

Сейчас я делаю более «стандартный» проект, в котором у нас будет 1 сервер и несколько клиентов для подключения к нему.

Проблема, с которой я сталкиваюсь, описана в заголовке: клиент 1 подключается, проблем нет. Затем я прошу клиента 2 подключиться, и сразу же клиент 1 отключается. Почему-то сервер не хочет поддерживать более одного одновременного подключения.

Пару раз нам удалось подключить 2, а затем всякий раз, когда 3-й подключается, другие падают.

Работает на нескольких разных устройствах все ICS+ (galaxy nexus, tab2, SGS3).

Коды, которые я использую, очень похожи на примеры:

серверная часть:

    server = new Server();
    ServiceData.RegisterKryo(server.getKryo());
    server.addListener(new MyServerListener());
    try {
        server.bind(ServiceData.SERVER_PORT_TCP);
        server.start();
    } catch (IOException e) {
        Log.e(TAG, "IOException. Failed to start server. " + e.getMessage());
        MyServer.this.stopSelf();
    }

И затем на стороне клиента:

final String ip = intent.getExtras().getString(KEY_SERVER_IP);
listener = new MyClientListener();
client = new Client();
client.start();
ServiceData.RegisterKryo(client.getKryo());
client.addListener(listener);
try {
    client.connect(5000, ip, ServiceData.SERVER_PORT_TCP);
} catch (IOException e) {
    Log.e(TAG, "IOException. Failed to start client. " + e.getMessage() + "\n");
    e.printStackTrace();
    MyClient.this.stopSelf();
}

слушателей на данный момент только Log.v(TAG, "something happened);, и я также включил все журналы из библиотеки Kryonet с помощью com.esotericsoftware.minlog.Log.set(com.esotericsoftware.minlog.Log.LEVEL_TRACE);, поэтому я могу видеть, когда он подключается и когда отключается.

Я получаю два разных сообщения при отключении:

DEBUG: [kryonet] Connection 3 timed out.

и

DEBUG: [kryonet] Unable to read TCP from:

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

редактировать: немного больше информации: я понял, что между INFO: [kryonet] Connection 3 connected: /192.168.0.104 и моим слушателем, получающим обратный вызов connected, это занимает около 9 секунд! Очень странно.


person Budius    schedule 17.01.2013    source источник


Ответы (1)


К кому может попасть в тот же вопрос.

По-видимому, это ограничение Android (вероятно, потому что это мобильное устройство)

Я только что переместил код Server в обычное Java-приложение .jar и разрешил клиентам Android подключаться к ПК, и теперь все работает нормально. До сих пор тестировалось с 6 устройствами, подключенными без проблем.

person Budius    schedule 17.01.2013
comment
@ Budius, можете ли вы поделиться исходным кодом вашего приложения? Я хотел бы сделать приложение, которое подключается к серверу с 3g - person letroll; 25.10.2013
comment
привет @letroll Я даже больше не работаю в этом месте. Но примеры кода и т. д. можно найти на веб-сайте библиотеки: code.google.com/p/kryonet. - person Budius; 28.10.2013
comment
спасибо за ссылку, но примеров только для Android нет, поэтому мне пришлось удалить все свинговые вещи и заменить их эквивалентными виджетами. Но мой пример проекта не работает :( - person letroll; 28.10.2013
comment
вся часть подключения/отправки/получения kryonet состоит всего из 15 строк кода, которые вы можете скопировать из первого HTML-кода на этом сайте. Удачи. - person Budius; 28.10.2013