alfray Geschrieben 9. Februar 2009 Geschrieben 9. Februar 2009 (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 9. Februar 2009 von alfray Zitieren
alfray Geschrieben 9. Februar 2009 Autor Geschrieben 9. Februar 2009 (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 9. Februar 2009 von alfray Zitieren
flashpixx Geschrieben 10. Februar 2009 Geschrieben 10. Februar 2009 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 Zitieren
alfray Geschrieben 10. Februar 2009 Autor Geschrieben 10. Februar 2009 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? Zitieren
flashpixx Geschrieben 10. Februar 2009 Geschrieben 10. Februar 2009 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 Zitieren
alfray Geschrieben 11. Februar 2009 Autor Geschrieben 11. Februar 2009 is gut, danke für alle die so was ähnliches vorhaben, habe ich hier noch ein gutes Tut gefunden: Writing the Server Side of a Socket (The Javaâ„¢ Tutorials > Custom Networking > All About Sockets) (englisch) hilft aber wirklich weiter... ich hab hier nur noch Sprechen sie Java rumliegen, da wird man wohl nix drin finden? werd mir das jetzt mal durchschaun, Danke! Zitieren
alfray Geschrieben 11. Februar 2009 Autor Geschrieben 11. Februar 2009 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) Zitieren
flashpixx Geschrieben 11. Februar 2009 Geschrieben 11. Februar 2009 Bitte setz Dich einmal mit der Grundstruktur von Java auseinander. Ich gehe davon aus, dass Du einen import vergessen hast, aber Du postest keinen Quellcode Phil Zitieren
alfray Geschrieben 12. Februar 2009 Autor Geschrieben 12. Februar 2009 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... Zitieren
flashpixx Geschrieben 12. Februar 2009 Geschrieben 12. Februar 2009 also, wenn ich schreibe ich hab jdk 5 und dann darunter schreibe das er die Methode Scanner nicht findet... egal Scanner (Java 2 Platform SE 5.0) Das nächste mal selbstständig suchen, erster Eintrag bei Google Phil Zitieren
alfray Geschrieben 12. Februar 2009 Autor Geschrieben 12. Februar 2009 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 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? Zitieren
flashpixx Geschrieben 12. Februar 2009 Geschrieben 12. Februar 2009 ^^ auf die Idee würd ich ja nie kommen und was genau hast du bei google eingegeben? das hier hab ich nämlich gefunden: java scanner - Google-Suche Aber generell: Java ist von Sun, d.h. die zuverlässigste Quelle ist eben Sun selbst. Phil Zitieren
alfray Geschrieben 13. Februar 2009 Autor Geschrieben 13. Februar 2009 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? = ( Zitieren
flashpixx Geschrieben 13. Februar 2009 Geschrieben 13. Februar 2009 In Deinem Code fehlt die Import Anweisung Phil Zitieren
alfray Geschrieben 13. Februar 2009 Autor Geschrieben 13. Februar 2009 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? ^^ Zitieren
flashpixx Geschrieben 13. Februar 2009 Geschrieben 13. Februar 2009 schau Dir doch mal die Ableitung an, steht direkt unter "Class Scanner", bzw es steht klein darüber. Phil Zitieren
alfray Geschrieben 13. Februar 2009 Autor Geschrieben 13. Februar 2009 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 = ( Zitieren
flashpixx Geschrieben 13. Februar 2009 Geschrieben 13. Februar 2009 Ohne Code kann man nicht helfen. Aber, wie Du schon sagst, nextline gehört zu Scanner, dann schau Dir mal Deinen Code, den Du gepostet hast an Phil Zitieren
alfray Geschrieben 13. Februar 2009 Autor Geschrieben 13. Februar 2009 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); } } Zitieren
flashpixx Geschrieben 13. Februar 2009 Geschrieben 13. Februar 2009 In Deinem Code wird keine Objekt vom Typ Scanner verwendet! Phil Zitieren
alfray Geschrieben 13. Februar 2009 Autor Geschrieben 13. Februar 2009 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... Zitieren
flashpixx Geschrieben 13. Februar 2009 Geschrieben 13. Februar 2009 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 Zitieren
alfray Geschrieben 13. Februar 2009 Autor Geschrieben 13. Februar 2009 Und wie mach ich dass dann das er die nextLine erkennt? Ich versteh das nicht, die steht doch hier Scanner (Java 2 Platform SE 5.0)) unter der Scanner klasse?!? Zitieren
flashpixx Geschrieben 13. Februar 2009 Geschrieben 13. Februar 2009 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 Zitieren
Empfohlene Beiträge
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.