Opa!
quero fazer um sistema parecido com o netsend do windows, na realidade já fiz!
só que quero fazer diferente!
fiz 2 programas
um client que fica na maquina do usuario e um outro que ativa o socket e envia para esse client a mensagem.
porem quero fazer diferente, quero fazer um servidor onde as mensagens ficam enfileiradas e quem dispara a mensagem é o servidor[ o programa novo ] e não o programa que ativa o socket [ o programa que já tenho ]
alguem poderia me ajudar? Inicialmente gostaria de dicas de o que devo fazer e depois como fazer!
para treinar um pouquinho o meu java
abraço
Vc poderia utilizar o padrão Command para tua situação, inclusive para enfileirar diferentes tipos de solicitação mas tratando-as de maneira uniforme!
Da uma googlada que vc acha algo!
[]'s
pesquisei neste link http://www.javafree.org/artigo/2348/Entendendo-a-classe-Command
e acho que não entendeu o que eu quero, como mostrar a mensagem eu sei!
o meu problema esta no servidor, como posso fazer para que o servidor envie a mensagem e não o meu programa swing antigo!
abraço
Bom, esse exemplo do uso do padrão Command convenhamos foge da realidade prática…
O padrão Command tem entre suas várias finalidades, implementar filas de requisições, independente da função do objeto, trabalhando com as mesmas polimórficamente…
Mas pelo visto vc está iniciando em Java, logo, deixe padrões de lado e se concentre na API mesmo…
Quanto a executar no servidor, a princípio não tem muito segredo, coloque uma aplicação pra rodar no servidor e faça as duas “conversar”, por exemplo, usando socket e serialização de objeto…
Procure sobre java.io, e veja se satisfaz suas necessidades…
E uma dica, se está iniciando em Java, procure um bom livro, do Deitel por exemplo, que irá cobrir vários pontos importantes da API…
[]'s
Estou iniciando em java mesmo! Estou usando o livro da certificação como base para API, não sei se é certo, mas esta ajudando em alguma coisa…
fiz isso aqui, que serve apenas para validar se o client esta ativo, e atualizar a base de dados dos ips onde os clients estão
veja só
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Iterator;
import java.util.List;
import br.com.smt.servidor.bean.HostBean;
import br.com.smt.servidor.dao.ServidorDAO;
public class ServidorThread extends Thread {
private Socket socket = null;
public void run () {
for ( ; ; ) {
try {
ServerSocket server = null;
server = new ServerSocket(58079);
socket = server.accept();
atualizaLista();
System.out.println("Servidor: " + new Date() );
Thread.sleep(99);
fila();
server.close();
continue;
} catch (InterruptedException e) {
// DO NOTHING
} catch (IOException e) {
// DO NOTHING
}
}
}
/**
* fila de mensagens
*/
private void fila() {
System.out.println("Fila de Mensagem");
}
/**
* atualiza de IPs no banco de dados
*/
public void atualizaLista() {
if ( socket != null ) {
String ip = socket.getInetAddress().toString().substring(1);
ServidorDAO dao = new ServidorDAO();
if ( dao.checaSeExisteIP(ip) == 0 ) {
dao.adicionaALista(ip);
} else {
dao.atualizaTempo(ip);
}
List<HostBean> lista = dao.checaExpiracaoIP();
Iterator<HostBean> iter = lista.iterator();
while ( iter.hasNext() ) {
HostBean host = iter.next();
Calendar dataBanco = new GregorianCalendar();
dataBanco.setTime(host.getData() );
Calendar dataMenos5Minutos = new GregorianCalendar();
dataMenos5Minutos.setTime(host.getDataAtual() );
dataMenos5Minutos.add(Calendar.MINUTE, -5);
dataMenos5Minutos.add(Calendar.HOUR_OF_DAY, 0);
dataBanco.add(Calendar.HOUR_OF_DAY, 0);
if ( dataBanco.getTimeInMillis() < dataMenos5Minutos.getTimeInMillis() ) {
dao.deleteAllIP(host.getCodigo());
}
}
}
}
}
com esse código o que me sugere?