Witam
mam na studiach jave nie moge sobie z nią poradzić. Mam Chat ale nie wiem jak dopisać aby chat był z emonitonkami i aby była możliwość komunikacji z innymmi użytkownikami na priv.
Serwer
import java.io.*;
import java.net.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
public class SerwerGUI extends JFrame{
//GUI
private JButton uruchom, zatrzymaj;
private JPanel panel;
private JTextField port;
private JTextArea komunikaty;
//Serwer
private int numerPortu = 2345;
private boolean uruchomiony = false;
private Vector<Polaczenie> klienci = new Vector<Polaczenie>();
public SerwerGUI() {
super("Serwer");
setSize(350,300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new BorderLayout());
panel = new JPanel(new FlowLayout());
komunikaty = new JTextArea();
komunikaty.setLineWrap(true);
komunikaty.setEditable(false);
port = new JTextField((new Integer(numerPortu)).toString() ,8);
uruchom = new JButton("Uruchom");
zatrzymaj = new JButton("Zatrzymaj");
zatrzymaj.setEnabled(false);
ObslugaZdarzen obsluga = new ObslugaZdarzen();
uruchom.addActionListener(obsluga);
zatrzymaj.addActionListener(obsluga);
panel.add(new JLabel("Port: "));
panel.add(port);
panel.add(uruchom);
panel.add(zatrzymaj);
add(panel, BorderLayout.NORTH);
add(new JScrollPane(komunikaty), BorderLayout.CENTER);
setVisible(true);
}
private class ObslugaZdarzen implements ActionListener {
private Serwer srw;
public void actionPerformed(ActionEvent e) {
if (e.getActionCommand().equals("Uruchom")) {
srw = new Serwer();
srw.start();
uruchomiony = true;
uruchom.setEnabled(false);
zatrzymaj.setEnabled(true);
port.setEnabled(false);
repaint();
}
if (e.getActionCommand().equals("Zatrzymaj")){
srw.kill();
uruchomiony = false;
zatrzymaj.setEnabled(false);
uruchom.setEnabled(true);
port.setEnabled(true);
repaint();
}
}
}
private class Serwer extends Thread implements CzatProtokol{
private ServerSocket server;
public void kill(){
try {
server.close();
for(Polaczenie klient: klienci){
try {
klient.wyjscie.println(LOGOUT_COMMAND + "Serwer przesta� dzia�a�!");
klient.socket.close();
}
catch (IOException e) {
}
}
wyswietlKomunikat("Wszystkie Po��czenia zosta�y zako�czone.\n");
}
catch (IOException e) {
}
}
public void run(){
try {
server = new ServerSocket(new Integer(port.getText()));
wyswietlKomunikat("Serwer uruchomiony na porcie: " + port.getText() + "\n");
while (uruchomiony) {
Socket socket = server.accept();
wyswietlKomunikat("Nowe po��czenie.\n");
new Polaczenie(socket).start();
}
}
catch (SocketException e){
}
catch (Exception e){
wyswietlKomunikat(e.toString());
}
finally {
try {
if(server != null) server.close();
}
catch (IOException e){
wyswietlKomunikat(e.toString());
}
}
wyswietlKomunikat("Serwer zatrzymany.\n");
}
}
private class Polaczenie extends Thread implements CzatProtokol{
private BufferedReader wejscie;
private PrintWriter wyjscie;
private Socket socket;
private String nick;
private boolean polaczony;
public Polaczenie (Socket w) {
socket = w;
polaczony = true;
synchronized(klienci) {
klienci.add(this);
}
}
public void run() {
try {
wejscie = new BufferedReader(new InputStreamReader(socket.getInputStream()));
wyjscie = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()), true);
while (uruchomiony && polaczony){
String lancuch = wejscie.readLine();
if (lancuch.startsWith(POST_COMMAND)) {
for(Polaczenie klient: klienci)
klient.wyjscie.println(POST_COMMAND + "<" + nick + "> " + lancuch.substring(POST_COMMAND.length()));
}
if (lancuch.startsWith(NICK_COMMAND)){
//sprawdzenie poprawno�ci nicka
nick = lancuch.substring(NICK_COMMAND.length()).trim();
if(nick.equals("null") || nick.trim().equals("")){
wyjscie.println(LOGIN_COMMAND + "Podaj poprawny nick!");
continue;
}
boolean prawidlowy = true;
for(Polaczenie klient: klienci){
if(klient.equals(this) && klient!=this) prawidlowy = false;
}
if(!prawidlowy) {
wyjscie.println(LOGIN_COMMAND + "Taki nick ju� jest na czacie! Podaj inny.");
continue;
}
StringBuilder lista = new StringBuilder();
for(Polaczenie klient: klienci){
lista.append(klient.nick + ",");
klient.wyjscie.println(POST_COMMAND + "U�ytkownik " + nick + " do��czy� do czatu");
}
for(Polaczenie klient: klienci){
klient.wyjscie.println(NICKLIST_COMMAND + lista.toString());
}
}
if(lancuch.startsWith(LOGIN_COMMAND)){
wyjscie.println(LOGIN_COMMAND + "Witaj na serwerze!\n");
}
if(lancuch.startsWith(LOGOUT_COMMAND)){
wyjscie.println(LOGOUT_COMMAND + "�egnaj.\n");
synchronized(klienci) {
klienci.remove(this);
}
StringBuilder lista = new StringBuilder();
for(Polaczenie klient: klienci){
lista.append(klient.nick + ",");
klient.wyjscie.println(POST_COMMAND + "U�ytkownik " + nick + " opu�ci� czat.");
}
for(Polaczenie klient: klienci){
klient.wyjscie.println(NICKLIST_COMMAND + lista.toString());
}
polaczony = false;
}
}
wyswietlKomunikat("Po��czenie zosta�o zako�czone.\n");
}
catch (Exception e) {
System.out.println(e);
}
finally {
try {
wejscie.close();
wyjscie.close();
socket.close();
}
catch(IOException e) {
}
}
}
public boolean equals(Polaczenie p){
return (p.nick.equals(nick));
}
}
private void wyswietlKomunikat(String tekst){
komunikaty.append(tekst);
komunikaty.setCaretPosition(komunikaty.getDocument().getLength());
}
public static void main(String[] args ) {
new SerwerGUI();
}
}
Klient
import java.io.*;
import java.net.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
public class KlientGUI extends JFrame{
//GUI
private JButton polacz, rozlacz;
private JPanel panel;
private JTextField host, port, wiadomosc;
private JTextArea komunikaty;
private JList zalogowani;
private DefaultListModel listaZalogowanych;
//Klient
private String nazwaSerwera = "localhost";
private int numerPortu = 2345;
private boolean polaczony = false;
private Klient watekKlienta;
public KlientGUI(){
super("Klient");
setSize(600,500);
//setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
setLayout(new BorderLayout());
panel = new JPanel(new FlowLayout());
komunikaty = new JTextArea();
komunikaty.setLineWrap(true);
komunikaty.setEditable(false);
wiadomosc = new JTextField();
host = new JTextField(nazwaSerwera ,12);
port = new JTextField((new Integer(numerPortu)).toString() ,8);
polacz = new JButton("Po��cz");
rozlacz = new JButton("Roz��cz");
rozlacz.setEnabled(false);
listaZalogowanych = new DefaultListModel();
zalogowani = new JList(listaZalogowanych);
zalogowani.setFixedCellWidth(120);
ObslugaZdarzen obsluga = new ObslugaZdarzen();
polacz.addActionListener(obsluga);
rozlacz.addActionListener(obsluga);
wiadomosc.addKeyListener(obsluga);
addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){rozlacz.doClick();setVisible(false);System.exit(0);}});
panel.add(new JLabel("Serwer: "));
panel.add(host);
panel.add(new JLabel("Port: "));
panel.add(port);
panel.add(polacz);
panel.add(rozlacz);
add(panel, BorderLayout.NORTH);
add(new JScrollPane(komunikaty), BorderLayout.CENTER);
add(new JScrollPane(zalogowani), BorderLayout.EAST);
add(wiadomosc, BorderLayout.SOUTH);
setVisible(true);
}
private class ObslugaZdarzen extends KeyAdapter implements ActionListener, CzatProtokol {
public void actionPerformed(ActionEvent e) {
if (e.getActionCommand().equals("Po��cz")) {
wyswietlKomunikat("��cz� z: " + nazwaSerwera + " na porcie: " + numerPortu + "...");
polaczony = true;
polacz.setEnabled(false);
rozlacz.setEnabled(true);
host.setEnabled(false);
port.setEnabled(false);
watekKlienta = new Klient();
watekKlienta.start();
//repaint();
}
if (e.getActionCommand().equals("Roz��cz")){
watekKlienta.wyslij("",LOGOUT_COMMAND);
polaczony = false;
rozlacz.setEnabled(false);
polacz.setEnabled(true);
host.setEnabled(true);
port.setEnabled(true);
//repaint();
}
}
public void keyReleased(KeyEvent e){
if(e.getKeyCode() == 10) {
watekKlienta.wyslij(wiadomosc.getText(), POST_COMMAND);
}
}
}
private class Klient extends Thread implements CzatProtokol{
private Socket socket;
private BufferedReader wejscie;
private PrintWriter wyjscie;
public void run(){
try {
socket = new Socket(host.getText(), new Integer(port.getText()));
wyswietlKomunikat("Po��czono.");
wejscie = new BufferedReader(new InputStreamReader(socket.getInputStream()));
wyjscie = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()), true);
wyslij("",LOGIN_COMMAND);
String lancuch = null;
while(polaczony){
lancuch = wejscie.readLine();
if(lancuch.startsWith(POST_COMMAND)){
wyswietlKomunikat(lancuch.substring(POST_COMMAND.length()));
}
if(lancuch.startsWith(LOGIN_COMMAND)){
wyswietlKomunikat(lancuch.substring(LOGIN_COMMAND.length()));
String nick = JOptionPane.showInputDialog(null, "Podaj nick: ");
wyslij(nick, NICK_COMMAND);
}
if(lancuch.startsWith(NICKLIST_COMMAND)){
//Aktualizacja listy
StringTokenizer uzytkownicy = new StringTokenizer(lancuch.substring(NICKLIST_COMMAND.length()),",");
listaZalogowanych.clear();
while(uzytkownicy.hasMoreTokens())
listaZalogowanych.addElement(uzytkownicy.nextToken());
}
if(lancuch.startsWith(LOGOUT_COMMAND)){
wyswietlKomunikat(lancuch.substring(LOGOUT_COMMAND.length()));
listaZalogowanych.clear();
polaczony = false;
rozlacz.setEnabled(false);
polacz.setEnabled(true);
host.setEnabled(true);
port.setEnabled(true);
}
}
}
catch (UnknownHostException e) {
wyswietlKomunikat("B��d po��czenia!");
}
catch (IOException e) {
wyswietlKomunikat(e.toString());
}
finally {
try {
wejscie.close();
wyjscie.close();
socket.close();
}
catch(IOException e) {
}
}
}
public void wyslij(String tekst, String protokol) {
wyjscie.println(protokol + tekst);
wiadomosc.setText("");
}
}
private void wyswietlKomunikat(String tekst){
komunikaty.append(tekst + "\n");
komunikaty.setCaretPosition(komunikaty.getDocument().getLength());
}
public static void main (String[] args) {
new KlientGUI();
}
}