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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> реализация простого протокола на java, правильно ли я делаю? 
:(
    Опции темы
zone51
Дата 7.1.2008, 16:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Доброго времени суток всем! Помогите решить проблему. Задача стоит такая: написать небольшой протокол обмена информацией между клиентом и сервером
Значит так сервер занимается отправкой сообщений смс. Он принимает от клиента по сокету служебное слово DELIVERYSTART после чего должен принять список получателей сообщения каждый получатель идет командой RECIPIENT и само сообщение по команде MESSAGE. Завершается передача командой DELIVERYEND. Так вот у меня вопрос как сделать так чтобы гарантировать корректную обработку ошибки в случае неполной передачи и можно ли передать список получателей как обьект скажем ArrayList тот же самый. И самое главное как организовать на клиенте все эти функции то есть взаимодействие с сервером. В принципе я понимаю как это сделать но я не уверен правильно ли , буду рад любой помощи, заранее спасибо. Здесь привожу фрагмент сервера

Код

package sms;

import ie.omk.smpp.Address;
import ie.omk.smpp.Connection;
import ie.omk.smpp.message.SMPPPacket;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.ArrayList;

public class SMSSender extends Thread {

    private String message;
    private Socket socket = null;
        
    public SMSSender(String message, Socket s) {
        this.message = message;
        this.socket = s;
    }

    public void run() {

        boolean flag = false;
        boolean flag1 = false;
        boolean flag2 = false;
        boolean flag3 = false;
        BufferedReader in;
        String buf = "";
        PrintWriter out;
        ArrayList<String> recps = new ArrayList<String>();
        Connection connection;

        try {

            in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            out = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()));

            while ((buf = in.readLine()) != null) {
                if (buf.indexOf("STARTDELIVERY") != -1) {
                    flag1 = true;
                    out.println("OK 250");
                }
                if (buf.indexOf("RECIPIENT") != -1) {
                    flag2 = true;
                    recps.add(buf.substring(buf.indexOf("=") + 1));

                }
                if (buf.indexOf("MESSAGE") != -1) {
                    flag3 = true;
                    message = buf.substring(buf.indexOf("=") + 1);
                }
                if (buf.indexOf("ENDDELIVERY") != -1) {
                    out.println("OK BYE");
                    flag = true;
                    break;
                }
            }

            if (flag && flag1 && flag2 && flag3) {


                SMPPPacket sms;

                // sms = connection.newInstance(SMPPPacket.SUBMIT_SM);


                Address address = new Address();
                //  address.setAddress(destination);
                //sms.setDestination(address);

                //   sms.setMessageText(message);

                //  connection.sendRequest((SMPPRequest) sms);


            } else {
                //Generate error
            }
        }


        catch (Exception ux) {
            System.err.println("SMPPAPI:" + ux.getMessage());
        }
    }
}


 smile 


--------------------
The truth is out there
PM MAIL   Вверх
AntonSaburov
Дата 8.1.2008, 14:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

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



Я бы попробовал передавать в виде XML - пусть немного накладнее, зато можно гарантировать, что если уж документ передан, то надежно все передано.
PM MAIL WWW ICQ   Вверх
barin_Student
Дата 8.1.2008, 15:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 488
Регистрация: 10.8.2007
Где: Казахстан , Алмат ы

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



Помойму проще не разрабатывать то что есть...
Вы уже в своем коде использовали часть SMPP протокола, проще его полностью реализовать..
www.isms.ru, посмотрите, если я про то.


--------------------
Нехорошо блин!!!
PM MAIL   Вверх
jManiak
Дата 8.1.2008, 15:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Ну можно каким-нибудь алгоритмом генерировать контрольную сумму сообщения.
И на другой стороне генерировать такой же checksum, после чего сравнивать их. Если не равно одно другому, то пересылать заново.
PM MAIL ICQ   Вверх
niasilil
Дата 8.1.2008, 21:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(jManiak @ 8.1.2008,  15:10)
Ну можно каким-нибудь алгоритмом генерировать контрольную сумму сообщения.
И на другой стороне генерировать такой же checksum, после чего сравнивать их. Если не равно одно другому, то пересылать заново.

Можно, конечно, только смысла особого нет - TCP же. 


--------------------
SCJP 5.0, SCJD
PM MAIL   Вверх
barin_Student
Дата 9.1.2008, 06:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 488
Регистрация: 10.8.2007
Где: Казахстан , Алмат ы

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



Если вам надо массовую рассылку SMS,
прочитайте спецификацию SMPP,а именно SubmitMultiSM, и не надо будет самому что то делать, надо будет просто подставить готовые классы в нужном вам итоге... smile 


--------------------
Нехорошо блин!!!
PM MAIL   Вверх
jManiak
Дата 9.1.2008, 09:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(niasilil @  8.1.2008,  21:32 Найти цитируемый пост)
Можно, конечно, только смысла особого нет - TCP же. 

Да, знаю я несколько систем, которые тоже обмениваются данными через tcp... 
Вы не поверите, но процент ошибочных данных примерно равен 30%, хотя в целом от точки отправления до точки назначения не более 10% потерь больших пакетов, точно таких же как пересылает эта система.

Так что tcp - это как выяснилось еще не гарантия доставки данных. Я бы не поленился и написал проверку чексама...
PM MAIL ICQ   Вверх
w1nd
Дата 9.1.2008, 09:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вертилятор
***


Профиль
Группа: Завсегдатай
Сообщений: 1077
Регистрация: 22.3.2006
Где: Москва

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



Цитата(jManiak @  9.1.2008,  09:19 Найти цитируемый пост)
Так что tcp - это как выяснилось еще не гарантия доставки данных. Я бы не поленился и написал проверку чексама...

TCP/IP не гарантирует доставки всех данных. Гарантируется лишь целостность тех данных, которые дошли.


--------------------
user posted imageuser posted image
PM MAIL ICQ   Вверх
niasilil
Дата 9.1.2008, 09:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



jManiak, можно подробнее про эти несколько систем? почему теряется 30% данных и где? 


--------------------
SCJP 5.0, SCJD
PM MAIL   Вверх
zone51
Дата 9.1.2008, 11:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



barin_Student, 
А вы можете подсказать где этот класс взять или привести простой пример процедуры для посылки смс с проверкой ее доставки? Огромное спасибо, очень надо smile  smile  smile 


--------------------
The truth is out there
PM MAIL   Вверх
barin_Student
Дата 9.1.2008, 11:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 488
Регистрация: 10.8.2007
Где: Казахстан , Алмат ы

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



Есть библиотека org.smpp.*; и еще много разных, вот привиду пример работы как по протоколу это делается:
В этой библиотеке есть команда 
Bind*// посылается запрос на установление соединения с SMPP сервером..
для посылки сообщения используются восновном DeliverSM и SubmitSM, для массовой рассылки используется SubmitMultiSM..
В DeliverSM есть поле (не помню точно как ) ,отвечающее за ответ о доставке..
Вот маленький пример как примерно работать по SMPP протоколу с Опсос либо просто SMPP серверами:
Код

 try {
        
            BindRequest request = null;
            BindResponse response = null;
            String syncMode = (asynchronous ? "a" : "s");
            request = new BindTransmitter();
           TCPIPConnection connection = new TCPIPConnection("127.0.0.1", 10013);
            connection.setReceiveTimeout(20*1000);
            session = new Session(connection);
             request.setSystemId("param1");
            request.setPassword("param2");
            request.setSystemType(null);
            request.setInterfaceVersion((byte)0x34);
           byte Ton = 1;
            byte Npi = 0;
            addressRange.setTon(Ton);
            addressRange.setNpi(Npi);*/
            request.setAddressRange(addressRange);
            // send the request
            System.out.println("Bind request " + request.debugString());
            response = session.bind(request);//приконекчиваемся к SMPP серверу, посылаем BindTransceiver();

            System.out.println("Bind response " + response.debugString());
            if (response.getCommandStatus() == Data.ESME_ROK) {
                bound = true;
                DeliverSM deliverSM = new DeliverSM();
                deliverSM.setShtoMessage("SMS ka");
             //для того чтобы указать серверу генерацию отчета надо еще указывать ESME там еще чаго то точно сказать не могу
                DeliverSMResp deliverResponse = new DeliverSMResp();
                 deliverResponse=session.deliver(deliverSM);
                 System.out.println("Otchet= "+deliverResponse.debugString());//собственно до SMPP Сервера уже дошло 
            }

        } catch (Exception e) {
                        debug.write("Bind operation failed. " + e);
            System.out.println("Bind operation failed. " + e);
        } finally {
                  }
    }


Добавлено @ 12:01
Да не всегда совпадает отчет о доставке с реальной доставкой, впринципе вы можете пока ограничется отчетом о получение команды доставки, вот есть начатая тема , там и полностью доки есть о SMPP:
http://www.isms.ru/faq.shtml?nameact=view&...=3&id2=1297

Добавлено через 8 минут и 13 секунд
В примере есть граматические ошибки , но не в этом суть...
Вы мне расскажите что дословно вам надо, кому вы посылаете сообщения ? Зачем вам отчет о доставке?(Хотя глупый вопрос).. И почему вы обрабатывали слова?

Это сообщение отредактировал(а) barin_Student - 9.1.2008, 12:02


--------------------
Нехорошо блин!!!
PM MAIL   Вверх
zone51
  Дата 9.1.2008, 14:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



barin_Student, 
Цитата

В примере есть граматические ошибки , но не в этом суть...
Вы мне расскажите что дословно вам надо, кому вы посылаете сообщения ? Зачем вам отчет о доставке?(Хотя глупый вопрос).. И почему вы обрабатывали слова?

А вы не из ЦРУ?  smile 
Система такая: есть электронный магазин и он отсылает клиентам смс о сделанных заказах, о  событиях если заказ пришел и т д, я сделал на яве смс центр который собирает информацию от магазина об смс, обрабатывает ее и посылает смс клиентам. Просто магазин не мой и все очень сложно я просто побоялся интегрировать это все в магазин. Вот и всё. А как просто послать смс толкового примера я не нашел я пользовался smppapi.sourceforge.net там в юзергейте это есть но ниче толкового не получилось а сроки поджимают поэтому и хотелось где то найти более менее рабочий пример посылки смс. Буду очень рад если у меня получится сделать рабочий модуль для этого) smile 


--------------------
The truth is out there
PM MAIL   Вверх
barin_Student
Дата 9.1.2008, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 488
Регистрация: 10.8.2007
Где: Казахстан , Алмат ы

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



http://www.koders.com/java/fidF86298CF6D3D...F9C2D05759.aspx
простой пример, если вам от магазина приходит просто текст который вам надо передать и куда(номер), а вы уже должны передать при помощи операторов СМС , то вам надо практически полностью делать сам протокол , там есть пингация и т.п. , за день вы это не решите)) smile  


--------------------
Нехорошо блин!!!
PM MAIL   Вверх
zone51
Дата 9.1.2008, 14:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



barin_Student, 
Нет просто вот попытаюсь так сказать: надо послать просто через интернет послать смс на мобилу, не через мобилу а через смпп интернет протокол. Неужели так сложно написать минимальный пример для этого? Мне казалось это уже давно решено


--------------------
The truth is out there
PM MAIL   Вверх
barin_Student
Дата 9.1.2008, 14:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 488
Регистрация: 10.8.2007
Где: Казахстан , Алмат ы

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



Возмите тот пример по последней ссылке , тот метод что есть Sumbit(), это и есть посылка смс..
не делал по Http , а если при помощи Опсос то это ко мне.. Я просто не вижу сложности разобрать тот пример, максимально простой..


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

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

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


 




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


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

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