[Java] Własny czat

0

Cześć. Trochę programuję w Javie. Ukończyłem nawet kurs cisco, ale szczerze powiedziawszy nauczyłem się więcej teorii niż praktyki :/

Anyway jestem ciekawy jak zrobić własny czat w Javie.

Nie musi mieć wymyślnych przycisków, nie chcę żadnych kamerek.
Po prostu zwykły czat.

Ma ktoś jakieś informacje? Wczoraj próbowałem coś w google znaleźć, ale bez rezultatu.

0

Ogolne zasady tworzenia chata:

  1. serwer
  2. klient

Klient moze dzialac w Javie i obslugiwac polaczenie z serwerem, napisanym w czymkolwiek. Rownie dobrze chat w Javie moze obslugiwac polaczenie z IRCem. Java nie wystarczy wiec jako jedyny "budulec" chata.

Pozdro

0
romek napisał(a)

Ogolne zasady tworzenia chata:

  1. serwer
  2. klient

Klient moze dzialac w Javie i obslugiwac polaczenie z serwerem, napisanym w czymkolwiek. Rownie dobrze chat w Javie moze obslugiwac polaczenie z IRCem. Java nie wystarczy wiec jako jedyny "budulec" chata.

No to jasne, że serwer być musi. Serwer jest. Czy serwer musi spełniać jakieś określone warunki?

0

Jak to nie moze być. Serwer też może być napisany w JAVIE równie dobrze jak klient :P

0

przykład prostego czata znalazłem kiedyś w książce bieleckiego "Java XP"
bazuje on na RMI
a jakieś przykłady masz na:
http://4programmers.net/Forum/viewtopic.php?id=84616
któryś chyba był nawet opensource, ale nie pamiętam dokładnie...

0

Witamy, nie chciałyśmy zaczynać nowego tematu więc piszem tutaj. Chciałyśmy napisać czata w javie. Na razie mamy tylko 2 okienka - jedno jest klientem, drugie działa jako server...przynajmniej takie było założenie ;-) Problem pojawia sie w momencie wysyłania wiadomości, a mianowicie nie pokazuje sie ona w drugim oknie. Miałyśmy już zrobioną wersję z możliwością wysyłania i odbierania wiadomości (drugie okienko czekało na odbiór wiadomości z pierwszego, dopiero wówczas drugie mogło odpowiedzieć - a to nie o to przecież chodzi w czacie). Chciałybyśmy aby odbierać/wysyłać można było w każdym momencie.
Może od razu napiszemy, że jesteśmy początkujące w javie, więc prosimy się nie śmiać z głupot w kodzie ;-P Z góry dziękujemy za pomoc :)

Oto nasz kod:

Server:

import javax.swing.;
import java.awt.
;
import java.awt.event.;
import java.net.
;
import java.io.*;

public class Server_beta extends JFrame{

JTextArea ta = new JTextArea();
JTextField tf = new JTextField();
JScrollPane sp=new JScrollPane(ta);
JButton nasluchuj = new JButton("Nasłuchuj");

JPanel fp = new JPanel();
BufferedReader in1;
PrintStream out;

Klient_beta kb;

public Server_beta()
{
	super("Server");
	ta.setEditable(false);
	
	Container cp = getContentPane();
	
	cp.setLayout(new BorderLayout());
	
	cp.add(tf,"North");
	cp.add(sp,"Center");
	cp.add(fp,"South");
	
	fp.setLayout(new FlowLayout());
	fp.add(nasluchuj);
	
	
	nasluchuj.addActionListener(new ActionListener(){
		public void actionPerformed(ActionEvent e){

			
	try{
		ServerSocket server = new ServerSocket(777);
		Socket gniazdo = server.accept();
		in1 = new BufferedReader(new InputStreamReader(gniazdo.getInputStream()));
		out = new PrintStream(gniazdo.getOutputStream());
		nasluchuj.setEnabled(false);
		}
	catch(IOException ex){
			System.out.println(ex);
		}
			
		}});
		
		
	tf.addActionListener(new ActionListener(){
		public void actionPerformed(ActionEvent e){
		
	
			w = new Watek(ta, tf, out, kb);
			w.start();
		
		}});
	

	setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	setSize(300,300);
	setVisible(true);
	
	}
	
public void odbierz_server(){
	
	try{
			String s = in1.readLine();
			ta.append("Gustaw: "+s+" \n");				
		}
		catch(IOException ex){
			System.out.println(ex);
		}	
}


public static void main(String[] a)
	{
		Server_beta sb = new Server_beta();
	}
	

Watek w = new Watek(ta, tf, out, kb);

}

class Watek extends Thread{
JTextArea pole;
JTextField wpis;
PrintStream wyjscie;
Klient_beta klie;

Watek(JTextArea p, JTextField wpi,PrintStream ps, Klient_beta kkk){
pole=p;
wpis=wpi;
wyjscie=ps;
klie=kkk;
}
public void run(){
		
		String cos = wpis.getText();
		if(!cos.equals(""))
		{
		         	wyjscie.println(cos);
			pole.append("Konrad: "+cos+" \n");
			wpis.setText("");
		}
		klie.odbierz_klient();
}

}

Klient:

import javax.swing.;
import java.awt.
;
import java.awt.event.;
import java.net.
;
import java.io.*;

public class Klient_beta extends JFrame{

JTextArea ta = new JTextArea();
JTextField tf = new JTextField();
JScrollPane sp=new JScrollPane(ta);
JButton polacz = new JButton("Połącz");

JPanel fp = new JPanel();

BufferedReader in;
PrintStream out;

Server_beta sb;

public Klient_beta()
{
	super("Klient");
	ta.setEditable(false);
	
	Container cp = getContentPane();
	
	cp.setLayout(new BorderLayout());
	
	cp.add(tf,"North");
	cp.add(sp,"Center");
	cp.add(fp,"South");
	
	fp.setLayout(new FlowLayout());
	fp.add(polacz);
	
	
	polacz.addActionListener(new ActionListener(){
		public void actionPerformed(ActionEvent e){
		
		
	try{
		String host = "localhost";
		int port =777;
		Socket gniazdo = new Socket(host,port);
		in = new BufferedReader(new InputStreamReader(gniazdo.getInputStream()));
		out = new PrintStream(gniazdo.getOutputStream());
		polacz.setEnabled(false);
		}
	catch(IOException ex){
			System.out.println(ex);
		}
		
		}});
		
	tf.addActionListener(new ActionListener(){
		public void actionPerformed(ActionEvent e){

		
			w3 = new Watek3(ta, tf, out, sb);
			w3.start();
	}
	});
		
	setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	setSize(300,300);
	setVisible(true);
	
	}
	
	public void odbierz_klient(){
	
	try{
			String s = in.readLine();
			ta.append("Konrad: "+s+" \n");				
		}
		catch(IOException ex){
			System.out.println(ex);
		}	
    }
	
	public static void main(String[] a)
	{
		Klient_beta kb = new Klient_beta();
	}

Watek3 w3 = new Watek3(ta, tf, out, sb);
}

class Watek3 extends Thread{
JTextArea pole;
JTextField wpis;
PrintStream wyjscie;
Server_beta serv;

Watek3(JTextArea p, JTextField wpi,PrintStream ps, Server_beta sss){
pole=p;
wpis=wpi;
wyjscie=ps;
serv=sss;
}
public void run(){	
	String cos = wpis.getText();
	if(!cos.equals(""))
	{
		        wyjscie.println(cos);
		pole.append("Konrad: "+cos+" \n");
		wpis.setText("");
	}

		serv.odbierz_server();


}

}

0

juhas:
Jesli potrzebujesz gotowy kod czata możesz pobrać stąd http://rootnode.eu/~bookayashee/telnetchat.php
Jest wielowątkowy, działa po socketach, wejscie na login - synchronizacja logowania i wylogowywania, posiada także pare komend: statystyki urzytkowników, wiadomość prywatna, kick itp - sam zobaczysz. Nie posiada uprawnin tzn kto co może zrobić, co mogło być grożne jak wejdzie paru oszołomów, bo każdy ma kicka. Zabezpieczenie nie jest to trudne do osiagnięcia.
Kod jest specjalnie uszkodzony, jesli bedziesz chciał z niego korzystać daj znać na majla to pogadamy wtedy(nie chce pieniędzy, chce tylko mieć kontrole nad nim)

romek:
skąd pomysł ze java nie wystarczy? W javie można napisać wszystko jesli program nie wymaga dostepu do zasobów systemu. Wszystko co działa w trybie urzytkownika da rade napisac w javie

a_i_d:

Może od razu napiszemy, że jesteśmy początkujące w javie, więc prosimy się nie śmiać z głupot w kodzie ;-P

Tylko maluczcy smieja sie z innych by podnieść swoje małe ego :P
Co do kodu to nie ma prawa za bardzo działac, nie przeanalizowałem dokładnie kodu ale nie ma ciagłego nasłuchu servera, po kliknieciu na przycisk nasłuch włacza sie serversocket wykonuje jedno połaczenie po czym przestaje działac, w ten sposob trezba by bylo klikac na przycisk za kazdym razem jak przyjedzie połaczenie.
Server poza tym nie pamieta klientów, wiec jest to rozmowa serwer klient a nie rozmowa klientów porzez server. poza tym po co server ma byc graficzny, jest to zbyteczne.

Pozdrawiam BookaYashee

0

BookaYashee - dziękujemy za podpowiedź :)
zdajemy sobie sprawę z tego, że jest to na razie zwykła rozmowa klient-server, po prostu najpierw chcialyśmy uzyskac efekt przesyłania wiadomości a potem zająć sie komunikacją klienci-server.

0

Możesz zrobic nasłuch serwera w pętli while(true) :)

0
życzliwy napisał(a)

Możesz zrobic nasłuch serwera w pętli while(true) :)

i wątek do tego przy okazji

1 użytkowników online, w tym zalogowanych: 0, gości: 1