JackBauer8283
Mitglied
Hallo,
ich möchte gern aus einer Textdatei jede Zeile einzeln auslesen und das soll über nen Server laufen.
Momentan sieht mein Server wie folgt aus:
Server:
und der Client so:
Leider wird mir immer nur eine Zeile ausgegeben, mehr nicht. Woran liegt das?
Vielen Dank.
ich möchte gern aus einer Textdatei jede Zeile einzeln auslesen und das soll über nen Server laufen.
Momentan sieht mein Server wie folgt aus:
Server:
Code:
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;
import javax.swing.*;
public class Server
{
public static void main(String[] args)
{
try
{
//Server starten
ServerSocket server = new ServerSocket(1234);
while(true)
{
//warte auf Verbindung
System.out.println("Warte auf Verbindung.");
Socket s = server.accept();
System.out.println("Verbunden.");
(new ServerThread(s)).start();
}
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
class ServerThread extends Thread
{
Socket s;
Socket c;
public ServerThread(Socket s) throws Exception
{
this.s = s;
runServer();
}
void runServer()
{
try
{
c = s;
System.out.println("Verbunden");
System.out.println("Verbunden mit: " + c.getInetAddress() + " Port: " + c.getPort());
lesen(c);
}
catch(Exception e)
{
System.out.println("Server error");
}
}
void lesen(Socket c)
{
try
{
BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream()));
String text = in.readLine();
String [] messagesplit = text.split("§");
String befehl = messagesplit[0];
String nachricht = messagesplit[1];
String befehlanlegen = "anlegen";
String befehlanzeigen = "anzeigen";
String befehlsuchen = "suchen";
if (befehl.equals(befehlanlegen))
{
System.out.println("1");
System.out.println("Befehl: " + befehl);
System.out.println("Nachricht empfangen: " + nachricht);
BufferedWriter outspeichern = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("Prüfpläne.txt", true)));
outspeichern.write(nachricht);
outspeichern.newLine();
outspeichern.flush();
System.out.println("Empfange Nachricht wurde erfolgreich in die Datei 'Prüfpläne.txt' geschrieben.");
outspeichern.close();
}
else if (befehl.equals(befehlanzeigen))
{
System.out.println("2");
System.out.println("Befehl: " + befehl);
BufferedReader inlesen = new BufferedReader(new InputStreamReader(new FileInputStream("Prüfpläne.txt")));
String strAnzeigenLine;
String Test = inlesen.readLine();
for (int i = 0; i >= 3; i++)
{
while((strAnzeigenLine = inlesen.readLine()) != null)
{
strAnzeigenLine = inlesen.readLine();
System.out.println(strAnzeigenLine);
//AnzeigenTabelle.addRow(AnzeigenSplit);
}
}
//String Ausgelesen = inlesen.readLine();
//System.out.println(Ausgelesen);
}
else if (befehl.equals(befehlsuchen))
{
System.out.println("3");
System.out.println("Befehl: " + befehl);
System.out.println("Nachricht empfangen: " + nachricht);
BufferedWriter outsuchen = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
outsuchen.write(nachricht);
outsuchen.newLine();
outsuchen.flush();
System.out.println("Nachricht zurückgesendet.");
outsuchen.close();
}
}
catch(IOException io)
{
io.printStackTrace();
}
}
}
und der Client so:
Code:
package anzeigen; //Paket erstellen
import java.awt.*; //importieren von Paketen und Klassen
import java.awt.event.*;
import java.io.*;
import java.net.*;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
public class Prüfpläneanzeigen extends JFrame //Klasse Prüfpläneanzeigen erbt von Oberklasse JFrame
{
private String[] Spaltennamen = {"Getriebetyp", "Nummer", "Art", "Dokumentiert", "Prüfmittel", "Messbereich", "Prüfablauf", "Prüfergebnis"}; //Deklaration eines Strings
private DefaultTableModel AnzeigenTabelle; //Deklaration eines Tabellenmodels
private JComponent contentPane = (JComponent) getContentPane(); //Deklaration von JComponent für Ereignisabfrage
Prüfpläneanzeigen() //Methode Prüfpläneanzeigen
{
super("Alle Prüfpläne anzeigen"); //Titelleiste wird als Alle Prüfpläne anzeigen bezeichnet
AnzeigenLayout(); //Methode AnzeigenLayout aufrufen
ClientThreadanzeigen ctanzeigen = new ClientThreadanzeigen();
readTable(); //Methode readTable aufrufen
}
void AnzeigenLayout() //Methode AnzeigenLayout
{
contentPane.setLayout(new BorderLayout()); //Variable contentPane wird der BorderLayout zugewiesen
createAnzeigenMenuleiste(); //Methode createMenuleiste aufrufen
AnzeigenTabelle = new DefaultTableModel(null, Spaltennamen); //neues Tabellenmodel wird erstellt
JTable tblAnzeigen = new JTable(AnzeigenTabelle); //neue Tabelle wird erstellt
tblAnzeigen.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS); //passt die Größe der Spalten an
JScrollPane scrollPane = new JScrollPane(tblAnzeigen); //Scrollleiste erstellen
scrollPane.setPreferredSize(new Dimension(785, 500)); //Größe der Tabelle festlegen
JPanel panelAnzeigenTable = new JPanel(); //JPanel erzeugen
panelAnzeigenTable.add("Center", scrollPane); //Scrollleiste Tabelle zuweisen
contentPane.add("West", panelAnzeigenTable); //JPanel auf Fenster ablegen
JButton btnAnzeigenOK = new JButton("OK"); //JButton erzeugen
btnAnzeigenOK.addActionListener(new ActionListener() //JButton Aktion zuweisen
{
public void actionPerformed(ActionEvent e)
{
closeAnzeigenWindow(); //Methode closeAnzeigenWindow aufrufen
}
});
JPanel panelAnzeigenButton = new JPanel(); //JPanel erzeugen
panelAnzeigenButton.add(btnAnzeigenOK); //JButton JPanel zuweisen
contentPane.add("South", panelAnzeigenButton); //JPanel auf Fenster ablegen
}
private void createAnzeigenMenuleiste() //Methode createAnzeigenMenuleiste
{
JMenuBar Anzeigenleiste = new JMenuBar(); //Menuleiste erzeugen
JMenu AnzeigenProgramm = new JMenu("Programm"); //Menu "Programm" erzeugen
JMenuItem AnzeigenEnde = new JMenuItem("Beenden"); //Menupunkt "Beenden" erzeugen
AnzeigenProgramm.add(AnzeigenEnde); //Menupunkt Menu zuweisen
AnzeigenEnde.addActionListener(new ActionListener() //Menupunkt Aktion zuweisen
{
public void actionPerformed(ActionEvent e)
{
closeAnzeigenProgramm(); //Methode closeAnzeigenProgramm aufrufen
}
});
Anzeigenleiste.add(AnzeigenProgramm); //Menu Menuleiste zuweisen
setJMenuBar(Anzeigenleiste); //Menuleiste wird auf Fenster abgelegt
}
void closeAnzeigenProgramm() //Methode closeAnzeigenProgramm
{
System.exit(0); //schließt das komplette Programm
}
void closeAnzeigenWindow() //Methode closeAnzeigenWindow
{
this.setVisible(false); //schließt das Fenster "Alle Prüfpläne anzeigen"
}
protected void readTable() //Methode readTable
{
try
{
BufferedReader Anzeigenreader = new BufferedReader(new FileReader("Prüfpläne.txt")); //auslesen aus Textdatei
String strAnzeigenLine;
String Test = Anzeigenreader.readLine(); //String deklarieren
while((strAnzeigenLine = Anzeigenreader.readLine()) != null) //while-Schleife beginnen
{
String[] AnzeigenSplit = strAnzeigenLine.split(";"); //Text wird bis zum Semikolen abgeschnitten
AnzeigenTabelle.addRow(AnzeigenSplit); //abgeschnittener Text an Tabelle übergeben
}
AnzeigenTabelle.fireTableDataChanged();
JOptionPane.showMessageDialog(null, "Die Datenbank enthält zurzeit " + AnzeigenTabelle.getRowCount() + " Datensätze.", "Information", JOptionPane.INFORMATION_MESSAGE);
}
catch(FileNotFoundException e)
{
JOptionPane.showMessageDialog(null, "Datei 'Prüfpläne.txt' wurde nicht gefunden.", "Fehlermeldung", JOptionPane.ERROR_MESSAGE);
}
catch(IOException e)
{
JOptionPane.showMessageDialog(null, "Sie besitzen keinen Lesezugriff auf die Datei 'Prüfpläne.txt'.", "Information", JOptionPane.INFORMATION_MESSAGE);
}
}
public static void Prfanzeigen() //Methode Anzeigen
{
Prüfpläneanzeigen Anzeigen = new Prüfpläneanzeigen(); //Prüfpläneanzeigen erzeugen
Anzeigen.setLocation(100, 100); //Fenster um 100 Pixel nach rechts und 100 nach unten versetzt
Anzeigen.setSize(800, 600); //Fenstergröße
Anzeigen.setResizable(false); //Fenstergröße nicht veränderbar
Anzeigen.setVisible(true); //Fenster anzeigen
}
}
class ClientThreadanzeigen extends Thread
{
ClientThreadanzeigen()
{
senden();
}
public void senden()
{ try
{
//Socket auf Lokalhost Port 1234 konstruieren
Socket s = new Socket("localhost", 1234);
//etwas über den Socket versenden
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
String anzeigen = "anzeigen§ ";
out.write(anzeigen);
System.out.println("Sende '" + anzeigen + "' an Server Port 1234.");
//Zeilenumbruch senden
out.newLine();
out.flush();
//Writer schließen
out.close();
System.out.println("Beendet.");
}
catch (FileNotFoundException e)
{
e.printStackTrace();
}
catch (IOException io)
{
io.printStackTrace();
}
}
}
Leider wird mir immer nur eine Zeile ausgegeben, mehr nicht. Woran liegt das?
Vielen Dank.