package untitled19;
import java.awt.BorderLayout;
import java.awt.Dimension;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import java.awt.*;
import javax.swing.JButton;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.*;
import java.net.*;
public class Frame1 extends JFrame {
JPanel contentPane;
JTextField jTextField1 = new JTextField();
JButton wyslij = new JButton();
prostyChat klient = new prostyChat();
public Frame1() {
try {
setDefaultCloseOperation(EXIT_ON_CLOSE);
jbInit();
} catch (Exception exception) {
exception.printStackTrace();
}
}
private void jbInit() throws Exception {
contentPane = (JPanel) getContentPane();
contentPane.setLayout(null);
setSize(new Dimension(400, 300));
setTitle("Frame Title");
jTextField1.setText("");
jTextField1.setBounds(new Rectangle(23, 53, 201, 21));
jTextField1.addActionListener(new
Frame1_jTextField1_actionAdapter(this));
wyslij.setBounds(new Rectangle(238, 50, 73, 25));
wyslij.setText("Wyślij");
wyslij.addActionListener(new Frame1_jButton1_actionAdapter(this));
jTextField1.addActionListener(new
Frame1_jTextField1_actionAdapter(this));
contentPane.add(jTextField1);
contentPane.add(wyslij);
}
public void wyslij_actionPerformed(ActionEvent e) {
klient.doDziela();
}
class Frame1_jButton1_actionAdapter implements ActionListener {
private Frame1 adaptee;
Frame1_jButton1_actionAdapter(Frame1 adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.wyslij_actionPerformed(e);
}
}
class Frame1_jTextField1_actionAdapter implements ActionListener {
private Frame1 adaptee;
Frame1_jTextField1_actionAdapter(Frame1 adaptee) {
this.adaptee = adaptee; }
public void actionPerformed(ActionEvent e) {
}
}
class prostyChat{
void doDziela() {
try {
Socket s = new Socket("127.0.0.1",4242);
PrintWriter pisarz = new PrintWriter(s.getOutputStream());
pisarz.println("tutaj klient");
pisarz.close();
} catch (IOException ex) {
ex.printStackTrace();}
}
}
}
oto błędy :(
"C:\Program Files\jbuilder\jdk1.4\bin\javaw" -classpath "C:\Documents and
Settings\Rafał\jbproject\untitled19\classes;C:\Program
Files\jbuilder\jdk1.4\jre\lib\im\indicim.jar;C:\Program
Files\jbuilder\jdk1.4\jre\lib\im\thaiim.jar;C:\Program
Files\jbuilder\jdk1.4\jre\lib\ext\dnsns.jar;C:\Program
Files\jbuilder\jdk1.4\jre\lib\ext\sunjce_provider.jar;C:\Program
Files\jbuilder\jdk1.4\jre\lib\ext\ldapsec.jar;C:\Program
Files\jbuilder\jdk1.4\jre\lib\ext\localedata.jar;C:\Program
Files\jbuilder\jdk1.4\jre\lib\jsse.jar;C:\Program
Files\jbuilder\jdk1.4\jre\lib\plugin.jar;C:\Program
Files\jbuilder\jdk1.4\jre\lib\sunrsasign.jar;C:\Program
Files\jbuilder\jdk1.4\jre\lib\charsets.jar;C:\Program
Files\jbuilder\jdk1.4\jre\lib\rt.jar;C:\Program
Files\jbuilder\jdk1.4\jre\lib\jce.jar;C:\Program
Files\jbuilder\jdk1.4\jre\javaws\javaws.jar;C:\Program
Files\jbuilder\jdk1.4\lib\tools.jar;C:\Program
Files\jbuilder\jdk1.4\lib\dt.jar;C:\Program
Files\jbuilder\jdk1.4\lib\htmlconverter.jar" untitled19.Application1
java.net.ConnectException: Connection refused: connect
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:305)
at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:171)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:158)
at java.net.Socket.connect(Socket.java:452)
at java.net.Socket.connect(Socket.java:402)
at java.net.Socket.<init>(Socket.java:309)
at java.net.Socket.<init>(Socket.java:124)
at untitled19.Frame1$prostyChat.doDziela(Frame1.java:74)
at untitled19.Frame1.wyslij_actionPerformed(Frame1.java:46)
at
untitled19.Frame1$Frame1_jButton1_actionAdapter.actionPerformed(Frame1.java:57)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1786)
at
javax.swing.AbstractButton$ForwardActionEvents.actionPerformed(AbstractButton.java:1839)
at
javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:420)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:258)
at
javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:245)
at java.awt.Component.processMouseEvent(Component.java:5100)
at java.awt.Component.processEvent(Component.java:4897)
at java.awt.Container.processEvent(Container.java:1569)
at java.awt.Component.dispatchEventImpl(Component.java:3615)
at java.awt.Container.dispatchEventImpl(Container.java:1627)
at java.awt.Component.dispatchEvent(Component.java:3477)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:3483)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3198)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3128)
at java.awt.Container.dispatchEventImpl(Container.java:1613)
at java.awt.Window.dispatchEventImpl(Window.java:1606)
at java.awt.Component.dispatchEvent(Component.java:3477)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:456)
at
java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:201)
at
java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:151)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:145)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:137)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:100)
Witaj,
Jeśli dobrze odczytuję błąd to rozwiązanie sprowadza się do
uruchomienia serwera na localhost:4242. Zadaj sobie pytanie, kto ma
obsłużyć Twoje połączenie? Jeśli nikt nie nasłuchuje na porcie
4242 to komunikat będzie zawsze ten sam: Connection refused: connect.
Jacek
No pisze ze polaczenie odrzucone, a co nasluchuje na serwerze ??
--
Archiwum grupy: http://niusy.onet.pl/pl.comp.lang.java
tu jest serwer.............
package untitled18;
import java.awt.BorderLayout;
import java.awt.Dimension;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import java.awt.*;
import javax.swing.JButton;
import java.io.*;
import java.net.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Frame1 extends JFrame {
JPanel contentPane;
JButton jButton1 = new JButton();
JTextField pole = new JTextField();
public Frame1() {
try {
setDefaultCloseOperation(EXIT_ON_CLOSE);
jbInit();
} catch (Exception exception) {
exception.printStackTrace();
}
}
private void jbInit() throws Exception {
contentPane = (JPanel) getContentPane();
contentPane.setLayout(null);
setSize(new Dimension(400, 300));
setTitle("Frame Title");
jButton1.setBounds(new Rectangle(153, 88, 73, 25));
jButton1.setText("jButton1");
jButton1.addActionListener(new Frame1_jButton1_actionAdapter(this));
pole.setText("jTextField1");
pole.setBounds(new Rectangle(60, 25, 267, 21));
jButton1.addActionListener(new Frame1_jButton1_actionAdapter(this));
contentPane.add(jButton1);
contentPane.add(pole);
}
public void jButton1_actionPerformed(ActionEvent e) {
Chat klient = new Chat();
klient.doDziela();
}
}
class Frame1_jButton1_actionAdapter implements ActionListener {
private Frame1 adaptee;
Frame1_jButton1_actionAdapter(Frame1 adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.jButton1_actionPerformed(e);
}
}
class Chat {
String doDziela(){
String porada = null;
try {
ServerSocket gniazdoSrw = new ServerSocket(4242);
while (true) {
Socket gniazdo = gniazdoSrw.accept();
InputStreamReader strUser = new
InputStreamReader(gniazdo.
getInputStream());
BufferedReader user = new BufferedReader(strUser);
porada = user.readLine();
}
} catch(IOException ex) { ex.printStackTrace(); }
return porada; }
}
> [cut]
Wycinaj zbędne cytaty, bo ciężko się to czyta.
W kwestii problemu - czy serwer jest już odpalony gdy próbujesz łączyć się
klientem? A możesz się tam podłączyć telnetem? Jeśli nie, to może masz
jakiegoś zaborczego firewalla?
--
Zbigniew Malec Ustronie:104 gg:2756100
public class Frame1 extends JFrame {
JPanel contentPane;
JButton jButton1 = new JButton();
JTextField pole = new JTextField();
public Frame1() {
try {
setDefaultCloseOperation(EXIT_ON_CLOSE);
jbInit();
} catch (Exception exception) {
exception.printStackTrace();
}
}
TUTAJ SA ZADEKLAROWANE POSZCZEGOLNE ELEMENTY
private void jbInit() throws Exception {
contentPane = (JPanel) getContentPane();
contentPane.setLayout(null);
setSize(new Dimension(400, 300));
setTitle("Frame Title");
jButton1.setBounds(new Rectangle(153, 88, 73, 25));
jButton1.setText("jButton1");
jButton1.addActionListener(new Frame1_jButton1_actionAdapter(this));
pole.setText("jTextField1");
pole.setBounds(new Rectangle(60, 25, 267, 21));
jButton1.addActionListener(new Frame1_jButton1_actionAdapter(this));
contentPane.add(jButton1);
contentPane.add(pole);
}
TUTAJ URUCHAMIAM SERWER PO KLIKNIĘCIU PRZYCISKU
public void jButton1_actionPerformed(ActionEvent e) {
Chat klient = new Chat();
klient.doDziela();
}
}
class Frame1_jButton1_actionAdapter implements ActionListener {
private Frame1 adaptee;
Frame1_jButton1_actionAdapter(Frame1 adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.jButton1_actionPerformed(e);
}
}
]
OBSLUGA SIECI
class Chat {
String doDziela(){
String porada = null;
try {
ServerSocket gniazdoSrw = new ServerSocket(4242);
while (true) {
Socket gniazdo = gniazdoSrw.accept();
InputStreamReader strUser = new
InputStreamReader(gniazdo.
getInputStream());
BufferedReader user = new BufferedReader(strUser);
porada = user.readLine();
I tutaj jest cały problem :(, jest tutaj pętla while, na 'formularzu' mam
pole tekstowe i chcialbym zeby wszystkie informacje ktore odbiera serwer
byly umieszczane w tym polu, pole 'pole.setText("jTextField1");' zostało
zadeklarowane tam wyzej, no i jak teraz mam się dostac do tego pola ?
jeszcze to jest z try (ktore na razie nei wiem po co jest bo pisalo ksiazce
ze o tym bedzie dalej :) ). Prosze o pomoc
i dziekuje za okazaną już............Rafał
> I tutaj jest cały problem :(, jest tutaj pętla while, na 'formularzu' mam
> pole tekstowe i chcialbym zeby wszystkie informacje ktore odbiera serwer
> byly umieszczane w tym polu, pole 'pole.setText("jTextField1");' zostało
> zadeklarowane tam wyzej, no i jak teraz mam się dostac do tego pola ?
> jeszcze to jest z try (ktore na razie nei wiem po co jest bo pisalo ksiazce
> ze o tym bedzie dalej :) ). Prosze o pomoc
> i dziekuje za okazaną już............Rafał
>
>
> }
> } catch(IOException ex) { ex.printStackTrace(); }
> return porada; }
> }
Najwazniejsze to uruchomic kleinta i serwer w watkach ;) ..
poniewaz uzywasz Jbulder'a to podpowiem ze pod klawiszem CTRL+SPACE masz
podpowiedzi ;) .. program ci podpowie jakie masz dostepne metody do
obiektu pole ;)
No i proponuje najpierw przeczytac ksiazke do konca ;), bedzie wszystko
wyjasnione ..a ksiazka to nie czasem "JAVA: Cwiczenia zaawansowane" ???
Nie książka to "Poznaj język Java Head First Java" tylko bawie się pod
JBuilderem nią. I troszke tu i tam musze pozmieniać:)
Co do wątków to naucze się ich jak opanuje to o co pytałem wyżej.
Fajnie że odpisałeś, ale dalej nie wiem jak się dostać do tego pola "pole".
:((
i tutaj stoje w miejscu, w mojej dalszej nauce :((((
Rafał
ps. musze najpierw 1 rzecz skończysz a nie wszystko zaczynać po trochu nie
lubie tak :)
...
Przekaż po prostu pole referencję JTextField do klasy Chat:
class Chat {
String doDziela(JTextField pole) {
String porada = null;
ServerSocket gniazdoSrw = null;
try {
gniazdoSrw = new ServerSocket(4242);
while (true){
Socket gniazdo = gniazdoSrw.accept();
InputStreamReader strUser = new
InputStreamReader(gniazdo.
getInputStream());
BufferedReader user = new BufferedReader(strUser);
if (user.ready()) {
porada = user.readLine();
pole.setText(porada);
pole.paint(pole.getGraphics());
}
user.close();
gniazdo.close();
}
} catch (IOException ex) {
ex.printStackTrace();
}
return porada;
}
}
oki przekazałem jako referencje i chodzi :)
jest tylko kolejny problem dlaczego ten moj mini serwerek się wiesza i jak
go uruchomie to nie można go nawet zamknąć :(((
oto kod:
package untitled18;
import java.awt.BorderLayout;
import java.awt.Dimension;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import java.awt.*;
import javax.swing.JButton;
import java.io.*;
import java.net.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Frame1 extends JFrame {
JPanel contentPane;
JButton jButton1 = new JButton();
JTextField pole = new JTextField();
public Frame1() {
try {
setDefaultCloseOperation(EXIT_ON_CLOSE);
jbInit();
} catch (Exception exception) {
exception.printStackTrace();
}
}
private void jbInit() throws Exception {
contentPane = (JPanel) getContentPane();
contentPane.setLayout(null);
setSize(new Dimension(400, 300));
setTitle("Frame Title");
jButton1.setBounds(new Rectangle(153, 88, 73, 25));
jButton1.setText("jButton1");
jButton1.addActionListener(new Frame1_jButton1_actionAdapter(this));
pole.setText("jTextField1");
pole.setBounds(new Rectangle(60, 25, 267, 21));
jButton1.addActionListener(new Frame1_jButton1_actionAdapter(this));
contentPane.add(jButton1);
contentPane.add(pole);
}
public void jButton1_actionPerformed(ActionEvent e) {
Chat klient = new Chat();
klient.doDziela(pole);
}
}
class Frame1_jButton1_actionAdapter implements ActionListener {
private Frame1 adaptee;
Frame1_jButton1_actionAdapter(Frame1 adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.jButton1_actionPerformed(e);
}
}
class Chat {
String doDziela(JTextField xxx){
String porada = null;
ServerSocket gniazdoSrw = null;
xxx.setText("porada");
try {
gniazdoSrw = new ServerSocket(4242);
while (true) {
Socket gniazdo = gniazdoSrw.accept();
InputStreamReader strUser = new
InputStreamReader(gniazdo.
getInputStream());
BufferedReader user = new BufferedReader(strUser);
if (user.ready()){
porada = user.readLine();
xxx.setText("porada");
}
user.close();
gniazdo.close();
while (true) {
Socket gniazdo = gniazdoSrw.accept();
InputStreamReader strUser = new
InputStreamReader(gniazdo.
getInputStream());
BufferedReader user = new
BufferedReader(strUser);
if (user.ready()){
porada = user.readLine();
xxx.setText("porada");
}
user.close();
gniazdo.close();
}
Póki ta petla jest wykonywana, to program oczekuje na polaczenie. A
jak polaczenia nie ma to wyglada jakby program sie zawiesil.
Spróbowalbym zastosowac watki czy cos takiego
> oki przekazałem jako referencje i chodzi :)
> jest tylko kolejny problem dlaczego ten moj mini serwerek się wiesza i jak
> go uruchomie to nie można go nawet zamknąć :(((
<ciah>
Bez watkow dalej nie zajdziesz, nie mozesz obslugiwac socketa w watku
komunikatow (czyli np. w obsludze eventu) bo zablokujesz rozsylanie
komunikatow po aplikacji czyli efektywnie zwiesisz program.
--
a1 (Bartek Janusz) mailto: arcone1 [at] invalid.gmail [dot] com
No oki więc dodałem 1 wątek ktory obsługuje przychodzące informacje,
problem w tym że niestety nie działa(no wiec w ktorym miejscu mam dodać
polecenie żeby dane przychodzace na serwer wyświetlały się w polu tekstowym
?)
public void jButton1_actionPerformed(ActionEvent e) {
// Chat klient = new Chat();
// klient.doDziela(pole);
Runnable zadaniewatku = new MojeZadanie();
Thread mojwatek = new Thread(zadaniewatku);
mojwatek.start();
}
}
class Frame1_jButton1_actionAdapter implements ActionListener {
private Frame1 adaptee;
Frame1_jButton1_actionAdapter(Frame1 adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.jButton1_actionPerformed(e);
}
}
class MojeZadanie implements Runnable {
public void run() {
String porada = null;
ServerSocket gniazdoSrw = null;
try {
gniazdoSrw = new ServerSocket(4242);
while (true) {
Socket gniazdo = gniazdoSrw.accept();
InputStreamReader strUser = new
InputStreamReader(gniazdo.
getInputStream());
BufferedReader user = new BufferedReader(strUser);
porada = user.readLine();
user.close();
gniazdo.close();
}
} catch(IOException ex) { ex.printStackTrace(); }
}
}
oto komunikat kompilatora :
"C:\Program Files\jbuilder\jdk1.4\bin\javaw" -classpath "C:\Documents and
Settings\Rafał\jbproject\untitled18\classes;C:\Program
Files\jbuilder\jdk1.4\jre\lib\im\indicim.jar;C:\Program
Files\jbuilder\jdk1.4\jre\lib\im\thaiim.jar;C:\Program
Files\jbuilder\jdk1.4\jre\lib\ext\dnsns.jar;C:\Program
Files\jbuilder\jdk1.4\jre\lib\ext\sunjce_provider.jar;C:\Program
Files\jbuilder\jdk1.4\jre\lib\ext\ldapsec.jar;C:\Program
Files\jbuilder\jdk1.4\jre\lib\ext\localedata.jar;C:\Program
Files\jbuilder\jdk1.4\jre\lib\jsse.jar;C:\Program
Files\jbuilder\jdk1.4\jre\lib\plugin.jar;C:\Program
Files\jbuilder\jdk1.4\jre\lib\sunrsasign.jar;C:\Program
Files\jbuilder\jdk1.4\jre\lib\charsets.jar;C:\Program
Files\jbuilder\jdk1.4\jre\lib\rt.jar;C:\Program
Files\jbuilder\jdk1.4\jre\lib\jce.jar;C:\Program
Files\jbuilder\jdk1.4\jre\javaws\javaws.jar;C:\Program
Files\jbuilder\jdk1.4\lib\tools.jar;C:\Program
Files\jbuilder\jdk1.4\lib\dt.jar;C:\Program
Files\jbuilder\jdk1.4\lib\htmlconverter.jar" untitled18.Application1
java.net.BindException: Address already in use: JVM_Bind
at java.net.PlainSocketImpl.socketBind(Native Method)
at java.net.PlainSocketImpl.bind(PlainSocketImpl.java:331)
at java.net.ServerSocket.bind(ServerSocket.java:318)
at java.net.ServerSocket.<init>(ServerSocket.java:185)
at java.net.ServerSocket.<init>(ServerSocket.java:97)
at untitled18.MojeZadanie.run(Frame1.java:68)
at java.lang.Thread.run(Thread.java:534)
> java.net.BindException: Address already in use: JVM_Bind
Dwa razy tworzysz socketa na tym samym adresie, moze kilkakrotnie
uruchamiasz servera albo kilka razy naciskasz ten button ?
wydaje mi się że nie uruchamiam go 2 razy lub wiecej .......