Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

Schönen Gutan Tag allerseits

ich hoffe ihr könnt mir helfen (bin in java noch relativ neu)

ich habe im zuge meiner ausbildung die aufgabe bekommen einen einfachen java chat zu programmieren, in der form das ich einen server habe und mehrere clients die immer alle die nachricht erhalten egal von wen geschrieben

nun habe ich mittlerweile einen funktionsfähigen server und client (ich habe es so eingerichtet das auch der server nachrichten schreiben kann) nun komme ich leider nicht weiter da ich keine idee habe wie ich es regeln könnte das alle die nachricht erhalten und nicht nur einer.

das ist mein server


import java.io.*;

import java.net.*;

import java.util.*;


public class ServerTest

{

   public static void main(String[] args) throws IOException

   {

      ServerSocket serverSocket = null;

      try

      {

         serverSocket = new ServerSocket(4444);

         System.out.println("Server gestartet");

      }

      catch (IOException e)

      {

         System.err.println("Das ist nicht möglich!");

         System.exit(-1);

      }



      Socket clientSocket = null;


      for(int i=1;;i++)

      {

        try

        {

           clientSocket = serverSocket.accept();

           System.out.println("Client eingetroffen");

        }

        catch (IOException e)

        {

           System.err.println("Accept failed: 4444");

           System.exit(-1);

        }


        SocketHandler sh = new SocketHandler(clientSocket, i);

        sh.start();

      clientSocket = null;

      }

   }

}


class SocketHandler extends Thread

{

   private Socket socket;

   private int ID;


   public SocketHandler(Socket clientSocket, int i)

   {

      socket = clientSocket;

      ID = i;

   }


   public void run()

   {  try{

      PrintWriter ausgabe = new PrintWriter(socket.getOutputStream(), true);

      BufferedReader eingabe = new BufferedReader(new InputStreamReader(socket.getInputStream()));

      ausgabe.println("Der Server hat dich als Nummer"+ID+" verbunden");

      System.out.println("Der Server hat sich mit Nummer"+ID+" verbunden");

      String inputLine;


      while ((inputLine = eingabe.readLine()) != null)

      {

         System.out.println("User" +ID + inputLine);

         if (inputLine.equals("Bye"))

         {

           break;

         }

         Scanner scan = new Scanner (System.in);

         String antwort = scan.nextLine();

         ausgabe.println("Server: "+antwort);

      }

      ausgabe.println("Der Server trennt die Verbindung mit dir");

      System.out.println("Der Server trennt die Verbingung mit Nummer"+ID);

      ausgabe.close();

      eingabe.close();

      socket.close();

      }

      catch (Exception e)

      {

      }

   }

}

und das ist mein client

import java.io.*;

import java.net.*;


public class ClientTest

{

   public static void main(String[] args) throws IOException

   {

      Socket socket = null;

      try

      {

         socket = new Socket("10.4.34.231", 4444);

      }

      catch (IOException e)

      {

         System.err.println("Accept failed: 4444");

         System.exit(-1);

      }


      PrintWriter out = new PrintWriter(socket.getOutputStream(), true);

      BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));

      BufferedReader eingabe = new BufferedReader(new InputStreamReader(System.in));


      String inputLine, eingabeLine;


      if ((inputLine = in.readLine()) != null) System.out.println(inputLine);


      while ((eingabeLine = eingabe.readLine()) != null)

      {

         if (eingabeLine.equals("Bye"))

                break;

         out.println(eingabeLine);

         inputLine = in.readLine();

         System.out.println(inputLine);


      }


      out.close();

      in.close();

      socket.close();

   }

}


und noch etwas ich möchte keinesfalls ein fertiges programm sondern nur einen schubs in die richtige richtung bzw einen ansatz wie ich das lösen kann denn ich bin grade wirklich planlos

Geschrieben

ich möchte den server sagen das er nachrichten allen schicken soll und nicht nur einen

ein bsp.: wenn ich im server eine nachricht eine tippe kommt die nur bei einen an wenn dann noch eine eingegeben wird bei einen anderen usw und ich möchte nun wissen ob es eine möglichkeit gibt zu sagen schicke immer allen die nachricht

Geschrieben

Du musst - wie flashpix schon sagste - schauen, dass die Nachricht vom Server im den OutputStream eines jeden Sockets geschrieben wird.

D.h. du musst dir deine einfach zentral eine Liste anlegen in der du sämtliche Sockets - oder gleich die ganzen ClientHandler reinschmeißt. Wenn dann eine Nachricht über den Server geht gehst du die Sockets in der Liste durch und schickst die Nachricht an jeden. TCP-Sockets kannst du als Punkt- zu Punkt- Verbindung von einem Ort zum anderen betrachten. Wenn du über einen Socket sendest empfängt das auch genau einer. Wenn es alle bekommen sollen musst du über jeden Socket auch was senden.

Geschrieben

okay, wäre mein problem dann mit einen multicast gelöst?

d.h. wenn der server eine eingabe bekommt sendet er das dann automatisch an alle oder muss ich explizit sagen schicke die eingabe an den den und den ?

Geschrieben

ist es dann nicht eher der broadcast

ich möchte schließlich das jeder sämtliche eingaben erhält und nicht nur bestimmte, soll heißen ein client macht eine eingabe und alle anderen user erhalten die gleiche,

Geschrieben

Nunja, wenn ich mir die definition von broadcast so durchles (was ich vorher schon getan habe) ist das genau das was ich haben will, nämlich ein server der wahllos eine eingehende nachricht an sämtliche verbundene clients verschickt

oder hab ich da jetzt was falsch verstanden ?

Geschrieben

Wenn Du einen Broadcast einsetzen würdest, dann brauchst Du auch keinen Server. Weder Multicast noch ein Broadcast benötigen einen Server.

Du solltest Dir einmal anschauen, wer der Empfänger bei einem Broadcast und bei einem Multicast Paket ist. Ein Broadcast ist sicherlich nicht das, was Du willst

Geschrieben

okay, ja hab verstanden was du meinst

(sorry aber netzwerke lagen mir noch nie so wirklich)

hab das jetzt soweit das ich einen multicast habe, ja ohne server, bei den ich auch senden und empfangen kann, nur mein problem jetzt is das man erst etwas erhält wenn man selber etwas sendet

wie ist es denn möglich das man sofort eine ausgabe erhält wenn ein anderer eine eingabe tätigt ?

Geschrieben
sorry aber netzwerke lagen mir noch nie so wirklich

dann solltest Du damit beginnen, bevor Du eine Anwendung entwickelst, in der Du eben Netzwerk Komponenten einbauen möchtest

wie ist es denn möglich das man sofort eine ausgabe erhält wenn ein anderer eine eingabe tätigt ?

Lies Dich bitte in die entsprechenden Spezifikationen ein ! Diese Frage kannst Du alleine mit den Schaubildern in dem Wikipedia Artikel klären.

Ansonsten empfehle ich die RFC 1112 - Host extensions for IP multicasting (RFC1112)

Geschrieben

Informier dich doch erstmal über die zugrunde liegenden Protokolle!

TCP stellt - wie ich schon sagte - so etwas wie eine Punkt- zu Punkt- Verbindung. Das kannst du vergleichen mit einem Wasserrohr. Was du auf der einen Seite reinkippst kommt auf der anderen raus. Wenn du dein Wasser an mehreren Stellen haben willst brauchst du eine Art Verteiler. Soll dein TCP-Server aus dem Internet oder WAN erreichbar sein musst du entsprechend eine Port-Weiterleitung am Router konfigurieren.

Java-Klassen: Socket, ServerSocket

UDP kannst du vergleichen mit einer besseren SMS. Du kannst UDP gezielt an jemanden schicken oder aber an eine bestimmte Gruppe oder an bestimmte Netze. Einen Unicast schickst du an eine besimmte eindeutige IP-Adresse oder PC-Namen. Einen Multicast empfängt jeder der sich eine bestimmte Multicast-Gruppe anmeldet. Und einen Broadcast empfängt jeder dessen IP in einem bestimmten Adressbereich liegt (kannst auch an absolut alle Broadcasten). Der Nachteil von UDP: Übers Internet wirst du Probleme bekommen. Am Router endet dein Broadcast und dein Multicast. Selbst ein Unicast geht nur übers Internet wenn du am Router entsprechende Port-Weiterleitungen konfiguriert hast. Bei UDP ist die Datenübertragung nicht gesichert. Pakete können sowohl verloren gehen als auch beschädigt werden.

Ich weiß nicht welche Anforderungen du an deinen Chat hast, aber generell finde ich dafür TCP besser. Abgesehen davon verlierst du mit UDP die Privatsphäre. Stell dir vor du möchtest später noch eine "flüstern"-Funktion einbauen um irgendwas an genau einen Empfänger zu schreiben. Du kannst dann natürlich dein Protokoll so stricken, dass du den Empfänger in der Nachricht vermerkst und die anderen die Nachricht wieder verwerfen, aber wenn jemand einen anderen Client verwendet hast du keine Kontrolle mehr. Broadcast und Multicast setze ich persönlich nur ein um die Lasten zu reduzieren (Video-Broadcast/Multicast), um Konfigurationseinstellungen zu finden oder um ewigen C-Programmieren das Leben nicht noch mit zu TCP zu belasten.

Geschrieben
hab das jetzt soweit das ich einen multicast habe, ja ohne server, bei den ich auch senden und empfangen kann, nur mein problem jetzt is das man erst etwas erhält wenn man selber etwas sendet

wie ist es denn möglich das man sofort eine ausgabe erhält wenn ein anderer eine eingabe tätigt ?

Kanns sein, dass du versuchst im selben Thread zu empfangen und zu senden?

Empfangen geht prinzipiell so:


int port = 19245;

byte [] buf = new byte[256*256];

MulticastSocket socket = new MulticastSocket(port);

socket.joinGroup(InetAddress.getByName(232.8.8.8));


DatagramPacket p = new DatagramPacket(buf,buf.length);

socket.receive(p);

Geschrieben
Broadcast und Multicast setze ich persönlich nur ein um die Lasten zu reduzieren (Video-Broadcast/Multicast), um Konfigurationseinstellungen zu finden oder um ewigen C-Programmieren das Leben nicht noch mit zu TCP zu belasten.

Private Messages würden sich auch via Unicast realisieren lassen. Ansonsten stimmt das schon. In einem LAN habe ich bisher sehr gute Erfahrungen mit Multicast gemacht, eben genau um mehrere zentrale Soucen zu haben, die Daten verarbeiten können. Die Koordinaten läuft komplett via Multicast. Sourcen können Daten verarbeiten und wieder an den Absender schicken oder sie sind Sender und warten, bis Datenblöcke verarbeitet wurden. Der eigentliche Datentransfer läuft dann via RMI, da Multicastpakete zu klein sind.

Das Routing innerhalb einzelner LANs muss dann natürlich im Router so eingestellt sein, dass eben Multicast passend in andere Segmente geroutet werden (ist aber auch kein größeres Problem).

TCP bietet sich natürlich an, wenn man einen Server im Netz betreiben will. Damit muss man eben aber auch einen Dienst passend entwickeln. Multicast bietet für eine reine LAN basierte Struktur eben weniger Overhead, in Verbindung mit Unicast erreicht man eben die entsprechende Funktionalität.

Sollen die Nachrichten auch noch verschlüsselt sein, würde ich von einer paketbasierten Struktur abraten und nur die Inhalte der Nachricht verschlüsseln, wozu man Off-the-Record Messaging ? Wikipedia verwenden kann

Geschrieben

1. das einzige was das programm können soll ist: eine eingabe von einen beliebigen client zu erhalten und diese dann an alle anderen clients verteilen, es sind keine weiteren anforderungen gestellt es soll später auch nichts weiter hinzukommen.

2. mein einziges problem zur zeit ist eben das ich nicht dahin komme das der server an sämtliche clients schickt

Geschrieben

2. mein einziges problem zur zeit ist eben das ich nicht dahin komme das der server an sämtliche clients schickt

Wie schon gesagt, es gibt mehrere Methoden:

Wenn Du TCP verwenden willst, dann musst Du für jeden Client einen Socket im Server haben und entsprechend die Daten synchronisiert verteilen. Oder Du nimmst Multicast, wobei damit der Server überflüssig wird

Geschrieben
1. das einzige was das programm können soll ist: eine eingabe von einen beliebigen client zu erhalten und diese dann an alle anderen clients verteilen, es sind keine weiteren anforderungen gestellt es soll später auch nichts weiter hinzukommen.

Ok. Damit sind die privaten Messages schonmal raus. Aber wie schon gesagt: Wenn der Chat auch übers Internet funktionieren soll oder anderweitige Netzübergreifend bietet sich UDP (MulticastSocket oder DatagramSocket weniger an, da dann Broadcast/Multicast am Router hängen bleibt und für Unicast sämtliche Router hinten denen die Clients sitzen entsprechend konfiguriert sein müssten).

Simple lokale Variante:

Wenn das Ding nur im LAN funktionieren soll dann schmeiß dein ServerSocket und Socket zeugs weg und nimm wie flashpixx vorschlägt einen MulticastSocket. Der zentale Server fällt dann komplett weg und die Clients melden sich lediglich an die MulticastGroup an um Nachrichten zu empfangen. Und senden Packete an die MulticastGroup.

TCP-Variante:

Dein jetziger Code ist ganz ok aber wie ich schon sagte: Dein Server sendet die Nachricht nur an den Sender der Nachricht. Du musst da bissl modifizieren:

Lager deinen Server-Kern in eine Klasse und verpasse dieser Klasse eine Liste in der du die Verbindungen speicherst:


import java.io.*;

import java.net.*;

import java.util.LinkedList;


public class ServerTest {

	private LinkedList<SocketHandler> receivedSockets = new LinkedList<SocketHandler>();


	public ServerTest() throws IOException {

		ServerSocket serverSocket = serverSocket = new ServerSocket(4444);


		Socket clientSocket = null;


		for (int i = 1;; i++) {

			try {

				clientSocket = serverSocket.accept();

				System.out.println("Client eingetroffen");


				SocketHandler sh = new SocketHandler(this, clientSocket, i);

				sh.start();

				clientSocket = null;

			} catch (IOException e) {

				System.err.println("Accept failed: 4444");

				System.exit(-1);

			}

		}

	}


	public void sendMessage(String message) {

		for (SocketHandler handler : receivedSockets) {

			handler.sendMessage(message);

		}

	}


	public static void main(String[] args) {

		try {

			new ServerTest();

			System.out.println("Server gestartet");

		} catch (IOException e) {

			System.err.println("Das ist nicht möglich!");

			System.exit(-1);

		}

	}

}

2. pass deinen SocketHandler darauf an:

import java.io.BufferedReader;

import java.io.InputStreamReader;

import java.io.PrintWriter;

import java.net.Socket;


public class SocketHandler extends Thread {

	private Socket socket;

	private int ID;

	private ServerTest serverTest;

	private PrintWriter ausgabe;


	public SocketHandler(ServerTest serverTest, Socket clientSocket, int i) {

		socket = clientSocket;

		ID = i;

		this.serverTest = serverTest;

	}


	public void run() {

		try {

			ausgabe = new PrintWriter(socket.getOutputStream(),

					true);

			BufferedReader eingabe = new BufferedReader(new InputStreamReader(

					socket.getInputStream()));

			ausgabe.println("Der Server hat dich als Nummer" + ID

					+ " verbunden");

			System.out.println("Der Server hat sich mit Nummer" + ID

					+ " verbunden");

			String inputLine;


			while ((inputLine = eingabe.readLine()) != null) {

				System.out.println("User" + ID + inputLine);

				if (inputLine.equals("Bye")) {

					break;

				}

				Scanner scan = new Scanner(System.in);

				String antwort = scan.nextLine();


				serverTest.sendMessage(inputLine);

			}

			ausgabe.println("Der Server trennt die Verbindung mit dir");

			System.out.println("Der Server trennt die Verbingung mit Nummer"

					+ ID);

			ausgabe.close();

			eingabe.close();

			socket.close();

		} catch (Exception e) {

		}

	}


	public void sendMessage(String message){

		ausgabe.println(message);

	}

}

WICHTIG:

- Das ist nur eine Demo wie man ganz prinzipiell dafür sorgen kann, dass Messages an alle verteilt werden.

- Da der code deiner Scanner-Klasse nicht vorliegt weiß ich nicht ob ich das jetzt so richtig implementiert hab. Jedenfalls bekommen jetzt alle genau das was vorher der Sender der Nachricht vom Server bekommen hat.

- Meine sendMessage-Routine fängt keine IOException ab. Das sollte man aber tun. Überleg dir was sonst passiert, wenn der erste Client in der Liste mittlerweile offline ist.

- Wenn ein Client offline geht (IOException oder eingabe.readLine() = null) sollte ihn der Server aus der Liste nehmen.

Geschrieben
Nunja hab das problem jetzt mit hilfe von ein paar schleifen gelöst und alles funktioniert wunderbar

und ich habe immernoch einen server, weil das teil der aufgabe war....

Cool. Na dann hat sichs ja erledigt.

  • 2 Wochen später...
Geschrieben

So falls es jemanden intressiert kann ich ja mal meinen jetzigen quelltext posten

als erstes der Server



package Chat;


import java.io.*;

import java.net.*;

import java.util.*;

import java.util.logging.Level;

import java.util.logging.Logger;


public class MultiThreadChatServer

{

    private static  Socket clientSocket = null;

    private static  ServerSocket serverSocket = null;

    private static  clientThread t[] = new clientThread[10];

    private static FileWriter fw = null;

    private static PrintWriter pw = null;


    public static void main(String args[])

       {

          String logspeicher ="C:\\Dokumente und Einstellungen\\test.log";

          File file = new File(logspeicher);

          Calendar cal = Calendar.getInstance();

          try

             {

                fw = new FileWriter(file.getPath(), true);

             }

          catch (IOException ex)

             {

                Logger.getLogger(MultiThreadChatServer.class.getName()).log(Level.SEVERE, null, ex);

             }

          pw = new PrintWriter( fw );

          System.out.println("Geben sie den zu benutzenden Port an");

          Scanner scan = new Scanner (System.in);

          int port_number = scan.nextInt();

          System.out.println("Benutze den Java MultiThreadChatServer\nEs wird der Port "+port_number+" benutzt");

          pw.printf("<%tT>\n",cal);

          pw.println("Der Server wurder gestartet");

          try

            {  //Erstelle Socket auf Port 2222

               serverSocket = new ServerSocket(port_number);

            }

          catch (IOException e)

            {   //Fehlerausgabe

               System.out.println(e);

            }

          while(true)

            {

               try

                  {    //Akzeptiere Client (max. 10)

                     clientSocket = serverSocket.accept();

                     for(int i=0; i<=9; i++)

                       {

                          if(t[i]==null)

                             {  //Starte Thread

                                (t[i] = new clientThread(clientSocket,t)).start();

                                break;

                             }

                       }

                  }

             catch (IOException e)

                 {    //Fehlerausgabe

                     System.out.println(e);

                 }

             finally

                 {

                 pw.printf("<%tT>\n",cal);

                 pw.println("Der Server wurde Geschlossen");

                try {

                    fw.flush();

                    fw.close();

                    pw.flush();

                    pw.close();

                } catch (IOException ex) {

                    Logger.getLogger(MultiThreadChatServer.class.getName()).log(Level.SEVERE, null, ex);

                }

                 }

            }

      }

}


jetzt der clientthread


package Chat;


import java.io.*;

import java.net.*;

import java.sql.SQLException;

import java.util.*;

import java.util.logging.Level;

import java.util.logging.Logger;

class clientThread extends Thread

{

    private DataInputStream is = null;

    private PrintStream os = null;

    private Socket clientSocket = null;

    private clientThread t[];

    private FileWriter fw = null;

    private PrintWriter pw = null;

    public clientThread(Socket clientSocket, clientThread[] t)

      {

         this.clientSocket=clientSocket;

         this.t=t;

      }


    @Override

    public void run()

      {

        String line;

        try

          {   //Ein-/Ausgabe Festlegen

             String logspeicher ="C:\\Dokumente und Einstellungen\\test.log";

             File file = new File(logspeicher);

             fw = new FileWriter( file.getPath() , true );

             pw = new PrintWriter( fw );

             is = new DataInputStream(clientSocket.getInputStream());

             os = new PrintStream(clientSocket.getOutputStream());

             pw.println("Ein User ist dem Chat beigetreten.");

             //Eingabeaufforderung

             abfragen passwort = new abfragen(clientSocket);

             String name = passwort.abfragen(clientSocket);

             pw.println("Der User hat den Namen"+ name);

             //Willkommensgruß

             os.println("<Herzlich Willkommen "+name+" in unseren Chatroom.>\n<Um den Raum zu verlassen Tippe /quit in eine neue Zeile>");

             for(int i=0; i<=9; i++)

                {

                   if (t[i]!=null && t[i]!=this)

                     {   //Ausgabe an andere das ein neuer Client beigetreten ist

                        t[i].os.println("*** Der Benutzer "+name+" hat den Chatroom betreten !!! ***" );

                     }

                }

             while (true)

                {

                   line = is.readLine();

                   //Abbruchbedingung

                   if(line.startsWith("/quit"))

                     {

                       pw.println("Der User "+ name+ " hat den Chatroom verlassen");

                       break;

                     }

                   for(int i=0; i<=9; i++)

                      {

                         if (t[i]!=null && t[i] !=this)

                         {  //Ausgabe der erhaltenen Nachricht an alle außer den Verfasser

                            Calendar cal = Calendar.getInstance();

                            t[i].os.printf("<%tT>\n",cal);            //Zeit

                            t[i].os.println("<"+name+"> \n"+line);  //Text

                            pw.printf("<%tT>\n",cal);

                            pw.println("<"+name+"> \n"+line);

                         }

                      }

                 }

              for(int i=0; i<=9; i++)

                 {

                    if (t[i]!=null && t[i]!=this)

                       {   //Ausgabe an andere das jmd den Chat verlassen hat

                          t[i].os.println("*** Der Benutzer "+name+" hat den Raum verlassen !!! ***" );

                       }

                 }   //Ausgabe an den der den Chat verlässt

              os.println("<*** Auf Wiedersehen "+name+" ***>");

              for(int i=0; i<=9; i++)

                 {

                    if (t[i]==this)

                       {  //Null setzen des jeweiligen platzes im array das ein neuer Client beitreten kann

                          t[i]=null;

                       }

                 }

          }

        catch (SQLException ex) {

            Logger.getLogger(clientThread.class.getName()).log(Level.SEVERE, null, ex);

        }

            //fehlerausgabe

        catch(IOException e)

           {

              System.out.println(e);

           }

        finally

           {

              try

                 {

                     fw.flush();

                     fw.close();

                     pw.flush();

                     pw.close();

                     is.close();

                     clientSocket.close();

                     os.close();

                 }

              catch (IOException e)

                 {

                     Logger.getLogger(clientThread.class.getName()).log(Level.SEVERE, null, e);

                 }

            }

      }

}

nun die passwort abfrage

/*

 * To change this template, choose Tools | Templates

 * and open the template in the editor.

 */


package Chat;


import com.mysql.jdbc.Connection;

import com.mysql.jdbc.Statement;

import java.io.DataInputStream;

import java.io.IOException;

import java.io.PrintStream;

import java.net.Socket;

import java.sql.DriverManager;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.util.logging.Level;

import java.util.logging.Logger;


/**

 *

 * @author Administrator

 */

public class abfragen {

    private DataInputStream is = null;

    private PrintStream os = null;

    private String nick;

    private final Socket clientSocket;


    abfragen(Socket clientSocket) {

                 this.clientSocket=clientSocket;

    }


    public String abfragen (Socket clientSocket) throws SQLException

    {

        boolean test = false;

        int i = 3;


          try {

            is = new DataInputStream(clientSocket.getInputStream());

            os = new PrintStream(clientSocket.getOutputStream());

            os.println("Haben sie bereits einen account ?\n Ja/Nein");

            String account = is.readLine();

            if (account.equals("Ja")) {

                while (test == false)

                {

                os.println("Geben sie den Benutzernamen ein:");

                nick = is.readLine();

                os.println("Geben sie das Passwort ein:");

                String pw = is.readLine();

                String connStr = "jdbc:mysql://localhost:3306/" + "benutzerverwaltung?user=*****&password=*****";

                String statement = "Select name, passwort from nutzer where name = '" + nick + "' and passwort = '" + pw + "'";

                Connection conn = null;

                try {

                    Class.forName("com.mysql.jdbc.Driver");

                    conn = (Connection) DriverManager.getConnection(connStr);

                    java.sql.Statement stmt = conn.createStatement();

                    ResultSet rs = stmt.executeQuery(statement);

                    if (rs.next() == false) {

                        test = false;

                        i--;

                        os.println("Benutzername oder Passwort war falsch!\n Sie haben noch"+i+"Versuche");

                        if (i<=0)

                        {

                            os.println("Keine Versuche mehr übrig");

                            System.exit(0);

                        }


                    } else {

                        os.println("Zugang gewaehrt");

                        test = true;

                    }

                } catch (ClassNotFoundException e) {

                    os.println(e);

                } catch (SQLException e) {

                    os.println(e);

                } finally {

                    try {

                        conn.close();

                    } catch (SQLException e) {

                        // TODO Auto-generated catch block

                        System.out.println(e);

                    }

                  }

                }

            } else {

                os.println("Gewuenschter Nickname:");

                nick = is.readLine();

                os.println("Gewuenschtes Passwort");

                String pw = is.readLine();

                String connStr = "jdbc:mysql://localhost:3306/" + "benutzerverwaltung?user=root&password=system";

                String statement = "INSERT INTO nutzer (name,passwort)" + "VALUES ('" + nick + "', " + "'" + pw + "')";

                Connection conn = null;

                try {

                    //Verbindung aufbauen

                    Class.forName("com.mysql.jdbc.Driver");

                    conn = (Connection) DriverManager.getConnection(connStr);

                    //Statement deklarieren und ausführen

                    Statement stmt = (Statement) conn.createStatement();

                    stmt.executeUpdate(statement);


                } catch (ClassNotFoundException e) {

                    os.println(e);

                } catch (SQLException e) {

                    os.println(e);

                }finally {

                    try {

                        conn.close();

                    } catch (SQLException e) {

                        // TODO Auto-generated catch block

                        System.out.println(e);

                    }

                }

            }

        } catch (IOException ex) {

            Logger.getLogger(abfragen.class.getName()).log(Level.SEVERE, null, ex);

        }

return nick;

    }


}

und zum schluss der chatclient

package Chat;


import java.io.*;

import java.net.*;

import com.sun.jna.*;

import java.util.Scanner;

import java.util.logging.Level;

import java.util.logging.Logger;




public class MultiThreadChatClient implements Runnable

{

    // Deklarationen

    // os = output stream

    // is = input stream

   private static Socket clientSocket = null;

   private static PrintStream os = null;

   private static DataInputStream is = null;

   private static BufferedReader inputLine = null;

   private static boolean closed = false;


   public static void main(String[] args)

       {

          //standard port

          System.out.println("Geben sie bitte den zu benutzenden Port an.");

          Scanner scan = new Scanner (System.in);

          int port_number = scan.nextInt();

          String host="LocalHost";

          System.out.println("Benutze den Java MultiThreadChatClient  \n"+"Der Host"+host+", mit der Portnummer "+port_number+" wird angesprochen");

          // Versuche Socket auf gegebenen Host und Port zu zuzugreifen

          // Deklariere is/os und inputLine

          try

             {

                clientSocket = new Socket(host, port_number);

                inputLine = new BufferedReader(new InputStreamReader(System.in));

                os = new PrintStream(clientSocket.getOutputStream());

                is = new DataInputStream(clientSocket.getInputStream());

             }

          catch (UnknownHostException e)

             {

                //Fehlerausgabe

                System.err.println("Kenne den Host "+host+" nicht");

             }

          catch (IOException e)

             {

                System.err.println("Bekomme keine I/O Verbindung zum Host"+host);

             }

          if (clientSocket != null && os != null && is != null)

             {

                try

                   {

                      //Erstelle einen Thread um vom Server zu lesen

                      new Thread(new MultiThreadChatClient()).start();

                      while (!closed)

                         {

                            os.println(inputLine.readLine());

                         }

                   }

                catch (IOException e)

                   {

                      //Fehlerausgabe

                      System.err.println("IOException:  " + e);

                   }

                finally

                   {

                    try

                        {

                            is.close();

                            clientSocket.close();

                            os.close();

                        }

                    catch (IOException ex)

                        {

                        Logger.getLogger(MultiThreadChatClient.class.getName()).log(Level.SEVERE, null, ex);

                        }

                    }

              }

       }

    public interface Kernel32 extends Library

        {

            public boolean Beep (int FREQUENCY, int DURATION);

            public void Sleep (int DURATION);

        }


    public void run()

       {

          String responseLine;

          Kernel32 lib = (Kernel32) Native.loadLibrary("kernel32",Kernel32.class);

          try

             {

                while ((responseLine = is.readLine()) != null)

                   {

                      //Ausgabe der Zeile die vom Server kommt

                      if(responseLine.startsWith("<"))

                      {

                      }

                    else

                      {

                            lib.Beep(280, 100);

                            lib.Beep(348, 100);

                            lib.Beep(420, 200);

                            lib.Beep(348, 100);

                            lib.Beep(420, 400);

                       }

                    if(responseLine.startsWith("Tetris"))

                       {

                           lib.Sleep(850 / 4);

                           lib.Beep(329 * 2, 850 / 4);

                           lib.Beep(493 * 1, 850 / 8);

                           lib.Beep(261 * 2, 850 / 8);

                           lib.Beep(293 * 2, 850 / 4);

                           lib.Beep(261 * 2, 850 / 8);

                           lib.Beep(493 * 1, 850 / 8);

                           lib.Beep(440 * 1, 850 / 4);

                           lib.Beep(440 * 1, 850 / 8);

                           lib.Beep(261 * 2, 850 / 8);

                           lib.Beep(329 * 2, 850 / 8);

                           lib.Beep(329 * 2, 850 / 8);

                           lib.Beep(293 * 2, 850 / 8);

                           lib.Beep(261 * 2, 850 / 8);

                           lib.Beep(493 * 1, 1700 / 5);

                           lib.Beep(261 * 2, 850 / 8);

                           lib.Beep(293 * 2, 850 / 4);

                           lib.Beep(329 * 2, 850 / 4);

                           lib.Beep(261 * 2, 850 / 4);

                           lib.Beep(440 * 1, 850 / 4);

                           lib.Beep(440 * 1, 850 / 4);

                           lib.Sleep(850 / (8 / 3));

                           lib.Beep(293 * 2, 3400 / 13);

                           lib.Beep(349 * 2, 850 / 8);

                           lib.Beep(440 * 2, 850 / 8);

                           lib.Beep(440 * 2, 850 / 8);

                           lib.Beep(391 * 2, 850 / 8);

                           lib.Beep(349 * 2, 850 / 8);

                           lib.Beep(329 * 2, 850 / 3);

                           lib.Beep(261 * 2, 850 / 8);

                           lib.Beep(329 * 2, 850 / 8);

                           lib.Beep(329 * 2, 850 / 8);

                           lib.Beep(293 * 2, 850 / 8);

                           lib.Beep(261 * 2, 850 / 8);

                           lib.Beep(493 * 1, 850 / 4);

                           lib.Beep(493 * 1, 850 / 8);

                           lib.Beep(261 * 2, 850 / 8);

                           lib.Beep(293 * 2, 850 / 4);

                           lib.Beep(329 * 2, 850 / 4);

                           lib.Beep(261 * 2, 850 / 4);

                           lib.Beep(440 * 1, 850 / 4);

                           lib.Beep(440 * 1, 850 / 4);

                        }

                      System.out.println(responseLine);

                      //Abbruchbedingung

                      if (responseLine.indexOf("*** Auf Wiedersehen") != -1)

                      {

                         break;

                      }

                   }

                closed=true;

             }

          catch (IOException e)

             {

                //Fehlerausgabe

                System.err.println("IOException:  " + e);

             }

       }

}


damit es so funktioniert sind zusätzlich mysql-connector-java-5.1.15 und com.sun.jna.native sowieso com.sun.jna.library nötig

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...