Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вопрос по SMPP 
:(
    Опции темы
trueRevenant
Дата 10.8.2011, 08:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 10.8.2011

Репутация: нет
Всего: нет



сем доброго времени суток!

Недавно я разработал приложение для рассылки SMS-сообщений абонентам через шлюз SMPP. 
Все работало хорошо, пока не возникла потребеность отправке более длинных сообщений (в моем случае более 70 русских символов). в документации по используемой мной библиотеке которую откопал в интернете я прочел чтобы удлинить передаваемое сообщение нужно записать его в поле message_payload и что оно не должно использоваться совместно с полем short_message. Путем примеров из различных источников я изменил метод отправки. 
Для наглядности код ДО:

Код

public void sendSMS(String number, String text) throws IOException, PDUException, ValueNotSetException, TimeoutException, WrongSessionStateException
{
        SubmitSM submitSm = new SubmitSM();
        SubmitSMResp response;
        submitSm.setSourceAddr((byte) 5, (byte) 0, "Источник");
        submitSm.setDestAddr((byte) 1, (byte) 1, number);
        submitSm.setShortMessage(convert_str(text));
        submitSm.setRegisteredDelivery((byte) 1);
        submitSm.setDataCoding((byte) 8);
        submitSm.assignSequenceNumber(true);
        System.out.println("Submit request " + submitSm.debugString());
        response = session.submit(submitSm);
        System.out.println("Submit response " + response.debugString() + " MESSAGE ID : " + response.getMessageId());       
}


метод convert_str перевод сообщение в кодировку UTF16_BE
код ПОСЛЕ:
Код

public void sendSMS(String number, String text) throws IOException, PDUException, ValueNotSetException, TimeoutException, WrongSessionStateException
{
    ByteBuffer buf = new ByteBuffer();
    buf.appendByte((byte) 6);
    buf.appendByte((byte) 5);
    buf.appendByte((byte) 4);
    buf.appendShort((short)0x1581);
    buf.appendShort((short)0x0000);
    buf.appendBytes(text.getBytes(Data.ENC_UTF16_BE), text.length());
    SubmitSM submitSm = new SubmitSM();
    SubmitSMResp response;
    submitSm.setSourceAddr((byte) 5, (byte) 0, "Источник");
    submitSm.setDestAddr((byte) 1, (byte) 1, number);
    submitSm.setMessagePayload(buf);
    submitSm.setRegisteredDelivery((byte) 1);
    submitSm.setDataCoding((byte)0x0F5);
    submitSm.setEsmClass((byte)(Data.SM_UDH_GSM));
    submitSm.assignSequenceNumber(true);
    System.out.println("Submit request " + submitSm.debugString());
    response = session.submit(submitSm);
    System.out.println("Submit response " + response.debugString() + " MESSAGE ID : " + response.getMessageId());
}


При данных изменениях Сообщение приходит на телефон адресата, но нечитаемо (Текст - "Сообщение невозможно прочитать"). Некоторые строки я брал их примеров и они до сих пор мне не понятны если честно. Проблема в том что я не смог в инете найти внятного описания и примеров как работать с полем message_payload.

Может кто-нибудь с этим сталкивался? Жду ваших комментариев. Заранее спасибо.

Это сообщение отредактировал(а) trueRevenant - 10.8.2011, 09:10
PM MAIL   Вверх
trueRevenant
Дата 29.8.2011, 07:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 10.8.2011

Репутация: нет
Всего: нет



при дальнейшем поиске решения я наткнулся на новую проблему:
сейчас код отправки выглядит так:
Код

            SubmitSM submitSm = new SubmitSM();
            SubmitSMResp resp;
            submitSm.setDataCoding((byte) 8);
            submitSm.setRegisteredDelivery((byte) 1);
            submitSm.setEsmClass((byte)(Data.SM_UDH_GSM));
            submitSm.setSourceAddr((byte) 5, (byte) 0, "EATPBank");
            submitSm.setDestAddr((byte) 1, (byte) 1, number);
            ByteBuffer payload = new ByteBuffer();
            System.out.println(text);
            System.out.println(text.length());
            payload.appendString(text, Data.ENC_UTF16_BE);
            System.out.println("Submit request " + submitSm.debugString());
            System.out.println(payload.length());
            submitSm.setMessagePayload(payload);
            resp = session.submit(submitSm);
            System.out.println("Submit response " + resp.debugString() + " MESSAGE ID : " + resp.getMessageId());


но при отправке сообщения более 70 русских символов, сообщение просто не доходит до адресата. если 70 или менее то все нормально доходит и читается.
хотя поле для больших сообщений. чем это обусловлено пока понять не могу.

Это сообщение отредактировал(а) trueRevenant - 29.8.2011, 08:00
PM MAIL   Вверх
trueRevenant
Дата 6.9.2011, 15:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 10.8.2011

Репутация: нет
Всего: нет



В дополнение к моему последнему посту. 
Ответ со шлюза возвращает ошибку в resp.getCommandStatus() = 192. перевел ее в HEX получил 0x000000C0. Почитал спецификацию протокола. 0x000000C0 - Error in the optional part of the PDU Body.
PM MAIL   Вверх
Rodman
Дата 16.11.2011, 16:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

Репутация: нет
Всего: 122



Тут лучше перехватить tcpdump... в нем легче понять суть проблемы.

Если нужно - то помогу!
PM MAIL WWW Skype GTalk YIM MSN   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Работа с сетью | Следующая тема »


 




[ Время генерации скрипта: 0.0458 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.