Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Java программирование > Общие вопросы по Java, Java SE, Kotlin
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.11.2015, 19:10   #1
ser70
Форумчанин
 
Аватар для ser70
 
Регистрация: 02.10.2009
Сообщений: 255
По умолчанию Сетевое программирование

Здравствуйте уважаемые форумчане!
У меня возник такой вопрос, какими средствами лучше всего воспользоваться при разработке сетевого приложения под андроид, стандартными в языке Java или же Android Studio(т.к. я веду разработку именно в этой среде)? Но я столкнулся с ужасной бедой, очень мало литературы в интернете сетевого программирование в андроид. И тогда я задался вопросом, а не будет ли хуже, если я использую стандартные средства Java? Прошу помочь мне в этом разобраться, заранее спасибо.
"Реальность воображаема, а воображаемое - реально" В. Соло
ser70 вне форума Ответить с цитированием
Старый 05.11.2015, 19:31   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

Что за каша в голове? Вы хоть осознаете, что спрашиваете, чем лучше программировать блокнотом или языком программирования? Андроид Студио это просто удобный блокнот, который использует для компиляции все то же самое - джаву и сдк/ндк.
p51x вне форума Ответить с цитированием
Старый 05.11.2015, 21:08   #3
ser70
Форумчанин
 
Аватар для ser70
 
Регистрация: 02.10.2009
Сообщений: 255
По умолчанию

Я наверное не корректно выразился. Приведу пример на языке с++ и средой Qt. Например в с++ есть библиотеки, которые реализуют сетевое программирование независимо от среды, но в Qt есть свои библиотеки, которые реализуют собственный функционал сетевого программирование и они очень удобные. И я хотел бы узнать, есть ли в Android Studio свой собственный функционал сетевого программирование, потому что в Сети Интернет я ничего не нашел и мне придется использовать библиотеки Java для реализации поддержки сети в своем приложении.
"Реальность воображаема, а воображаемое - реально" В. Соло
ser70 вне форума Ответить с цитированием
Старый 05.11.2015, 22:00   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

И опять вы путаете Qt Creator и либы Qt...
p51x вне форума Ответить с цитированием
Старый 07.11.2015, 12:37   #5
ser70
Форумчанин
 
Аватар для ser70
 
Регистрация: 02.10.2009
Сообщений: 255
По умолчанию

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

У меня еще такой вопрос, а если клиент написан на Java, а сервак на C++, будут ли они обмениваться данными???
"Реальность воображаема, а воображаемое - реально" В. Соло

Последний раз редактировалось Stilet; 08.11.2015 в 16:28.
ser70 вне форума Ответить с цитированием
Старый 07.11.2015, 15:49   #6
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

Цитата:
Сообщение от ser70 Посмотреть сообщение
а не пустой разговор не по теме, как это бывает обычно на этом форуме!!!
Вы знаете, что не получите ответ и лезете на этот форум, истезая себя? Вы мазохист или просто так...?

Цитата:
так что мне бы хотелось услышать ответ
Я вам уже ответил, что Qt Creator и Qt связаны только тем, что от одних ребят и они не стали особо заморачиваться. Так же и Андроид Студио наипсана на Джаве, использует Джавовские либы и т.д.
Еще раз повторю: Андроид Студио - это блокнот. Для компиляции он использует стандартные Джаву И Андроид СДК/НДК.

Цитата:
У меня еще такой вопрос, а если клиент написан на Java, а сервак на C++, будут ли они обмениваться данными???
В общем случае будут, в конкретном прийдется маршалинг данных/типов смотреть.
p51x вне форума Ответить с цитированием
Старый 07.11.2015, 16:24   #7
ser70
Форумчанин
 
Аватар для ser70
 
Регистрация: 02.10.2009
Сообщений: 255
По умолчанию

А можно вот с этого момента по подробнее объяснить "прийдется маршалинг данных/типов смотреть.", просто мне кажется я столкнулся с этой проблемой. После подключения с Android'a к Серверу(написанному на C++), когда я пытаюсь передать строку с android'a на сервак, то сервер получает только пустую строку, как с этим бороться. Заранее спасибо.
"Реальность воображаема, а воображаемое - реально" В. Соло
ser70 вне форума Ответить с цитированием
Старый 07.11.2015, 17:43   #8
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

Что именно вы передаете? Класс Стринг? Класс Стринг сериализованный? Байты из класса Стринг? Как передаете? ...
p51x вне форума Ответить с цитированием
Старый 07.11.2015, 18:57   #9
ser70
Форумчанин
 
Аватар для ser70
 
Регистрация: 02.10.2009
Сообщений: 255
По умолчанию

Я передаю обычную строку String функцией println.

Сервер написан в Qt(вдруг это важно)

С передачей клиентом Java на сервер C++ разобрался, а вот с сервера C++ на клиент Java, оказалось намного сложнее. Подскажите пожалуйста, даже предположений нет. Только код передаче с сервера C++ клиенту C++:
Код:
qDebug() << "sendToClient";
    QByteArray arrBlock;
    QDataStream out(&arrBlock, QIODevice::WriteOnly);
    out.setVersion(QDataStream::Qt_4_5);
    out << quint16(0) << str;

    out.device() -> seek(0);
    out << quint16(arrBlock.size() - sizeof(quint16));

    qDebug() << "Str = " << str;
    pSocket -> write(arrBlock);
Когда работает функция передачи, то клиент на Java зависает и все, а если закрыть сервер во время передачи, то передаются каряки-базяки.

Получение данных, код на Java:
Код:
  while((str = in.readLine()) != null) {
    Log.d(Tag, str);
  }
Вот набросок кода передачи данных, который имеется сейчас:
Код:
qDebug() << "sendToClient";
    QByteArray arrBlock;
    QDataStream out(&arrBlock, QIODevice::WriteOnly);
    out.setVersion(QDataStream::Qt_4_5);
    out << quint16(0);

    char * str_char = str.toLocal8Bit().data();

    out.writeRawData(str_char, sizeof(str_char));

    out.device() -> seek(0);
    out << quint16(sizeof(str_char) - sizeof(quint16));

    qDebug() << "Str = " << str;
    pSocket -> write(arrBlock);
"Реальность воображаема, а воображаемое - реально" В. Соло

Последний раз редактировалось Stilet; 08.11.2015 в 16:28.
ser70 вне форума Ответить с цитированием
Старый 08.11.2015, 13:58   #10
ser70
Форумчанин
 
Аватар для ser70
 
Регистрация: 02.10.2009
Сообщений: 255
По умолчанию

Теперь столкнулся с такой проблемой не приятной, вот код отправки данных сервером клиенту:
Код:
QByteArray arrBlock;
    QDataStream out(&arrBlock, QIODevice::WriteOnly);
    out.setVersion(QDataStream::Qt_4_5);
    char * str_char;

    if(str == QString("-1") || str == QString("-2") || str == QString("-3")) {
        if(str == QString("-1")) {
            str_char = new char[2];
            str_char[0] = '-';
            str_char[1] = '1';
        } else if(str == QString("-2")) {
            str_char = new char[2];
            str_char[0] = '-';
            str_char[1] = '2';
        } else if(str == QString("-3")) {
            str_char = new char[2];
            str_char[0] = '-';
            str_char[1] = '3';
        }
    } else {
        str_char = new char[str.length() + 1];
        str_char = str.toUtf8().data();
        qDebug() << "str_char = " << str_char;
    }

    out << quint32(0) << str_char;

    out.device() -> seek(0);
    out << quint32(sizeof(arrBlock.size()) - sizeof(quint16));

    qDebug() << "Str = " << str;
    pSocket -> write(arrBlock);
А вот код принятия данных клиента:
Код:
String str = null;
char[] buf = new char[100];
int r;
r = in.read(buf);
str = new String(buf, 0, r);
Наконец-то принимает данные без зависания, но теперь проблема я думаю сложнее намного. После того, как клиент принял данные, я вывожу строку String на экран и вижу, что первые восемь символов ромб с вопросом внутри и последние от 2 до 6 символов тоже ромбики. Перепробовал очень много кодировок, но если поменять utf-8, то вообще выводит бред!!! Что делать не знаю, подскажите пожалуйста.
"Реальность воображаема, а воображаемое - реально" В. Соло
ser70 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C# сетевое программирование Effractor C# (си шарп) 10 26.08.2013 23:30
Сетевое программирование на Си kilgoreq Общие вопросы C/C++ 0 16.04.2011 00:07
Сетевое программирование Armatus Обсуждение статей 16 01.12.2010 09:57
Сетевое программирование Тунец Помощь студентам 4 09.07.2009 00:07
Сетевое программирование Winnows-32 Помощь студентам 1 01.12.2008 07:16