Mittels BufferedReader Objekte lesen?

Status
Nicht offen für weitere Antworten.

rejo

Mitglied
Hallo!

Hätt da eine Frage bzgl. Streams. Ich versuche gerade ein Chat zu realisieren.
Ich hätt da einen BufferedReader und ein PrintWriter.
Ich versende gerade durch den PrintWriter Strings
Code:
pw.println(new String("bla"))
und lese mit dem BufferedReader durch
Code:
br.readLine();
die Informationen ein. Jedoch würd ich gern Objekte versenden (z.B.: Info über den Empfänger u. Nachricht).

Aber irgendwie gibt es bei BufferedReader keine Methode um Objekte zu lesen.
Könnt mir da jemand weiterhelfen? Danke schon mal im vorraus! :)

Liebe Grüße
rejo
 

byte

Top Contributor
Kleiner Tipp am Rande:

Schreib statt pw.println(new String("bla")) zukünftig einfach nur pw.println("bla"). :roll:
 

rejo

Mitglied
Ich hab schon jetzt eine Woche lang mich geplagt dieses Problem zu lösen! Aber ich bleib immer bei ObjectInputStream und ObjectOutputStream hängen.. :cry:
Könnt mir jemand bitte weiterhelfen... ich hab schon alles mögliche versucht um BufferedReader und PrintWriter auf ObjectInputStream und ObjectOutputStream zu ändern.. aber während der Laufzeit bleibt es immer hängen wenn
Code:
in = new BufferedReader(new InputStreamReader(client.getInputStream()));
steht

Bitte könnt mir jemand das etwas detailierter erklären :(
Oder vielleicht im Code jene Stellen ändern damit ich Objekte versenden kann anstatt Strings :( und etwas kommentieren...
Bitte helft mir :cry:

Liebe Grüße
Rejo :cry:

EDIT: Danke für den Tipp...
 

rejo

Mitglied
Chat.java
Code:
import java.awt.*;
import java.awt.event.*;
import java.net.*;
import java.io.*;
import javax.swing.*;
import javax.swing.event.*;


public class Chat extends JApplet implements Runnable, ActionListener, ListSelectionListener {

	private static final int PORT = 1080;
	private Socket socket;
	private BufferedReader in;
	private PrintStream out;
	private JTextField inputfield;
	private JTextArea outputarea;
	private Thread thread;
	private String recipient ="";
	private JList userlist;
	private JScrollPane scrollpane;
	private JLabel msghere;

	public void run()
	{
		String line;

		try
		{
			while(true)
			{
				line = in.readLine();
				
				if(line!=null){
					outputarea.append(line + "--> " + recipient +'\n' );
					outputarea.setCaretPosition(outputarea.getDocument().getLength());
				}
					
			}
		} catch (IOException e) { say("Verbindung zum Server abgebrochen"); }
	}
	
	public void init()
	{
		userlist = new JList();
		userlist.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
		userlist.addListSelectionListener(this);
		userlist.setBorder(BorderFactory.createEtchedBorder());
		userlist.setFixedCellWidth(100);
		userlist.setSelectionForeground(Color.BLACK);
		userlist.setSelectionBackground(Color.WHITE);
		
		inputfield = new JTextField();
		inputfield.addActionListener(this);
		outputarea = new JTextArea();
		outputarea.setFont( new Font("Dialog", Font.PLAIN, 12));
		outputarea.setEditable(false);
		inputfield.setBackground(Color.white);
		outputarea.setBackground(Color.white);
		scrollpane = new JScrollPane(outputarea);
		scrollpane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
		scrollpane.setWheelScrollingEnabled(true);
		msghere = new JLabel("Nachricht: ");
		msghere.setPreferredSize(new Dimension(80,20));
		inputfield.setPreferredSize(new Dimension(500,20));
		JPanel panel = new JPanel();
		panel.setLayout(new FlowLayout());
		panel.add(msghere);
		panel.add(inputfield);
		setLayout(new BorderLayout());
		add("West", userlist);
		add("South",panel);
		add("Center", scrollpane);
		setBackground(Color.lightGray);
		setForeground(Color.black);
	}
	
	public void start()
	{
		try
		{
			socket = new Socket(this.getCodeBase().getHost(), PORT);
			in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
			out = new PrintStream(socket.getOutputStream());
		} catch (IOException e)
		{
			this.showStatus(e.toString());
			say("Verbindung zum Server fehlgeschlagen!");
			System.exit(1);
		}
		say("Verbindung zum Server aufgenommen...");

		if (thread == null)
		{
			thread = new Thread(this);
			thread.start();
		}
	}
	
	public void stop()
	{
		try
		{
			socket.close();
		} catch (IOException e)
		{
			this.showStatus(e.toString());
		}

		if ((thread !=null) && thread.isAlive())
		{
			thread = null;
		}
	}
	
	public void actionPerformed(ActionEvent e)
	{			
		out.println(inputfield.getText());
		inputfield.setText("");
	}
	
	public void say(String msg)
	{
		outputarea.append("*** "+msg+" ***\n");
	}

	public void valueChanged(ListSelectionEvent arg0) {
		 int index = userlist.getSelectedIndex();

		    if (index != -1) {
		      recipient = (String)userlist.getSelectedValue();
		    }
	}
}

Server.java
Code:
import java.io.*;
import java.net.*;
import java.util.*;

public class Server implements Runnable {
	
	private static final int PORT = 1080;
	private ServerSocket listen;
	private Vector connections;
	private Thread connect;
	
	public Server()
	{
		log("Server wird gestartet...");
		try
		{
			listen = new ServerSocket(PORT);
		} catch (IOException e)
		{
			log("Fehler beim Erzeugen der Sockets:"+e);
			System.exit(1);
		}

		connections = new Vector();

		connect = new Thread(this);
		connect.start();
		log("Server ist funktionsbereit");
	}
	
	public void run()
	{
		try
		{
			while(true)
			{
				Socket client=listen.accept();
				Connection c = new Connection(this, client);
				connections.addElement(c);
				log("Neuer Client ist verbunden: " + client.getInetAddress());
			}
		} catch (IOException e) {
			log("Fehler beim Warten auf Verbindungen:"+e);
			System.exit(1);
		}
	}
	
	public void broadcast(String msg)
	{
		Connection you;

		for (int i = 0; i < connections.size(); i++)
		{
			you = (Connection)connections.elementAt(i);
			you.getOut().println(msg);
		}
	}
	
	public void log(String msg) {
		System.out.println("*** " + msg + " ***");
	}
	
	public static void main(String args[]) {
		new Server();
	}
}

Connection.java
Code:
import java.net.*;
import java.io.*;

public class Connection extends Thread {

	private Socket client;
	private BufferedReader in;
	private PrintStream out;
	private Server server;
	
	public Connection(Server s, Socket c)
	{
		server=s;
		client=c;
		try
		{
			in = new BufferedReader(new InputStreamReader(client.getInputStream()));
			out = new PrintStream(client.getOutputStream());
		} catch (IOException e)
		{
			try { client.close(); } catch (IOException e2) {} ;
			System.err.println("Fehler beim Erzeugen der Streams: " + e);
			return;
		}

		this.start();
	}
	
	public void run()
	{
		String line;

		try
		{
			while(true)
			{
				line=in.readLine();
				if(line!=null)
					server.broadcast(line);
			}
		} catch (IOException e)
		{
			System.out.println("Fehler:" + e);
		}
	}

	public PrintStream getOut() {
		return out;
	}
	
}
 

rejo

Mitglied
Okay hier ist der Code der nicht funktioniert.. also naja "stecken" bleibt...

Chat.java
Code:
import java.awt.*;
import java.awt.event.*;
import java.net.*;
import java.io.*;

import javax.swing.*;
import javax.swing.event.*;


public class Chat extends JApplet implements Runnable, ActionListener, ListSelectionListener {

	private static final int PORT = 1080;
	private Socket socket;
	private ObjectInputStream in;
	private ObjectOutputStream out;
	private JTextField inputfield;
	private JTextArea outputarea;
	private Thread thread;
	private String recipient ="";
	private JList userlist;
	private JScrollPane scrollpane;
	private JLabel msghere;

	public void run()
	{
		Message msg = null;
		Object o = null;
		try
		{
			while(true)
			{
				try {
					o = in.readObject();
				} catch (ClassNotFoundException e) {
					e.printStackTrace();
				}
				
				if(o instanceof Message)
					msg = (Message)o;
				
				
				if(msg!=null){
					outputarea.append(msg.getMessage() + "--> " + recipient +'\n' );
					outputarea.setCaretPosition(outputarea.getDocument().getLength());
				}
					
			}
		} catch (IOException e) { say("Verbindung zum Server abgebrochen"); }
	}
	
	public void init()
	{
		userlist = new JList();
		userlist.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
		userlist.addListSelectionListener(this);
		userlist.setBorder(BorderFactory.createEtchedBorder());
		userlist.setFixedCellWidth(100);
		userlist.setSelectionForeground(Color.BLACK);
		userlist.setSelectionBackground(Color.WHITE);
		
		inputfield = new JTextField();
		inputfield.addActionListener(this);
		outputarea = new JTextArea();
		outputarea.setFont( new Font("Dialog", Font.PLAIN, 12));
		outputarea.setEditable(false);
		inputfield.setBackground(Color.white);
		outputarea.setBackground(Color.white);
		scrollpane = new JScrollPane(outputarea);
		scrollpane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
		scrollpane.setWheelScrollingEnabled(true);
		msghere = new JLabel("Nachricht: ");
		msghere.setPreferredSize(new Dimension(80,20));
		inputfield.setPreferredSize(new Dimension(500,20));
		JPanel panel = new JPanel();
		panel.setLayout(new FlowLayout());
		panel.add(msghere);
		panel.add(inputfield);
		setLayout(new BorderLayout());
		add("West", userlist);
		add("South",panel);
		add("Center", scrollpane);
		setBackground(Color.lightGray);
		setForeground(Color.black);
	}
	
	public void start()
	{
		try
		{
			socket = new Socket(this.getCodeBase().getHost(), PORT);
			in = new ObjectInputStream(socket.getInputStream());
			out = new ObjectOutputStream(socket.getOutputStream());
		} catch (IOException e)
		{
			this.showStatus(e.toString());
			say("Verbindung zum Server fehlgeschlagen!");
			System.exit(1);
		}
		say("Verbindung zum Server aufgenommen...");

		if (thread == null)
		{
			thread = new Thread(this);
			thread.start();
		}
	}
	
	public void stop()
	{
		try
		{
			socket.close();
		} catch (IOException e)
		{
			this.showStatus(e.toString());
		}

		if ((thread !=null) && thread.isAlive())
		{
			thread = null;
		}
	}
	
	public void actionPerformed(ActionEvent e)
	{	
		Message m = new Message();
		m.setMessage(inputfield.getText());
		m.setRecipient("all");
		try {
			out.writeObject(m);
		} catch (IOException e1) {
			e1.printStackTrace();
		}
		inputfield.setText("");
	}
	
	public void say(String msg)
	{
		outputarea.append("*** "+msg+" ***\n");
	}

	public void valueChanged(ListSelectionEvent arg0) {
		 int index = userlist.getSelectedIndex();

		    if (index != -1) {
		      recipient = (String)userlist.getSelectedValue();
		    }
	}
}

Server.java
Code:
import java.io.*;
import java.net.*;
import java.util.*;

public class Server implements Runnable {
	
	private static final int PORT = 1080;
	private ServerSocket listen;
	private Vector connections;
	private Thread connect;
	
	public Server()
	{
		log("Server wird gestartet...");
		try
		{
			listen = new ServerSocket(PORT);
		} catch (IOException e)
		{
			log("Fehler beim Erzeugen der Sockets:"+e);
			System.exit(1);
		}

		connections = new Vector();

		connect = new Thread(this);
		connect.start();
		log("Server ist funktionsbereit");
	}
	
	public void run()
	{
		try
		{
			while(true)
			{
				Socket client=listen.accept();
				Connection c = new Connection(this, client);
				connections.addElement(c);
				log("Neuer Client ist verbunden: " + client.getInetAddress());
			}
		} catch (IOException e) {
			log("Fehler beim Warten auf Verbindungen:"+e);
			System.exit(1);
		}
	}
	
	public void broadcast(Message msg)
	{
		Connection you;

		for (int i = 0; i < connections.size(); i++)
		{
			you = (Connection)connections.elementAt(i);
			try {
				you.getOut().writeObject(msg);
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
	
	public void log(String msg) {
		System.out.println("*** " + msg + " ***");
	}
	
	public static void main(String args[]) {
		new Server();
	}
}

Connection.java
Code:
import java.net.*;
import java.io.*;

public class Connection extends Thread {

	private Socket client;
	private ObjectInputStream in;
	private ObjectOutputStream out;
	private Server server;
	
	public Connection(Server s, Socket c)
	{
		server=s;
		client=c;
		try
		{
			in = new ObjectInputStream(client.getInputStream());
			out = new ObjectOutputStream(client.getOutputStream());
		} catch (IOException e)
		{
			try { client.close(); } catch (IOException e2) {} ;
			System.err.println("Fehler beim Erzeugen der Streams: " + e);
			return;
		}

		this.start();
	}
	
	public void run()
	{
		Message msg = null;
		Object o = null;

		try
		{
			while(true)
			{
				try {
					o = in.readObject();
				} catch (ClassNotFoundException e) {
					e.printStackTrace();
				}
				
				if(o instanceof Message)
					msg = (Message)o;
				
				if(msg!=null)
					server.broadcast(msg);
			}
		} catch (IOException e)
		{
			System.out.println("Fehler:" + e);
		}
	}

	public ObjectOutputStream getOut() {
		return out;
	}
	
}

Message.java
Code:
public class Message {

	private String message;
	private String recipient;
	
	public Message() {
		message = null;
		recipient = null;
	}
	
	public Message(String msg, String rec) {
		message = msg;
		recipient = rec;
	}

	public String getMessage() {
		return message;
	}

	public void setMessage(String message) {
		this.message = message;
	}

	public String getRecipient() {
		return recipient;
	}

	public void setRecipient(String recipent) {
		this.recipient = recipent;
	}
	
}

Danke :)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
A TCP multiClientServer mit socket mittels ObjectOutputStream Netzwerkprogrammierung 12
windl AirPlay mittels Java Netzwerkprogrammierung 0
vandread Zugriff auf Soziales Netzwerk mittels Java? Netzwerkprogrammierung 4
M HTTP HTTPS-Verbindung mittels Java und Javascript Netzwerkprogrammierung 2
C SingleSignOn auf Client mittels Windows Credentials Netzwerkprogrammierung 11
M Dateiupload mittels HttpClient Netzwerkprogrammierung 3
S SSH-Connection - Auto-Vervollständigung mittels TAB Netzwerkprogrammierung 4
L Socket publicKey mittels DatagramPacket übertragen Netzwerkprogrammierung 8
R Sicherheit bei entferntem Methodenaufruf mittels RMI Netzwerkprogrammierung 4
M Bestimmung der Netzwerkklasse mittels IP-Adresse Netzwerkprogrammierung 3
P Textdateien aus Oracle-DB mittels Java auslesen und öffnen Netzwerkprogrammierung 7
S Mittels Java XML abfragen und nicht die Ausgabe-HTML-Datei Netzwerkprogrammierung 5
J Antwort eines Soaprequests parsen mittels org.apache.soap Netzwerkprogrammierung 2
I http:GET mittels Socket liefert selsame Zeichenfolgen. Netzwerkprogrammierung 4
D txt Datei auslesen mittels URL Netzwerkprogrammierung 7
thE_29 Host mittels IP bekommen? Netzwerkprogrammierung 7
M HTTP URLConnection + BufferedReader killt meine Umlaute Netzwerkprogrammierung 4
x46 byte[] über BufferedReader auslesen Netzwerkprogrammierung 18
X Socket [Anfänger] BufferedReader.readLine() lässt sich Zeit Netzwerkprogrammierung 1
B Socket BufferedReader.readLine() beenden ohne den Stream zu closen Netzwerkprogrammierung 7
C Socket BufferedReader.read(char[] buffer) blockiert unregelmäßig Netzwerkprogrammierung 3
J BufferedReader.ready() wird nicht true Netzwerkprogrammierung 10
A Socket BufferedReader.readLine() blockiert bis ein im Socket OutputStream was gesendet wird ... Netzwerkprogrammierung 9
V Socket BufferedReader interrupten? Netzwerkprogrammierung 10
B Multi-Threaded block bei BufferedReader.readLine() Netzwerkprogrammierung 8
S BufferedReader blockiert zu lange Netzwerkprogrammierung 4
P eine BufferedReader für alles ankommende Netzwerkprogrammierung 2
C 2 BufferedReader als Listener pro Socket (NICHT) möglich? Netzwerkprogrammierung 2
E BufferedReader.ready() immer false Netzwerkprogrammierung 8
AlClemento Sockets -> BufferedReader Problem Netzwerkprogrammierung 2
C Kollision von ObjectInputStream und BufferedReader ? Netzwerkprogrammierung 6
O BufferedReader.readline kommt nicht zurück Netzwerkprogrammierung 7
F BufferedReader Socket Netzwerkprogrammierung 2
B BufferedReader.readLine() ließt nicht vollständig ! ? Netzwerkprogrammierung 5
J Vom BufferedReader lesen -> hängt ohne Fehler,ohne Except Netzwerkprogrammierung 2
T JSON-Objekte richtig parsen Netzwerkprogrammierung 8
L Socket Wie kann man in Java die Anzahl der Objekte in einem InputStream sehen ohne ihn durchgehen zu müssen Netzwerkprogrammierung 1
E Objekte versenden, Client-Server Netzwerkprogrammierung 25
A RMI RMI - Thread Objekte übertragen und auf anderer Machine weiterlaufen lassen Netzwerkprogrammierung 0
C List Deserialisierung entfernt Objekte Netzwerkprogrammierung 2
F HTTP Serialisierte Objekte aus Datei von Server Netzwerkprogrammierung 1
H Socket Objekte über Socket? Allgemeine Verständnisprobleme in Sachen Socket Netzwerkprogrammierung 3
V Socket Objekte werden nicht aktualisiert Netzwerkprogrammierung 2
S Socket Über UDP Objekte verschicken Netzwerkprogrammierung 9
B Eigene Objekte per RMI übergeben Netzwerkprogrammierung 2
S Kapselung der Netz-Objekte Netzwerkprogrammierung 3
B verschiedene Serialisierte Objekte identifizieren? Netzwerkprogrammierung 5
T Objekte im NIO unblocking mode versenden Netzwerkprogrammierung 11
C Socket ObjectInputStream liest nur Objekte der jeweiligen Programminstanz Netzwerkprogrammierung 5
G Frage zu Servlets und deren Objekte + Bilder in Servlets anzeigen? Netzwerkprogrammierung 11
G Objekte per TCP verschicken + Thread Netzwerkprogrammierung 4
T Laufen Objekte, die vom Cajo-Server geliefert werden, lokal auf dem Client? Netzwerkprogrammierung 4
T Inputstream -> verschiedene Objekte lesen Netzwerkprogrammierung 3
I Objekte über das Netzwerk Netzwerkprogrammierung 5
M Messenger - String oder Objekte Netzwerkprogrammierung 4
S Netzwerk und Objekte Netzwerkprogrammierung 5
S RMI 1.) Entfernte Objekte "Zwischenspeichern" 2.) Threadsicherheit Netzwerkprogrammierung 2
T rmi ssl zu große Objekte übergeben -> Exception Netzwerkprogrammierung 10
A Konflikt: Blocking und Non-Blocking bei Objekte versenden Netzwerkprogrammierung 4
N RMI und Datenbank Objekte Netzwerkprogrammierung 3
P Objekte über DatagramSocket versenden Netzwerkprogrammierung 12
M Objekte senden zwischen Java und PHP mit SOAP Netzwerkprogrammierung 9
A Objekte in übergebenen Objekten mit WebServices? Netzwerkprogrammierung 6
A RMI wie kann ich objekte übergeben? Netzwerkprogrammierung 5
P Serialialiserte Objekte übers Netzwerk verschicken Netzwerkprogrammierung 9
S Objekte zwischen Client und Server über Sockets senden Netzwerkprogrammierung 2

Ähnliche Java Themen


Oben