Pergunta

Em Java, qual seria a melhor maneira de ter uma porta de escuta constante aberta e ainda enviar após o recebimento de um pacote.Não sou muito experiente em programação de rede no momento, então os tutoriais que encontrei na rede não são particularmente úteis.

Faria sentido ter o soquete de escuta como um serverocket e executá-lo em um thread separado para o soquete que estou usando para enviar dados ao servidor?

Em uma pergunta vagamente relacionada.Alguém sabe se programar simplesmente para java, no netbeans e depois exportá-lo para uso em um blackberry (usando um plugin) os soquetes ainda funcionariam?

Foi útil?

Solução

Se você puder pagar pelo threading, tente isso (lembre-se de que deixei de fora alguns detalhes, como tratamento de exceções e bom comportamento com threads).Você pode querer investigar SocketChannels e/ou soquetes/seletores assíncronos NIO.Isso deve começar.

boolean finished = false;
int port = 10000;
ServerSocket server = new ServerSocket(port);

while (!finished) {
    // This will block until a connection is made
    Socket s = server.accept();
    // Spawn off some thread (or use a thread pool) to handle this socket
    // Server will continue to listen
}

Outras dicas

Quanto à conexão com um Blackberry, isso é problemático, pois na maioria dos casos o Blackberry não terá um endereço IP público e, em vez disso, estará atrás de um gateway WAP ou de um servidor de ponto de acesso de provedor sem fio.A RIM fornece o Mobile Data Server (MDS) para contornar isso e fornecer dados "Push" que usam a semântica ServerSocket no Blackberry.O MDS está disponível com o Blackberry Enterprise Server (BES) e o Unite Server.

Uma vez configurados, os dados podem ser enviados para uma unidade específica através do MDS usando o protocolo HTTP.Há uma excelente descrição do protocolo Push aqui com código-fonte LAMP.O parâmetro PORT=7874 em pushout.pl conecta-se ao soquete do servidor Blackberry Browser Push.Ao alterar esse parâmetro, a carga pode ser enviada para uma porta arbitrária onde seu próprio ServerSocket está aceitando conexões.

Se o seu código de soquete precisar ser executado em um BlackBerry, você não poderá usar soquetes Java padrão.Você deve usar a API J2ME Connector.open para criar ambos os tipos de soquetes (aqueles que iniciam conexões do BlackBerry e aqueles que escutam conexões/pushs no BlackBerry).Dê uma olhada nos exemplos que acompanham o JDE da RIM.

Eu precisaria voltar ao básico para este também.Eu recomendaria o excelente de O'Reilly Java em poucas palavras que inclui exemplos de código para esse caso (disponível on-line também).Consulte o Capítulo 7 para obter uma boa visão geral das decisões que você gostaria de tomar desde o início.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top