Galera,então é o seguinte,preciso criar um chat em java nada muito difícil,o problema é que o chat tem que ser criado com Sockets,nada de Rmi e para o chat ser multiusuário preciso também usar threads,mas estou tendo problemas em diferenciar os usuários,eu preciso criar uma lista de usuários, e preciso que o meu servidor os reconheça para poder mandar mensagens privadas,é ai onde estou patinando,como posso diferenciar os users e mandar mensagens privadas?Estou usando um PrinterWrite encadedo com BufferedReader e um socket,acho eu que não vou conseguir fazer usando PrinterWriter,mas então o que devo usar?Estou postando o código abaixo pra vcs darem uma olhada:
Server :import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.Iterator;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class server {
ArrayList mensagens;
boolean desligar = true;
int contar = 1;
JFrame tela;
JPanel painel;
JButton btnOff;
public void ui () {
tela = new JFrame();
painel = new JPanel();
btnOff = new JButton("Desligar");
btnOff.addActionListener(new btnListner());
painel.add(btnOff);
tela.add(painel);
tela.setSize(100,100);
tela.setVisible(true);
}
public class btnListner implements ActionListener {
@Override
public void actionPerformed(ActionEvent arg0) {
desligar = false;
}
}
public class suporte implements Runnable {
BufferedReader reader;
Socket sock;
public suporte (Socket clientSocket){
try{
sock = clientSocket;
InputStreamReader isReader = new InputStreamReader(sock.getInputStream());
reader= new BufferedReader(isReader);
}catch (Exception e) {
e.printStackTrace();
}
}
public void run() {
String mensagem;
try {
while((mensagem = reader.readLine())!=null){
System.out.println("read" + mensagem);
Iterator it = mensagens.iterator();
while(it.hasNext()){
try{
PrintWriter writer = (PrintWriter) it.next();
writer.println(" "+ mensagem );
writer.flush();
}catch (Exception e) {
e.printStackTrace();
}
}
}
}catch(Exception ex){
ex.printStackTrace();
}
}
}
public static void main(String args[]){
server s = new server();
s.ui();
s.go();
}
public void go (){
mensagens = new ArrayList();
try {
ServerSocket serverSocket= new ServerSocket(5074);
while(desligar==true){
Socket clienteSocket = serverSocket.accept();
PrintWriter writer = new PrintWriter(clienteSocket.getOutputStream());
mensagens.add(clienteSocket.getInetAddress());
mensagens.add(writer);
Thread t = new Thread(new suporte(clienteSocket));
t.start();
System.out.println("Conectado");
}
System.out.println("Sever Desligado");
}catch (Exception e) {
e.printStackTrace();
}
}
}
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.ScrollPaneConstants;
public class chatCliente {
JTextArea incoming;
JTextField outcoming;
JTextField Jtnome;
JLabel Jlnome;
BufferedReader reader;
PrintWriter writer;
Socket sock;
public static void main (String args[]){
chatCliente c = new chatCliente();
c.go();
}
public void go (){
JFrame frame = new JFrame("BatChat - WayneProductions");
JPanel mainpPanel = new JPanel();
incoming = new JTextArea(15,50);
incoming.setLineWrap(true);
incoming.setWrapStyleWord(true);
incoming.setEditable(false);
JScrollPane qrScroller = new JScrollPane(incoming);
qrScroller.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
qrScroller.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
outcoming = new JTextField(20);
Jtnome = new JTextField(10);
Jlnome = new JLabel("Nome: ");
JButton sendButton = new JButton("Enviar");
sendButton.addActionListener(new SendButtonListner());
mainpPanel.add(qrScroller);
mainpPanel.add(Jlnome);
mainpPanel.add(Jtnome);
mainpPanel.add(outcoming);
mainpPanel.add(sendButton);
setUpNetworking();
Thread readerThread = new Thread(new IncomingReader());
readerThread.start();
frame.getContentPane().add(BorderLayout.CENTER,mainpPanel);
frame.setSize(600,600);
frame.setVisible(true);
}
private void setUpNetworking (){
try{
sock = new Socket("127.0.0.1",5074);
InputStreamReader streamReader = new InputStreamReader(sock.getInputStream());
reader = new BufferedReader(streamReader);
writer = new PrintWriter(sock.getOutputStream());
System.out.print("conectado");
System.out.println(sock.getLocalAddress());
}catch (Exception e) {
e.printStackTrace();
}
}
public class SendButtonListner implements ActionListener {
public void actionPerformed(ActionEvent e) {
try {
writer.print(Jtnome.getText()+": ");
writer.println(outcoming.getText());
writer.flush();
}catch(Exception ex){
ex.printStackTrace();
}
outcoming.setText("");
outcoming.requestFocus();
}
}
public class IncomingReader implements Runnable {
public void run () {
String mensagem;
try {
while((mensagem = reader.readLine())!=null){
System.out.println("read"+mensagem);
incoming.append(mensagem+"\n");
}
}catch(Exception ex){
ex.printStackTrace();
}
}
}
}