Já vi que é preciso utilizar sockets e tudo mais… Só que infelizmente não sai do 0…
Gostaria de saber se alguém tem algum material, exemplo… algo do tipo, para que eu possa desenvolver, moldar… Para que a aplicação fique do Jeito que eu desejo…!
Então, o pessoal aqui do forum esta me ajudando, por exemplo, o Vinygodoy me passou o código fonte do chat simples TCP/IP , E eu estou mudando o código pra aprender;
vou jogar o código aqui pra voce com as minhas mudanças, ok ?
Agradeço de verdade a ajuda e atenção de vocês… eu consegui achar isso aqui:
Servidor:
package chat;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;
import java.util.Vector;
public class ServidorSocket extends Thread {
// Parte que controla as conexões por meio de threads.
private static Vector CLIENTES;
// socket deste cliente
private Socket conexao;
// nome deste cliente
private String nomeCliente;
// lista que armazena nome de CLIENTES
private static List LISTA_DE_NOMES = new ArrayList();
// construtor que recebe o socket deste cliente
public ServidorSocket(Socket socket) {
this.conexao = socket;
}
// testa se nomes são iguais, se for retorna true
public boolean armazena(String newName) {
// System.out.println(LISTA_DE_NOMES);
for (int i = 0; i < LISTA_DE_NOMES.size(); i++) {
if (LISTA_DE_NOMES.get(i).equals(newName))
return true;
}
// adiciona na lista apenas se não existir
LISTA_DE_NOMES.add(newName);
return false;
}
// remove da lista os CLIENTES que já deixaram o chat
public void remove(String oldName) {
for (int i = 0; i < LISTA_DE_NOMES.size(); i++) {
if (LISTA_DE_NOMES.get(i).equals(oldName))
LISTA_DE_NOMES.remove(oldName);
}
}
public static void main(String args[]) {
// instancia o vetor de CLIENTES conectados
CLIENTES = new Vector();
try {
// cria um socket que fica escutando a porta 5555.
ServerSocket server = new ServerSocket(1500);
System.out.println("ServidorSocket rodando na porta 5555");
// Loop principal.
while (true) {
// aguarda algum cliente se conectar.
// A execução do servidor fica bloqueada na chamada do método
// accept da
// classe ServerSocket até que algum cliente se conecte ao
// servidor.
// O próprio método desbloqueia e retorna com um objeto da
// classe Socket
Socket conexao = server.accept();
// cria uma nova thread para tratar essa conexão
Thread t = new ServidorSocket(conexao);
t.start();
// voltando ao loop, esperando mais alguém se conectar.
}
} catch (IOException e) {
// caso ocorra alguma excessão de E/S, mostre qual foi.
System.out.println("IOException: " + e);
}
}
// execução da thread
public void run() {
try {
// objetos que permitem controlar fluxo de comunicação que vem do
// cliente
BufferedReader entrada = new BufferedReader(new InputStreamReader(
this.conexao.getInputStream()));
PrintStream saida = new PrintStream(this.conexao.getOutputStream());
// recebe o nome do cliente
this.nomeCliente = entrada.readLine();
// chamada ao metodo que testa nomes iguais
if (armazena(this.nomeCliente)) {
saida.println("Este nome ja existe! Conecte novamente com outro Nome.");
CLIENTES.add(saida);
// fecha a conexao com este cliente
this.conexao.close();
return;
} else {
// mostra o nome do cliente conectado ao servidor
System.out.println(this.nomeCliente
+ " : Conectado ao Servidor!");
}
// igual a null encerra a execução
if (this.nomeCliente == null) {
return;
}
// adiciona os dados de saida do cliente no objeto CLIENTES
CLIENTES.add(saida);
// recebe a mensagem do cliente
String msg = entrada.readLine();
// Verificar se linha é null (conexão encerrada)
// Se não for nula, mostra a troca de mensagens entre os CLIENTES
while (msg != null && !(msg.trim().equals(""))) {
// reenvia a linha para todos os CLIENTES conectados
sendToAll(saida, " escreveu: ", msg);
// espera por uma nova linha.
msg = entrada.readLine();
}
// se cliente enviar linha em branco, mostra a saida no servidor
System.out.println(this.nomeCliente + " saiu do bate-papo!");
// se cliente enviar linha em branco, servidor envia mensagem de
// saida do chat aos CLIENTES conectados
sendToAll(saida, " saiu", " do bate-papo!");
// remove nome da lista
remove(this.nomeCliente);
// exclui atributos setados ao cliente
CLIENTES.remove(saida);
// fecha a conexao com este cliente
this.conexao.close();
} catch (IOException e) {
// Caso ocorra alguma excessão de E/S, mostre qual foi.
System.out.println("Falha na Conexao... .. ." + " IOException: "
+ e);
}
}
// enviar uma mensagem para todos, menos para o próprio
public void sendToAll(PrintStream saida, String acao, String msg)
throws IOException {
Enumeration e = CLIENTES.elements();
while (e.hasMoreElements()) {
// obtém o fluxo de saída de um dos CLIENTES
PrintStream chat = (PrintStream) e.nextElement();
// envia para todos, menos para o próprio usuário
if (chat != saida) {
chat.println(this.nomeCliente + acao + msg);
}
}
}
}
Cliente:
package chat;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.Socket;
public class ClienteSocket extends Thread {
// parte que controla a recepção de mensagens do cliente
private Socket conexao;
// construtor que recebe o socket do cliente
public ClienteSocket(Socket socket) {
this.conexao = socket;
}
public static void main(String args[]) {
try {
// Instancia do atributo conexao do tipo Socket, conecta a IP do
// Servidor, Porta
Socket socket = new Socket("127.0.0.1", 8010);
// Instancia do atributo saida, obtem os objetos que permitem
// controlar o fluxo de comunicação
PrintStream saida = new PrintStream(socket.getOutputStream());
BufferedReader teclado = new BufferedReader(new InputStreamReader(
System.in));
System.out.print("Digite seu nome: ");
String meuNome = teclado.readLine();
// envia o nome digitado para o servidor
saida.println(meuNome.toUpperCase());
// instancia a thread para ip e porta conectados e depois inicia ela
Thread thread = new ClienteSocket(socket);
thread.start();
// Cria a variavel msg responsavel por enviar a mensagem para o
// servidor
String msg;
while (true) {
// cria linha para digitação da mensagem e a armazena na
// variavel msg
System.out.print("Mensagem > ");
msg = teclado.readLine();
// envia a mensagem para o servidor
saida.println(msg);
}
} catch (IOException e) {
System.out.println("Falha na Conexao... .. ." + " IOException: "
+ e);
}
}
// execução da thread
public void run() {
try {
// recebe mensagens de outro cliente através do servidor
BufferedReader entrada = new BufferedReader(new InputStreamReader(
this.conexao.getInputStream()));
// cria variavel de mensagem
String msg;
while (true) {
// pega o que o servidor enviou
msg = entrada.readLine();
// se a mensagem contiver dados, passa pelo if, caso contrario
// cai no break e encerra a conexao
if (msg == null) {
System.out.println("Conexão encerrada!");
System.exit(0);
}
System.out.println();
// imprime a mensagem recebida
System.out.println(msg);
// cria uma linha visual para resposta
System.out.print("Responder > ");
}
} catch (IOException e) {
// caso ocorra alguma exceção de E/S, mostra qual foi.
System.out.println("Ocorreu uma Falha... .. ." + " IOException: "
+ e);
}
}
}
Ele funciona como um CHAT normal… só que eu gostaria de colocar pra funcionar na WEB… estou sem ideia. =/ ajuda ?
Ele funciona… eu consigo conversar normalmente… está funcionando com um server mesmo… vou tentar criar uma JSP aqui e no Servlet Chamando estes métodos das classes de Cliente… algo do tipo… para ver como funciona…^.~
Eu gostaria de integra-lo em uma página, utilizando Servlet + JSP… o Usuário digita seu nome, e conecta no CHAT e conversa com todos lá. Isso tudo em uma página JSP.
vai no seu modem libera uma porta e no seu cliente coloca seu ip e a porta que vc liberou…aconselho que vc use o no-ip assim vc não vai precisar alterar o ip do cliente a cada vez que vc ligar o modem.
[quote]Eu gostaria de integra-lo em uma página, utilizando Servlet + JSP… o Usuário digita seu nome, e conecta no CHAT e conversa com todos lá. Isso tudo em uma página JSP.
se vc só quer ter um chat na web…vc pode usar seu chat desktop msm basta configurar seu modem para isso e vc poderar usar seu chat de qualquer lugar. mas se vc realmente deseja fazer outro chat e unir os dois então vc vai ter que acessar sua servlet com o socket.
veja se isso ajuda: