Send SMS por portas diferentes

4 respostas
Adaylon

Alguem saberia me dizer pq quando chamo o Start nas duas classes Connect utilizando portas diferentes, o método send não consegue ser executado pela Thread que chegou depois. E a Exceção que é gerada vem como null. Se pelo menos viesse alguma exceção eu ficaria feliz.

class Send extends UiApplication
{     

    private MenuItem start = new MenuItem("Start" , 100, 10)
    {
        public void run()
        {
                        new Connect().start();
                        new Connect_2().start();
        }
    };

    private class Connect extends Thread
    {    
        public String enviaSms(String tel, String texto)
        {
                String retorno = "";
                    try{
                        MessageConnection _dc = (MessageConnection)Connector.open("sms://"+tel+"5000");                
                        Message sms = _dc.newMessage(MessageConnection.TEXT_MESSAGE);
                        TextMessage sms2 = (TextMessage)sms;
                        sms2.setPayloadText(texto);
                        sms2.setAddress("sms://"+tel);   
                        _dc.send(sms2);
                        _dc.close();                            
                    } catch (InterruptedIOException ex) {  
                        retorno = ex.getMessage();
                    } catch (IOException ex) {  
                        retorno = ex.getMessage();
                    } catch (IllegalArgumentException ex) {  
                        retorno = ex.getMessage();
                    } catch (SecurityException ex) {  
                        retorno = ex.getMessage();
                    }
                return retorno;
        }
        
        public void run()
        {      
            enviaSms("55##@@@@@@@@","teste 1"));
        }
    } 

    private class Connect_2 extends Thread
    {    
        public String enviaSms(String tel, String texto)
        {
                String retorno = "";
                    try{
                        MessageConnection _dc = (MessageConnection)Connector.open("sms://"+tel+"5001");                
                        Message sms = _dc.newMessage(MessageConnection.TEXT_MESSAGE);
                        TextMessage sms2 = (TextMessage)sms;
                        sms2.setPayloadText(texto);
                        sms2.setAddress("sms://"+tel);   
                        _dc.send(sms2);
                        _dc.close();                            
                    } catch (InterruptedIOException ex) {  
                        retorno = ex.getMessage();
                    } catch (IOException ex) {  
                        retorno = ex.getMessage();
                    } catch (IllegalArgumentException ex) {  
                        retorno = ex.getMessage();
                    } catch (SecurityException ex) {  
                        retorno = ex.getMessage();
                    }
                return retorno;
        }
        
        public void run()
        {      
            enviaSms("55##@@@@@@@@","teste 2"));
        }
    } 
}

4 Respostas

P
  1. Qual o objetivo do teu código

  2. o número da porta está colocado ao número do telefone. Ou foi erro de digitação aqui ou é bug mesmo no teu código.verifique

Adaylon

Com relação a porta, foi erro de digitação mesmo. O Objetivo do código é o seguinte: Na minha tese de especialização preciso estudar como as operadoras contralam as conexões pelas portas de sms e mms, preciso entender o nível de segurança e qual estrutura é utilizada nas operadoras com relação especificamente à segurança.
Esse código seria o ponta pé inicial. Estou tentando abrir duas portas em diferentes conexões só que de um mesmo remetente. Quando o código chega no método send, quem chegou por último não consegue enviar. E na exceção não é gerada um tipo qualquer e somente null no objeto Exception. Para que eu possa prosseguir na minha pesquisa, preciso saber: a classe MessageConnection possui algum bug? pq a exceção é desconhecida pelo java? e se existe alguma forma em que eu possa simular essas conexões em paralelo em um mesmo remetente?. Grato...

class Send extends UiApplication   
{       
  
    private MenuItem start = new MenuItem("Start" , 100, 10)   
    {   
        public void run()   
        {   
                        new Connect().start();   
                        new Connect_2().start();   
        }   
    };   
  
    private class Connect extends Thread   
    {       
        public String enviaSms(String tel, String texto)   
        {   
                String retorno = "";   
                    try{   
                        MessageConnection _dc = (MessageConnection)Connector.open("sms://"+tel+":5000");                   
                        Message sms = _dc.newMessage(MessageConnection.TEXT_MESSAGE);   
                        TextMessage sms2 = (TextMessage)sms;   
                        sms2.setPayloadText(texto);   
                        sms2.setAddress("sms://"+tel);     
                        _dc.send(sms2);   
                        _dc.close();                               
                    } catch (InterruptedIOException ex) {     
                        retorno = ex.getMessage();   
                    } catch (IOException ex) {     
                        retorno = ex.getMessage();   
                    } catch (IllegalArgumentException ex) {     
                        retorno = ex.getMessage();   
                    } catch (SecurityException ex) {     
                        retorno = ex.getMessage();   
                    }   
                return retorno;   
        }   
           
        public void run()   
        {         
            enviaSms("55##@@@@@@@@","teste 1"));   
        }   
    }   
  
    private class Connect_2 extends Thread   
    {       
        public String enviaSms(String tel, String texto)   
        {   
                String retorno = "";   
                    try{   
                        MessageConnection _dc = (MessageConnection)Connector.open("sms://"+tel+":5001");                   
                        Message sms = _dc.newMessage(MessageConnection.TEXT_MESSAGE);   
                        TextMessage sms2 = (TextMessage)sms;   
                        sms2.setPayloadText(texto);   
                        sms2.setAddress("sms://"+tel);     
                        _dc.send(sms2);   
                        _dc.close();                               
                    } catch (InterruptedIOException ex) {     
                        retorno = ex.getMessage();   
                    } catch (IOException ex) {     
                        retorno = ex.getMessage();   
                    } catch (IllegalArgumentException ex) {     
                        retorno = ex.getMessage();   
                    } catch (SecurityException ex) {     
                        retorno = ex.getMessage();   
                    }   
                return retorno;   
        }   
           
        public void run()   
        {         
            enviaSms("55##@@@@@@@@","teste 2"));   
        }   
    }   
}
P

Acho que o problema se explica pelo fato de você ter que esperar o envio do 1o SMS ser concluído para se tentar o segundo.

Não pesquisei, mas sei que vc não pode mandar SMS para algumas portas que são reservadas. Daonde vc tirou a porta 5000 e 5001. Tem certeza que elas estão na faixa de portas possíveis de serem usadas em J2ME ? Pq se vc não verificou isto, tem grande chance de também a fonte da sua dor de cabeça ser isto.

Adaylon

Essas portas funcionam sim, se for enviado separadamente, vai sem problemas. O problema ta acontecendo por ser em Threads. O que preciso de ajuda é em entender pq a exceção é desconhecida pelo java.

Criado 12 de agosto de 2010
Ultima resposta 13 de ago. de 2010
Respostas 4
Participantes 2