Zum Inhalt springen

Empfohlene Beiträge

Geschrieben (bearbeitet)

Hallo, ich möchte gerne einen Lanchat in Java Programmieren, das ganze soll ungefähr so aussehen:

man hat einen Server, auf diesem ist eine txt datei gespeichert, jeder der das Programm startet ist im selben Netzwerk mit dem Server, soweit so gut, nun sollte der Client einfach immer einen Text eingeben, während der Eingabe (über die Console) sollte garnichts passieren (ausser dass der Text den er gerade eingibt, eben da steht) sobald er fertig ist (das gibt er mit einem + zu erkennen) sollte ihm der Text ausgeschrieben werden der neu dazugekommen ist (Also das was er eingegeben hat, und das was eventuell jemand anderer hinzugefügt hat) nachdem das angezeigt wurde, sollte er einfach wieder weiterschreiben können...

ich denke das es so am einfachsten funktioniert, hier mein Code:

leider gibt es noch ein Problem, nämlich dann wenn man das ganze über Lan probiert...

ich hoffe das kann so funktionieren wie ich mir das vorstelle...

/**

 * Ein kleines Prog zum chatten im lan (mit fixem server!).

 * 

 * @*zenst*

 * @ Vers. 0.1

 */

public class lanchat

{

    public static void lanchat (String chat)

    {

        Out.println ("Willkommen zum Lan-Chat");

        boolean immer = true;

        while (immer)

        {

    In.open("E:\\Schule\\lanchat\\"+chat);

    boolean done = true;


    for (int i = 0; done; i++)

    {

        char last = In.read();

        done = In.done();

        Out.print (last);

    }

    In.close();

    einlesen (chat);

         }

    }

    private static void einlesen (String a)

    {

        boolean done = true;

        Out.open(a);

        while (done)

        {

            char last = In.read();

            Out.print (last);

            if (last == '+') done = false;

        }

        Out.close();

    }


}

schonmal danke für eure Hilfe!

/edit hab mir jetzt etwas überlegt, wonach die einzelnen chars zu einem String hinzugefügt werden, so dass ich den dann am ende hinzufüge... könnte das funktionieren?

Bearbeitet von alfray
Geschrieben (bearbeitet)

lol, wieso kann ich den Beitrag nicht mehr editieren?

>.<

egal...

Habe jetzt noch ein Problem, bei switch anweisungen kann man in die case ja nur zahlen nehmen, oder?

ich wollte nämlich noch etwas mit Befehlen versuchen... (die müssen nicht funktionieren)

also dass wenn ich z.B. /kick+ schreibe, dass es dann auf meienr Konsole rausschreibt, Player kicked,

das funktioniert auch, nur möchte ich gerne mehrere Befhele einbauen, und möchte dabei nicht Zeilenweise if anweisungen haben

wenn ich es jetzt aber wie folgt mache, funktioniert das nicht

switch(Befehl)

{

case "/kick": Out.println("Player kicked");break;

default: Out.println ("******e!");

}

Denn schon in der ersten Zeile kommt, int expected... muss ich da jetzt wirklich if anweisungen nehmen? Wenn ja, dann -.-'

/edit "das funktioniert auch" ich habe dazu letztere Methode folgendermaßen erweitert:

/**

private static void einlesen (String a)

    {

        boolean done = true;

        Out.open(a);

        while (done)

        {

            char last = In.read();

            Out.print (last);

            if (last == '+') done = false;

            if (last != '+')Befehl = Befehl + last;

        }

        Out.close();

            if (Befehl.equals ("/kick")) Out.println("Player kicked");

    }

wobei String Befehl eine globale Variable ist... ich hätte das bereits oben geändert, leider scheint man den ersten Beitrag nur einmal ändern zu können...

>.< wieso gibts da oben jetz das code einfügen symbol nimmer? ^^

Bearbeitet von alfray
Geschrieben

Ich würde Dir ganz dringend davon abraten so etwas per Datei zu machen. Arbeite z.B. mit Multicast und einem entsprechenden Protokoll.

Außerdem ist Deine Fehlerbeschreibung nicht aussagekräftig. Mir erschließt sich das nicht, da ein Chat für mich nichts mit einer zentralen Datei zu tun hat. Gerade bei einem Chat, in dem nur Textnachrichten gesendet werden, kann man dies sehr schön wie Multicast machen, wenn immer alle die Nachricht erhalten sollen bzw. Unicast wenn es nur genau einer sein soll.

Phil

Geschrieben

tja, das problem ist nur das ich mich weder mit multi noch mit unicast auskenne...

tut mir leid, hab wirklich ziemlich viel mist hierrein gebombt... mein problem beid er sache war einfach das die Datei nicht gespeichert wurde, und ich nicht wusste warum

hast du irgendwo ne anleitung zu uni/multicasts?

Geschrieben

Multicast ? Wikipedia

Unicast ? Wikipedia

Für Dateihandling unter Java: Galileo Computing :: Java ist auch eine Insel (8. Auflage) – 14 Dateien und Datenströme

Ich rate Dir aber von einer dateibasierten Lösung massiv ab. Mutlicast / Unicast lässt sich über Sockets Galileo Computing :: Java ist auch eine Insel (8. Auflage) – 18 Netzwerkprogrammierung

eleganter lösen. Benutze eine Multicast Adresse, wenn alle im gleichen Netz die Nachricht erhalten sollen und einen Unicast, wenn jemand eine private Nachricht bekommen soll.

Phil

Geschrieben

hmmm... was kann man machen wenn der compiler die Scanner methode nicht findet?

Scanner in = new Scanner( client.getInputStream() ); (cannot find symbol method scanner)

bzw String factor1 = in.nextLine(); (cannot find symbol, method nextLine()

bin ratlos, hab jdk 5(oder 6, kA)

Geschrieben

also, wenn ich schreibe ich hab jdk 5 und dann darunter schreibe das er die Methode Scanner nicht findet...

egal

ich habs nochmal neu installiert, ich habe nichts importiert, und mich dann gewundert warum er weder die Scanner() Methode noch die accept() Methode findet.

weis jemand in welcher (Bibliothek?) man die .nextLine() findet?

wenn du den Quellcode haben willst...(ja ganz recht, der is von irgendwo kopiert!)

  


import java.io.*; 

import java.net.*; 


public class MulServer 

{ 

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

  { 

    ServerSocket server = new ServerSocket( 3141 ); 


    while ( true ) 

    { 

      Socket client = null; 


      try 

      { 

        client = server.accept(); //cannot find symbol method accept()

        handleConnection ( client ); 

      } 

      catch ( IOException e ) { 

        e.printStackTrace(); 

      } 

      finally { 

        if ( client != null ) 

          try { client.close(); } catch ( IOException e ) { } 

      } 

    } 

  } 


  private static void handleConnection( Socket client ) throws IOException 

  { 

    DataInputStream  in  = new DataInputStream( client.getInputStream() ); 

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


    String factor1 = in.nextLine(); //cannot find Symbol Method nextLine()

    String factor2 = in.nextLine(); //cannot find Symbol Method nextLine()


    out.println(factor1+factor2); //das sollte einfach die Strings   

                                           //"zusammengefügt" ausschreiben

  } 



}

Die Fehlermeldungen hab ich als comment neben die entsprechende Zeile geschrieben...

Geschrieben
Scanner (Java 2 Platform SE 5.0)

Das nächste mal selbstständig suchen, erster Eintrag bei Google

Phil

^^ auf die Idee würd ich ja nie kommen :rolleyes:

und was genau hast du bei google eingegeben? das hier hab ich nämlich gefunden:

The Scanner class was introduced in Java 1.5. You are most likely using Java 1.4. Go to the Java Web Site and download the latest version.

^^

deswegen hab ichs mir dann auch nochmal neu installiert... seit dem erkennt er die accept() nicht mehr... so werd mir das mal downloaden thx

Ps: sind da auch die nextLine() und accept() dabei?

Geschrieben

beid em link von dir, steht doch auch dass die Scanner methode seit vers 1.5 implementiert ist, warum funktioniert das dann nicht? Die accept klasse funktioniert nun, das war ein dummer fehler von mir, ich hab den namen des serversockets falsch geschrieben... nun hab ich noch das problem mit der nextLine() die doch eigentlich ind er Scanner Methode sein sollte? genauso wie BufferedReader, Java - Where Do I Find The "java.util.Scanner" (or Equivelent) When | DreamInCode.net hier hab ich auch nur gefunden dass die ab vers 1.5 drinnen sind... ich seehe einfach nicht was ich falsch mache, ich habe jdk auf dem neuesten stand, muss ich mir noch irgendwelche bibliotheken downloaden? oder hab ich sie falsch abgespeichert? = (

Geschrieben

das klingt logisch ^^

hmmm... hab den code vom java ist auch eine insel buch...

wie sieht denn dann die import anweisung aus?

import java.object(.scanner)?

Danke für die Hilfe!

dachte das wäre alles mit dem

import java.io.*;

import java.net.*;

schon gemacht? ^^

Geschrieben

Ja

import java.util.*;

funktioniert nur leider nicht... bzw bekomm ich trotzdem noch den error mit cannot find symbol method nextLine()... obwohl das alles stimmen müsste!

Die nextLine() ist ja auch in der Methode Scanner drinnen... ich versteh garnix mehr = (

Geschrieben

ja eben, hab den nur noch mit import java.util.*; ergänzt... ich kann ihn schon nochmal reinposten ^^

import java.util.*;  

import java.lang.*;  

import java.io.*; 

import java.net.*; 


public class MulServer 

{ 

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

  { 

    ServerSocket server = new ServerSocket( 3141 ); 


    while ( true ) 

    { 

      Socket client = null; 


      try 

      { 

        client = server.accept(); 

        handleConnection ( client ); 

      } 

      catch ( IOException e ) { 

        e.printStackTrace(); 

      } 

      finally { 

        if ( client != null ) 

          try { client.close(); } catch ( IOException e ) { } 

      } 

    } 

  } 


  private static void handleConnection( Socket client ) throws IOException 

  { 

    DataInputStream  in  = new DataInputStream( client.getInputStream() ); 

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


    String factor1 = in.nextLine(); 

    String factor2 = in.nextLine(); 


    out.println(factor1+factor2); 

  } 



}

Geschrieben

türlich! nämlich in den Zeilen

String factor1 = in.nextLine();

und

String factor2 = in.nextLine();

also bei dem link den du mir geschickt hast steht nextLine unter der scanner emthode...

Geschrieben

 

  private static void handleConnection( Socket client ) throws IOException 

  { 

    [B]DataInputStream  in  = new DataInputStream( client.getInputStream() );[/B] 

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


[B]    String factor1 = in.nextLine(); 

    String factor2 = in.nextLine(); [/B]


    out.println(factor1+factor2); 

  } 


Nein, lies deinen Code

Phil

Geschrieben

Du musst eine passende Variable deklarieren und zuweisen. Aber ich denke es ist jetzt nicht sinnvoll Dir die Grundlagen von Java bzw einer Programmiersprache zu erklären. Du solltest Dir zunächst die Grundlagen selbst lernen

Phil

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...