bei dem Connect: IOException

OVERGAME

Mitglied
Meine Chat Applikation lief gestern noch wunderbar , heute nicht mehr !!
Der ChatServer hat sich dafür entschieden heute nicht verbinden zu lassen?
soll ich auf Morgen warten und gucken vielleicht denkt er sich das anders
oder ist hier jemand mit dem Problem vertraut ?
bitte um hilfe
mfg
 

OVERGAME

Mitglied
gerne bei dem Code bin ich mir nicht sicher dass du es dir angucken willst , ist ziemlich lang!!
ausserdem hab ich da nix geändert!
Code:
*** java.net.ConnectException: Connection refused: connect
ChatServer Code :
Code:
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Iterator;
import java.util.LinkedList;

public class ChatServer implements Runnable{
	
	private ServerSocket serverSocket;
	private static int port=3000 ;
	private Socket clientSocket;
	 protected LinkedList threadList = new LinkedList();
	private Iterator iterator;
	
	
	public static void main(String args[]){
		if(args.length==1){
			try{ 
				port=Integer.parseInt(args[0]);
			}catch(NumberFormatException nfe){
				System.out.println("ungültige Port Eingabe");
				}
			}
		ChatServer server = new ChatServer();
		server.init();
		server.closeAll();
	}

private void init(){
	    try{
		serverSocket = new ServerSocket(port);
		System.out.println("Server horscht an port "+port);
	
       }catch(IOException ioe){
	   System.out.println(ioe.toString());
       }try{
	    clientSocket=serverSocket.accept();
	    System.out.println("Verbindung zu Socket" +clientSocket.getRemoteSocketAddress()+" aufgenommen");
	    //IN DIESEM BEREICH 
	    //WIRD CLIENTTHREAD ERZEUGT UNd THREAD und wird gestartet
	    ClientThread clientThread= new ClientThread(clientSocket ,this);
	    Thread thread = new Thread(clientThread.getThreadName());
	    threadList.add(clientThread);
	    thread.start();
	    
	    
       }catch (IOException ioe) {
	   System.out.println(ioe.toString());
     }

}
      private void closeAll() {
	//die Streams  in den ClientThreadObjekten 
      try{
	   serverSocket.close();
	     }catch(IOException ioe){
	    	 System.out.println(ioe.toString());
	   	   }
		}
      
      public  void generateOutput (String output) {
          iterator = threadList.iterator();
          while (iterator.hasNext()) {
              ClientThread thread = (ClientThread) iterator.next();
              thread.output(output);
          }
      }
  	public void run() {
  		// TODO Auto-generated method stub
  		
  	}
  }
 
Zuletzt bearbeitet:
G

Gast2

Gast
Das ist nur die erste Zeile der Exception.
Ersetz mal
Java:
System.out.println(ioe.toString());
durch
Java:
ioe.printStacktrace();
Dann solltest du nen bissl mehr sehen.
 

OVERGAME

Mitglied
vorher hatte das auch mit toString geklappt !!
jedenfalls jetzt nach dieser änderung funktioniert das wieder ,dafür vielen dank.
kannst du mir bitte wo wir schon mal dabei sind ,einen Hinweis geben wie die Nachricht
von einem Clienten nicht für alle andere Clienten sichtbar wird ?
Benutzer oberfläche sieht so aus
Code:
package chat;
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import java.net.*;
import java.io.*;
 

public class ChatClientFrame extends JFrame implements ActionListener {
 
 
	private static final long serialVersionUID = 1L;
	private JTextField jtfEingabe;
    private JLabel label;
    private JButton button;
    private JEditorPane editorPane;
    private Container contentPane;
    private String labelText = "";
    private JMenuBar menuBar;
    private JMenu menuOperation, menuHelp;
    private JMenuItem opClose, opConnect, opDisconnect, hlpHelp, hlpAbout;
    private Action actClose, actConnect, actDisconnect, actHelp, actAbout;
    private KeyStroke stroke;
    private JToolBar toolBar;
    private JButton jbClose, jbConnect, jbDisconnect, jbHelp, jbAbout;
    private final String TTT_SCHL = "Schließt ";
    private final String TTT_VERB = "Verbindet ";
    private final String TTT_ABBR = "Verbindung-Abbruch ";
    private final String TTT_HLP = "Help";
    private final String TTT_ABT = "About";
    private BufferedReader serverIn;
    private PrintWriter serverOut;
    private String host, user="";
    private ClientInputThread inputThread;
    private Socket clientSocket;
    private int port=4444;
    private InetAddress inetadr;
 
 
 
 
    public ChatClientFrame (){
        super ("Chat-Client von ");
        setSize (400, 200);
        contentPane=this.getContentPane();
        setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
 
 
        //Eingabefeld einbauen
        jtfEingabe = new JTextField ("");
        jtfEingabe.setBackground (Color.white);
        jtfEingabe.setForeground (Color.blue);
        
        jtfEingabe.addKeyListener (new KeyAdapter (){
            public void keyPressed (KeyEvent ke) {
                // bei Enter Text übermitteln
                if (ke.getKeyCode ()==KeyEvent.VK_ENTER) {
                    String text = jtfEingabe.getText().trim();
                    if (text.length() > 0){
                        if (serverOut  != null){
                            serverOut.println(text);
                            //Eingabefeld wieder löschen
                            jtfEingabe.setText ("");
                        }
                        else {
                            jtfEingabe.setText (
                          "zunächst Verbindung zu einem server herastellen!");
                        }
                    }
                    else {jtfEingabe.setText ("Bitte Text eingeben!");
                }
            }
        }
        });
        
 
        editorPane = new JEditorPane();
        JScrollPane editorScroll = new JScrollPane (editorPane);
        editorPane.setContentType("text/html");
        
        this.createMenu();
        this.createToolBar ();
        
        JPanel panel = new JPanel ();
        panel.setLayout (new BorderLayout());
        contentPane.add (BorderLayout.CENTER, panel);
        contentPane.add (BorderLayout.NORTH, toolBar);
        panel.add (BorderLayout.CENTER, editorScroll);
        panel.add (BorderLayout.SOUTH, jtfEingabe);
 
        setVisible (true);
        
        
 
    }
 
 
    public void createMenu () {
        menuBar = new JMenuBar();
        this.setJMenuBar (menuBar);
        menuOperation = new JMenu ("Operationen");
        menuOperation.setMnemonic ('o');
        menuHelp= new JMenu ("Hilfe");
        menuHelp.setMnemonic ('h');
 
        menuBar.add (menuOperation);
        menuBar.add (menuHelp);
 
        actClose = new AbstractAction ("Schließen", new ImageIcon ("images/Stop16.gif")) {
            public void actionPerformed (ActionEvent ae) {
                if (clientSocket != null){ 
                        disconnectServer ();
                }
                System.exit (0);
                System.out.println ("Close wurde gedrückt");
            }
        };
        // Key-Stroke-Objekt (Shortcut) definieren
        stroke = KeyStroke.getKeyStroke (KeyEvent.VK_S, InputEvent.CTRL_MASK);
 
        // Shortcut im Action-Objekt speichern
        actClose.putValue (Action.ACCELERATOR_KEY, stroke);
 
        actClose.putValue (Action.SHORT_DESCRIPTION, TTT_SCHL);
        opClose = menuOperation.add (actClose);
        opClose.setMnemonic ('s');
 
        actConnect = new AbstractAction ("Verbinden", new ImageIcon ("images/Export16.gif")) {
            public void actionPerformed (ActionEvent ae) {
                connectServer();
            }
        };
        // Key-Stroke-Objekt (Shortcut) definieren
        stroke = KeyStroke.getKeyStroke (KeyEvent.VK_V, InputEvent.CTRL_MASK);
 
        // Shortcut im Action-Objekt speichern
        actConnect.putValue (Action.ACCELERATOR_KEY, stroke);
 
        actConnect.putValue (Action.SHORT_DESCRIPTION, TTT_VERB);
        opConnect = menuOperation.add (actConnect);
        opConnect.setMnemonic ('v');
 
        actDisconnect = new AbstractAction ("Verb. Abbrechen", new ImageIcon ("images/Import16.gif")) {
                public void actionPerformed (ActionEvent ae) {
                    disconnectServer();
                    System.out.println ("Disconnect wurde gedrückt");
                }
        };
        // Key-Stroke-Objekt (Shortcut) definieren
        stroke = KeyStroke.getKeyStroke (KeyEvent.VK_A, InputEvent.CTRL_MASK);
 
        // Shortcut im Action-Objekt speichern
        actDisconnect.putValue (Action.ACCELERATOR_KEY, stroke);
 
        actDisconnect.putValue (Action.SHORT_DESCRIPTION, TTT_ABBR);
        opDisconnect = menuOperation.add (actDisconnect);
        opDisconnect.setMnemonic ('a');
 
        actHelp = new AbstractAction ("Hilfe", new ImageIcon ("images/Help16.gif")) {
            public void actionPerformed (ActionEvent ae) {
                }
        };
        // Key-Stroke-Objekt (Shortcut) definieren
        stroke = KeyStroke.getKeyStroke (KeyEvent.VK_H, InputEvent.CTRL_MASK);
 
        // Shortcut im Action-Objekt speichern
        actHelp.putValue (Action.ACCELERATOR_KEY, stroke);
 
        actHelp.putValue (Action.SHORT_DESCRIPTION, TTT_HLP);
        hlpHelp = menuHelp.add (actHelp);
        hlpHelp.setMnemonic ('h');
 
        actAbout = new AbstractAction ("About", new ImageIcon ("images/About16.gif")) {
            public void actionPerformed (ActionEvent ae) {
                }
        };
        // Key-Stroke-Objekt (Shortcut) definieren
        stroke = KeyStroke.getKeyStroke (KeyEvent.VK_B, InputEvent.CTRL_MASK);
 
        // Shortcut im Action-Objekt speichern
        actAbout.putValue (Action.ACCELERATOR_KEY, stroke);
 
        actAbout.putValue (Action.SHORT_DESCRIPTION, TTT_HLP);
        hlpAbout = menuHelp.add (actAbout);
        hlpAbout.setMnemonic ('h');
    }
 
    private void createToolBar () {
        
        toolBar = new JToolBar ();
        jbClose = toolBar.add(actClose);
        jbConnect  = toolBar.add(actConnect);
        jbDisconnect = toolBar.add(actDisconnect);
        toolBar.addSeparator ();
        jbHelp = toolBar.add(actHelp);
        jbAbout = toolBar.add(actAbout);
    }
    
    private void connectServer () {
        try {
            
            host = InetAddress.getLocalHost().getHostName();
            clientSocket = new Socket (host, port);
            serverIn = new BufferedReader (new InputStreamReader (
                    clientSocket.getInputStream()));
            serverOut = new PrintWriter (
                    clientSocket.getOutputStream (), true);
            // BenutzerName an Server
            serverOut.println (user);
            inputThread = new ClientInputThread (editorPane, serverIn);
            inputThread.start ();
            jtfEingabe.setText ("");
        }
        catch (UnknownHostException uhe) {
            System.out.println ("bei dem Connect: UnknownHostException");
            System.out.println ("*** "+ uhe.toString());
            System.exit(-1);
        }
        catch (IOException ioe) {
            System.out.println ("bei dem Connect: IOException");
            System.out.println ("*** "+ ioe.toString());
            System.exit(-1);
        }
    }
 
    private void disconnectServer(){
        serverOut.println ("exit");
        inputThread = null;
        try {
            serverIn.close();
            serverOut.close();
            clientSocket.close();
            
            
        }
        catch (IOException ioe) {
            System.out.println ("*** "+ioe.toString());
        }
    }
 
    public static void main(String [] args) {
        new ChatClientFrame();
    }
 
    public void actionPerformed (ActionEvent ae) {
 
    }
    
}

und zwar wenn ich das zb 3 mal starte dann habe ich 3 clienten ,die die Nachrichten von einander
sehen können.
ich brauche einen Hinweis wie ich das so einrichte dass zb nur client 2 die nachricht sieht aber nicht
client 3.
 
S

SlaterB

Gast
bei mir funktioniert eine Verbindung mit einigen Umstellungen, ClientThread usw. fehlen, für die initiale Verbindung aber egal,
die Default-Ports sind unterschiedlich, 3000 im Server, 4444 im Client, hast du das bedacht?

der Server ist auch bisschen knapp, mehr als einmal accept() wird nicht ausgeführt, wie soll der drei Verbindungen hinbekommen?

> ich brauche einen Hinweis wie ich das so einrichte dass zb nur client 2 die nachricht sieht aber nicht client 3.

funktionieren denn jetzt die Verbindungen schon wieder?
das ist ja ein komplett anderes logisches Problem, zu Nachrichten und Verteilung hast du keinen Code bisher gepostet,
da muss du eben entsprechend aufwendig strukturieren, z.B. im Server zu jeder Nachricht die Quelle speichern und beim Weitersenden dann darauf achten dass es nicht an die Quelle zurückgeht oder was auch immer
 

OVERGAME

Mitglied
um genau zu sein, handelt es sich um eine Aufgabe ,und ich hab einen verständnis Problem :

Clients schicken Nachrichten an den Server.
Server verteilt diese Nachrichten an alle angeschlossene Clients.
Diese Verteilung soll Thread-Safe verlaufen ,sodass sich Nachrichten diverser Clients nicht gegenseitig stören.

für mich ist das komische fragenstellung, wenn ich richtig verstehe !! soll sich eine Nachricht nicht bei allen gezeigt werden
sondern nur bei dem Client an dem die Nachricht adressiert wird ?

denke ich richtig ? oder denke zu komplex ?
 
S

SlaterB

Gast
ich sehe da die Frage nicht eindeutig und wie man das umsetzt ist dann nochmal ne andere Frage,
sicherlich sollte ein Client seine eigenen Nachrichten nicht so wie fremde anzeigen, sie aber zu erhalten kann auch gut sein als Kontrolle, dass der Server sie erhalten hat..
 

OVERGAME

Mitglied
Ich danke dir für dein Support man !
ich konnte bisher alle Probleme beseitigen und antworten endlich liefern .
jetzt mal zu nächsten und letzten Aufgabe : Der Server soll beim anmelden eines Clienten
mitteilen wer alles bereit im chat teilnimmt .

wie soll ich da vorgehen ?
 
S

SlaterB

Gast
na korrekt auf dem ganz offensichtlichen normalen Wege?
der Client baut die Verbindung zum Server auf, dieser initalisiert bei sich alles nötige zum Client
und sendet dann nicht gerade zufällig auch erste Daten (dass Client und Server kommunizieren ist ja wohl nicht ungewöhnlich),
unter diesen Daten sind dann eben auch Informationen über andere aktive Clients,
darüber wird der Server ja wohl Beschweid wissen und dies in verarbeitbare Informationen verbauen können,

wie Daten übertragen werden ist eine andere Frage, bei Sockets sicher nur Strings?
überlege dir ein Protokoll, je nach bestimmten Schlüsselwort am Anfang wird eine Nachricht oder sonstige Information geschickt,
XML wenn es komplizierter wird,

eine weitere Frage ist, ob alle anderen Clients über den so eben neu angemelteten informiert werden
 

OVERGAME

Mitglied
so als Anfänger fällt mir nichts anders ausser ein String variable zu deklarieren die entwerder den Wert "Niemand" hat wenn niemand Bereit im chat ist oder halt "liste der Bereit angemeldete Clients" wenn
sich vorher leute angemeldet haben eben !!
das habe ich in meinem
Code:
void connectServer(){ serverOut.println(+meineVar); }
wobei

Code:
  serverOut = new PrintWriter ( clientSocket.getOutputStream (), true);
ist .

kann ich in der Richtung weitermachen ?
wenn ja ..wie soll mein String variable wissen wer alles bereit da ist ?

mfg
 
S

SlaterB

Gast
tja, das hat dann nichts mit der Kommunikation zu einem Client zu tun sondern du solltest dann erstmal im Server selber etwas Leben einbauen,
ich kann dir dein Programm nicht schreiben, du hast selber anscheinend wenig Ahnung, da ist das schwer

aber du hast doch eine Liste einer Clients, "protected LinkedList threadList"?
Java:
System.out.println("ich bin der Server, irgendwo führe ich gerade Code aus und überlege mir jetzt was");
String info = "";
for( alle Clients c in der Liste) {
  info += "einer der Clients ist: "+ ... c ... ;
}
System.out.println("nun habe ich geschafft, alle Clients in einem String zu beschreiben: "+info);

for( alle Clients c in der Liste) {
  sende an c den Info-String
}

derartiger Code ist schwer?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
R Socket SSL-Connect in Servlet - keystore wird nicht gefunden Netzwerkprogrammierung 2
RELAXccc HTTP Connection timed out: connect ?an was kann es liegen? Netzwerkprogrammierung 4
C HTTP POST Connect Netzwerkprogrammierung 9
W How best to connect to existing RPC ApplicationServer Netzwerkprogrammierung 3
Iron Monkey Timeout von connect Netzwerkprogrammierung 4
M connect von Socket schlägt fehl Netzwerkprogrammierung 6
DamienX Nio connect von öffentlicher Ip Netzwerkprogrammierung 4
M chat funktioniert nicht (Connection refused: connect) Netzwerkprogrammierung 3
J Was bedeutet: Address already in use: connect (beim client?) Netzwerkprogrammierung 4
D Apaches ProxyClient - CONNECT Netzwerkprogrammierung 2
D Socketverbindung schlägt fehl - Connection refused: connect Netzwerkprogrammierung 4
D Time-out bei ftp-connect einstellen Netzwerkprogrammierung 2
DEvent Keine IOException beim schreiben Socket Netzwerkprogrammierung 3
M ObjectOutputStream reset gibt IOException Netzwerkprogrammierung 4
K Strategien zur Behandlung von IOException gesucht Netzwerkprogrammierung 11
lhein java.io.IOException: Unable to establish loopback connection Netzwerkprogrammierung 4
H Server sendet im Intervall IOException Netzwerkprogrammierung 2
M IOException bei openConnection(); mit gültiger URL Netzwerkprogrammierung 2

Ähnliche Java Themen

Neue Themen


Oben