Andei dando uma olha aqui no Forum e não achei nada parecido então resolvi criar este topico…
Estou criando um socket para fazer a conexão com um rastreador… esse socket sera um aplicativo Desk…(Swing) que ficara rodando 24x7 em um servidor, e fara a conexão com o rastreador… e recebera as informações que o mesmo(rastreador) me enviar.
a duvida é… em todos os exemplos que vi TODOS. sempre tem a classe (servidor) que é aque estou criando e a classe (client) essa eu não vou criar porque o rastreador sera meu cliente… ai está o :?: como ? como posso informar ao meu servidor que o client X enviou X informação…
sem criar uma classe Cliente…
um exemplo…
meu socket irá abrir uma conexão na porta (7777)
e ficara escutando para ver se tem algumm client para fazer a comunicação.
o rastreador(client) está configurado em um IP qualquer e porta 192.66.191.96 : 7777
mais para mim receber informações do cliente tenho que aceitar um cliente antes…Socket client = servidor.accept();
está variavel client tbm tera que ser instanciada na classe cliente Socket client = new Socket("192.66.191.96 ", 7777);
no meu caso não terei a classe cliente para informar ao servidor de Qual cliente ele deve receber infiormações como poderia fazer isto ? alguma ideia?
Deixa eu ver se entendi direito: o seu rastreador não tem a capacidade de se conectar via socket a um servidor? Então ele não pode agir como um cliente. O que o seu rastreador tem? Um endereço IP? Uma porta (socket) para enviar ao informações? Se for isto, então tem que fazer o contrário: o seu programa tem que conectar no rastreador. Ai ele passaria a ser um cliente do rastreador. Se for assim, o mais correto seria pensar que o seu programa é que vai coletar as informações no rastreador, e não o rastreador que envia a s informações para o seu programa. Teria que ser um esquema de polling.
O meu rastreador tem capacidade de se conectar com um socket… ele pode ser configurado posso informar qual IP e qual porta ele vai utilizar…
assim…
// LENDO INFORMAÇÕES QUE O CLIENTE NOS ENVIA
Scanner entrada = new Scanner(client.getInputStream()); // aqui é onde eu falo que vou pegar as informações do meu client. e imprimir em tela..
while (entrada.hasNextLine()) { //só que no lugar do meu client seria o rastreador
System.out.println(entrada.nextLine());
mais ou menos assim…
// LENDO INFORMAÇÕES QUE O CLIENTE NOS ENVIA
Scanner entrada = new Scanner(RASTREADOR.getInputStream()); // RASTREADOR.getInputStream()
while (entrada.hasNextLine()) {
System.out.println(entrada.nextLine());
ali na linha 02 tenho que colocar o RASTREADOR.getInputStream(); nos programas “convencionais” eu sei qual é meu cliente pq eu crio ele já na minha duvida eu não vou criar e sim receber um cliente qualquer porque não sei qual cliente é que está se conectando ao servidor. entendeu ? :roll:
Não estou entendendo nada. Está bem confuso para mim. Não programei com socket, mas pelo o que eu vi é só criar criar um socket no servidor e ficar “ouvindo” a porta:
BufferedReader entrada=null;
serv = new ServerSocket(7777);
s = serv.accept();
entrada = new BufferedReader(new InputStreamReader(s.getInputStream()));
System.out.println(entrada.readLine());
Configura o rastreador para conectar no IP do servidor na porta 7777. Não é isto?
Agora se o seu cenário é que você tem vários rastreadores e precisa saber qual rastreador se conectou, bem ai tem que ver se as informações que o rastreador envia não contém esta informação. Ou poderia pegar a informação do IP do rastreador e mapear por isto.
BufferedReader entrada=null;
serv = new ServerSocket(7777);
s = serv.accept();
entrada = new BufferedReader(new InputStreamReader(s.getInputStream()));
System.out.println(entrada.readLine());
porem para você receber as informações do seu cliente você fez isso:
entrada = new BufferedReader(new InputStreamReader(s.getInputStream())); //correto ?
e para você conseguir receber as informalções de (s) que é seu cliente…
você teve que criar uma classe cliente e fazer isso.
//Cria o socket com o recurso desejado na porta especificada
s = new Socket("127.0.0.1",7777);//correto ?
no meu caso eu não sei quem é meu cliente… porque o meu cliente é o rastreador e eu não sei qual a variavel ou objeto vou utilizar para fazer isso
s.getInputStream() // no lugar desse (s) tem que ser o meu rastreador como vou saber quem é o rastreador ?
Agora entendi a sua dúvida. A classe Cliente é para rodar na máquina cliente. No servidor não vai existir uma classe Cliente. Na máquina do servidor só precisa criar uma classe Servidor e ficar ouvindo a porta e “pegando” os dados enviados. O código que eu passei acima deveria ser suficiente.
Então… não seria muito suficiente não… porque o rastreador criaria um objeto com todas as informações e eu teria que ter um ponto em “comum” pra que os dois possam conversar. o rastreador é programado em C como faço pra ligar uma plicação java com C ? só com webServices.
Poderia implementar em CORBA, mas não sei se vai ser “over” demais para o seu caso. Tem que ver o quanto é complicado as mensagens trocadas e que tipo de tratamentos são necessários em casos de erros e se as mensagens são todas sincronas. Web Services dependendo do caso é “custoso” demais.
Pense nesse problema como um aplicativo de chat, como você identifica cada pessoa no chat? Não é pelo usuário? Quando o rastreador se conectar, ele precisa enviar um identificador, aí você atribui essa identificação ao IP para seu aplicativo gerenciar o que for necessário.