Eine Art Chat

Loud Silence

Bekanntes Mitglied
Habe mich an einem Server-Client Socket versucht und folgendes aus Internet zusammengebastelt:


Server
Java:
import java.net.*;
import java.io.*;

public class KleinerServer{
	
	ServerSocket server = new ServerSocket( 1234);
	
KleinerServer() throws IOException {
	while(true) {
		Socket client = server.accept();
		InputStream input = client.getInputStream();
		OutputStream output = client.getOutputStream();
		int x = input.read();
		int y = input.read();
		output.write(x+y);
		output.flush();
		input.close();
		output.close();
	}		
}
public static void main (String [] args) 
{
	try {
		KleinerServer server = new KleinerServer();
	} catch (IOException e) {
		System.out.print(e);
	}
}
}



Client

Java:
import java.net.*;
import java.io.*;
public class Client {

	
	Client() throws IOException {
		Socket server = new Socket ("localhost", 1234);
		InputStream input = server.getInputStream();
		OutputStream output = server.getOutputStream();
		output.write(5);
		output.write(10);
		output.flush();
		System.out.print(input.read());
		server.close();
		input.close();
		output.close();
	}

		public static void main(String[] args) {
			try{
				Client client = new Client();
			}catch (IOException e) {
				System.out.print(e);
				
	}
	

	}

}

Jetzt würde ich aber gerne anstatt Zahlen Strings verschicken.
Da meckert Java aber rum.
Hoffe der Quelltext ist verständlich.
 

Andi_CH

Top Contributor
Mach aus den Zahlen einfach Strings oder kümmere die genauer darum was das "gemeckert" wird.

Ich kann es auf jeden Fall nicht ahnen. (Vielleicht will ich auch nur nicht :D )
 

Andi_CH

Top Contributor
Ich glaube beinahe Java hat ein Problem damit einen int in einem String abzuspeichern - oder was soll die Meldung deiner Meinung nach aussagen ???:L
 

Loud Silence

Bekanntes Mitglied
Dass für diese Methode der Typ String nicht akzeptabel ist.
Das hätte ich gerade noch selber rausgefunden.
Was muss ich anders machen ist die Farge.
 

Volvagia

Top Contributor
Ich konstruiere wenns schnell und einfach werden soll in der Regel einen PrintWriter, der is imho für Anfänger am idealsten, will nichtmal checked Exceptions thrown.
 

Asgar13

Bekanntes Mitglied
Verwandle doch: Von Int zu String, oder musst du später Wörter usw. schicken?

Java:
String abc = variableInteger.toString();

Java:
String x = input.read().toString();

Falls es geht 2teres.
 
Zuletzt bearbeitet:

Loud Silence

Bekanntes Mitglied
Ja x und y sind die vom Client geschickten Zahlen.
Die werden addiert und wieder zurückgeschickt.
Bei der 2. Möglichkeit:
Cannot invoke toString() on the primitive type int

und bei output.write:
The method write(int) in the type OutputStream is not applicable for the arguments (String)
 

Michael...

Top Contributor
read() liefert immer das nächste Byte aus dem InputStream und write(int b) schreibt ein Byte in den OutputStream. Beide liefern bzw. erwarten ein int und int ist nunmal kein String.
Entweder du packst die Streams in einen Reader (z.B. BufferedReader) bzw. Writer (z.B. PrintWriter) oder packst einen DataInput/OutputStream darum, die können mit Strings umgehen. (s. API Doku)
 

Haave

Top Contributor
Der erste Hinweis von Asgar13 funktioniert nicht, da der primitive Datentyp int keine Methode toString() kennt. Du kannst es aber mit der Wrapper-Klasse Integer erreichen:
Java:
Integer.toString(i); //wenn i vom Typ int ist
 

Haave

Top Contributor
Ich versteh grad nicht so richtig, wo das Problem ist. Ein String ist ein String und ein int ist ein int und es gibt Methoden, um das eine in das andere umzuwandeln und umgekehrt. Je nachdem, was du brauchst, setzt du etwas anderes ein. Wenn du Text in eine Variable schreiben willst, nimm einen String, wenn du Ganzzahlen speichern willst, nimm ein int.
Beschreib doch mal mit mehr als drei abgehackten Sätzen, was du willst, wie du es machst und warum es nicht geht.
 

Loud Silence

Bekanntes Mitglied
Ok
Das ist der Code um den es geht:
Java:
int x = input.read();
		Integer.toString(x);
		output.write(x);
Wenn ich jetzt
Java:
x = "Text"
schreibe wird das nicht gehen da x eine Integer ist.
Ich will aber, dass der OutputStream einen Text und keine Zahl ausgibt.
Ich hoffe das ist jetzt verständlich.
 

Haave

Top Contributor
Das hat Michael ja bereits erklärt. Ein java.io_OutputStream nimmt keine Strings an, sondern nur byte-Arrays oder ints. Deiner verwendeten Klasse fehlt schlicht die Möglichkeit, mit dem von dir gewünschten String umzugehen. Einen möglichen Lösungsweg hat Michael ja auch bereits skizziert.
Da wirst du wahrscheinlich nicht drumrum kommen, dir ein paar Grundlagen zu Input und Output in Java durchzulesen.
 

Loud Silence

Bekanntes Mitglied
Wie würde das in meinem Fall dann aussehen.
Hab leider keine Ahnung, auch nach durchlesen diverser Google-Einträge.
Ich will doch einfach nur Buchstaben versenden.
 

Loud Silence

Bekanntes Mitglied
Sprich so:
Java:
PrintWriter p = new PrintWriter(output);
		p.write(x+y);

aber ich kann immer noch nicht
Java:
String x = input.read();

Da will er immer noch eine Integer
 

Michael...

Top Contributor
So wie Du den Output in einem PrintWriter steckst, musst Du auch den Input in einen Reader stecken. Hatte ja mal u.a. BufferedReader erwähnt.

...der mittels readLine() Strings zeilenweise einlesen kann, d.h. allerdings auch, dass Du auf der anderen Seite eine Zeilenumbruch senden musst. Also am besten die println(String) des PrintWriters nutzen an Stelle von write().
 

Haave

Top Contributor
Wenn der TO, wie er schreibt, sich den Code nur irgendwie aus Internetquellen zusammengebastelt hat, wird er wahrscheinlich nicht in der Lage sein, das Vorgeschlagene umzusetzen. Da fehlen wohl einfach Grundlagen.
 

Blindxantos

Aktives Mitglied
hallo.
als wir damals unseren chat geschrieben haben, haben wir anstatt
Java:
output.write(5);
output.write(10);

Java:
out.writeUTF(text);
verwendet. Der übergabewert ist vermutlich nen String, aber das kannst du ja in der javadoku nachschauen.

evtl. hilft dir das. ich hab nie mit .write() gearbeitet..

p.s.: im server musst du dann natürlich readUTF() verwenden, nicht read()


EDIT:
wir haben übrigens
Java:
	private DataInputStream in = null;
	private DataOutputStream out = null;
verwendet, ich glaub als ich deinen code grad überflogen hab, hattest du was anderes:rtfm:
 
Zuletzt bearbeitet:

chindy

Neues Mitglied
Vielleicht:
Java:
String str = x+y + "";
output.print(str);
output.flush();
aber ich würde das alles in funktionen schreiben ;)
 
Zuletzt bearbeitet:

Loud Silence

Bekanntes Mitglied
So hab das jetzt mal wie folgt gelöst:
Server:
Java:
KleinerServer() throws IOException {
	while(true) {
		Socket client = server.accept();
		InputStream input = client.getInputStream();
		OutputStream output = client.getOutputStream();
		BufferedReader br = new BufferedReader(new InputStreamReader ( input ));
		String x = br.readLine();
		PrintWriter p = new PrintWriter(output);
		p.println(x);
		output.flush();
		input.close();
		output.close();
	}		
}


Client:
Java:
Client() throws IOException {
		Socket server = new Socket ("localhost", 1234);
		InputStream input = server.getInputStream();
		OutputStream output = server.getOutputStream();
		PrintWriter p = new PrintWriter(output);
		p.println("HI");
		output.flush();
		BufferedReader br = new BufferedReader(new InputStreamReader ( input ));
		System.out.print(br.readLine());
		server.close();
		input.close();
		output.close();
	}

Aber wen kann es wundern es geht natürlich nicht.
Ist es ein gravierender Fehler?
Hoffe auf konstruktive Vorschläge.
 

Michael...

Top Contributor
Rufe mal flush() am PrintWriter auf und nicht am OutputStream.
Ich würde ausschließlich über den Reader und Writer auf die Streams zugreifen - also auch das close() an der Reader/Writer Instanz aufrufen.

Ich würde das ganze direkt "verschachteln" dann kommst Du gar nicht mehr in die Verlegenheit ausversehen direkt auf die Streamsreferenzen zu zugreifen:
Java:
	while(true) {
		Socket client = server.accept();
		BufferedReader br = new BufferedReader(new InputStreamReader (client.getInputStream()));
		PrintWriter p = new PrintWriter(client.getOutputStream());
		String x = br.readLine();
		p.println(x);
		p.flush();
		
		br.close();
		p.close();
	}
Gleiches gilt natürlich auch für den Client.
 

Loud Silence

Bekanntes Mitglied
Danke schön endlich nach 2 Tagen klappts.
Herzlichen Dank für deine unermüdlichen Bemühungen mir das klar zu machen. :applaus:
Und @Haave:
Man lernt nur indem man sich an etwas versucht was man noch nicht kann.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Welche GUI Library für eine Client Server Chat App Java Basics - Anfänger-Themen 14
Kerstininer Vererbung Hilfe beim lernen von Objektorientierung für eine Klausur Java Basics - Anfänger-Themen 10
K Warum wird hier nur etwas in eine txt Datei geschrieben und nicht in alle drei (InputStream/OutputStream/Reader/Writer) Java Basics - Anfänger-Themen 1
I In unterschiedlichen Applikation Zugriff auf eine gemeinsame Anwendung? Java Basics - Anfänger-Themen 8
D 2 ArrayListen gleich sortieren bzw. eine Liste anhand einer anderen Sortieren Java Basics - Anfänger-Themen 6
T Ich brauche eine Schleife die eine beliebige Zahl so lange durch 10 teilt bis zur Null Java Basics - Anfänger-Themen 5
S Java: Wie sortiere ich eine ArrayList benutzerdefinierter Objekte nach einem bestimmten Attribut? Java Basics - Anfänger-Themen 2
J Eine konzeptionelle Frage zu OOP Java Basics - Anfänger-Themen 3
N Ich kriege ganze zeit die Fehlermeldung "Inhalt der Zwischenablage kann nicht in die ausgewählten Elemente eingefügt werden" hat jemand eine Lösung? Java Basics - Anfänger-Themen 6
M Vergleichen, ob eine Liste länger als andere ist Java Basics - Anfänger-Themen 6
T Methode soll etwas ausrechnen und zurückgeben (klappt nd) hat wer eine Idee? Java Basics - Anfänger-Themen 11
Shadowrunner Variablen Gibt es eine Möglichkeit die Ziffern/Stellen einer Zahl fest zu legen? Java Basics - Anfänger-Themen 3
Kingdako Wie löse ich eine Mathematische Formel mit Arrays und Schleifen? Java Basics - Anfänger-Themen 32
M Datentypen While-Schleife eine Java Methode erstellen Java Basics - Anfänger-Themen 3
G Wie wartet man bis ein URL eine Antwort zurückgibt? Java Basics - Anfänger-Themen 5
berserkerdq2 Intelij, wie kann ich einstellen, dass die aktuelle Klasse ausgeführt wird, wenn ich aufs Startsymbol drücke, gibts da eine Tastenkombination? Java Basics - Anfänger-Themen 11
S 2 Reihen ratio-btn, eine Reihe funktioniert andere nicht Java Basics - Anfänger-Themen 4
T Eingabe durch eine Zahl dividieren nachgucken? Java Basics - Anfänger-Themen 4
M mit Maven eine ausführbare Jar bauen Java Basics - Anfänger-Themen 7
P Java Selenium . Parameterized.Parameters erzeugt eine Fehlermeldung Java Basics - Anfänger-Themen 14
J Zugriff auf eine 2. Klasse die per UI-Designer erstellt wurde Java Basics - Anfänger-Themen 1
M Eine Funktion zuweisen Java Basics - Anfänger-Themen 3
J Eine theoretische Frage zur Praxis - JPanel oder Canvas Java Basics - Anfänger-Themen 5
A Methoden Guten Tag , ich wollte so machen dass wenn meine frog an eine fly/bee geht dann an meine Tafel geht der zahl +1 hoch. Java Basics - Anfänger-Themen 2
A Wie führe ich eine Batch-Datei von meiner Java-Anwendung aus? Java Basics - Anfänger-Themen 18
J Beim Start des Programms zB. eine Linie in JPanel ausgeben Java Basics - Anfänger-Themen 4
L Methoden Eine Methode um zu testen ob es ein Nachbar gibt Java Basics - Anfänger-Themen 10
S Eine Idee umsetzen ganz schnell!? Java Basics - Anfänger-Themen 68
I Grundsatzfrage: Belegt eine Referenz auf 'null' RAM, und wenn ja - wieviel ;-) ? Java Basics - Anfänger-Themen 5
jeff98 Wie kann man in Java eine Zeichenformation ausgeben? Java Basics - Anfänger-Themen 9
K loop pausieren für eine bestimmte Anzahl? Java Basics - Anfänger-Themen 1
_user_q Wie eine Methode/Funktion aus einer Klasse mit Constructor aufrufen? Java Basics - Anfänger-Themen 20
Thomas06 Wie kann man mithilfe von boolean herausfinden ob eine zahl durch 5 und 7 teilbart ist ? Java Basics - Anfänger-Themen 7
M Prüfen on eine Zahl im String enthalten ist Java Basics - Anfänger-Themen 3
U jUnit 5 Test für eine addMethode Java Basics - Anfänger-Themen 18
frager2345 Singleton-Muster Java ->Nur eine Instanz einer Klasse erzeugen können Java Basics - Anfänger-Themen 45
A Eclipse IDE - Wie bekomme ich eine ältere Version Java Basics - Anfänger-Themen 6
F Wie kann ich eine Funktion schreiben, die nur in bestimmten Fällen einen Wert zurückgibt? Java Basics - Anfänger-Themen 5
berserkerdq2 Warum muss man manchmal in der RUnmethode sleep in eine schleife tun? Java Basics - Anfänger-Themen 9
berserkerdq2 Findet eine parallele Verarbeitung in Java bei Threads erst statt, wenn man die Methoden auch synchronized? Und wie sieht bei Conditions aus? Java Basics - Anfänger-Themen 8
berserkerdq2 Wozu benötigt man den BiPredicate, kann ich nicht einfach eine normale Methode nutzen, statt BiPredicate? Java Basics - Anfänger-Themen 3
berserkerdq2 Habe eine Klasse, welche public ist, diese hat eine public Methode, die nicht static ist. Wenn ich nun versuche aufzurufen Probleme? Java Basics - Anfänger-Themen 8
berserkerdq2 Zwei Klassen Erben von der Klasse A, die eine Klasse kann ich an Methoden übergeben, die als Parameter A haben, die andere nicht? Java Basics - Anfänger-Themen 3
berserkerdq2 Sende eine Nachricht an den Client und leere den Ausgabestorm, was ist damit genau gemeint? Java Basics - Anfänger-Themen 3
S Eine Variable in einem Array speichern Java Basics - Anfänger-Themen 5
sserio Prüfen, ob eine Zahl eine periodische Zahl ist Java Basics - Anfänger-Themen 20
L Anpassung der Spaltenbreite auch auf eine zweite Tabelle anwenden Java Basics - Anfänger-Themen 8
NadimArazi Wie kann ich eine collision detection für die Paddles in meinem Pong Programm hinzufügen? Java Basics - Anfänger-Themen 4
JordenJost Java ist auch eine Insel für Anfänger Java Basics - Anfänger-Themen 2
berserkerdq2 Warum soll ich shuffle nutzen, um bei Rückgabewert Collection eine Liste zurückzugeben? Java Basics - Anfänger-Themen 3
berserkerdq2 Ich gebe eine ArrayList als List zurück per MEthode, wie kann ich nun aber die ArrayList speichern? Java Basics - Anfänger-Themen 46
berserkerdq2 Überprüfen ob eine Schreibberechtigung auf ein file exisitert bzw. ob man dieses file löschen kann, wie? Java Basics - Anfänger-Themen 9
sserio Java Fx, wie erstellt man einen EventHandler, der durch das Drücken eines Button Texte in eine Table view einfügt Java Basics - Anfänger-Themen 17
M Eine Methode die erkennt ob die ein gegebene zahl größer oder kleiner sein muss Java Basics - Anfänger-Themen 2
Avalon Warum funktioniert eine Bedingung und eine andere nicht? Java Basics - Anfänger-Themen 2
F Suche nach betreuender Person für eine Jahresarbeit der 12. Klasse. Java Basics - Anfänger-Themen 6
X Hilfe beim Übertragen in eine For-Schleife Java Basics - Anfänger-Themen 1
H Eine Methode über Actionlistener beenden Java Basics - Anfänger-Themen 8
A Wenn eine Zahl durch 7 teilbar ist, soll statt der Zahl ein ‘*‘ angezeigt werden. java? Java Basics - Anfänger-Themen 47
U Warum gibt das eine Nullpointerexception? (Switch) Java Basics - Anfänger-Themen 6
U Warum kriege ich hier eine nullpointer exception, sehe den Fehler nicht (swing) Java Basics - Anfänger-Themen 1
K Warum gibt mir z. B. 40^128 eine Zahl? Ich dachte mit xor kann man nur booleanwerte erhalten, also prüfen ob etwas whar oder falsch ist? Java Basics - Anfänger-Themen 1
M Wie lassen sich Objektkonstanten initialisieren, wenn sie eine Bedingung erreichen? Java Basics - Anfänger-Themen 6
K Präzedenregeln in Java sagen, dass +expr und -expr vor + von Addition und - von Addition stehen, warum wird dann z. B. a+b als eine Addition ausgeführ Java Basics - Anfänger-Themen 7
M Wie schreibe ich eine if-Verzweigung um, so dass ein Bedingungsoperator benutzt wird? Java Basics - Anfänger-Themen 9
M Wie kann eine Methode für ein vorhandenes "Array von char" einen Index-Wert zurückliefern? Java Basics - Anfänger-Themen 3
M Wie kann eine Methode (string) eine andere Methode (void) mit zufälligen int-Werten aufrufen? Java Basics - Anfänger-Themen 4
M Wie verknüpfe ich eine Bedingung mit einer Methode ohne if-Verzweigung & Bedingungsoperator? Java Basics - Anfänger-Themen 2
M Wie kann eine Methode eine andere Methode um Werte wie z.B. 1 erhöhen? Java Basics - Anfänger-Themen 6
B Methoden Rekursiv festellen, ob eine Zahl gerade-oft vorkommt oder nicht Java Basics - Anfänger-Themen 4
M Wie kann ich eine Methode aus einem Interface in eine Klasse implementieren, so dass sie ihre Funktion ausführt? Java Basics - Anfänger-Themen 7
Igig1 Welche Werte sind als default Werte in einem Array, der als Datentyp eine Klasse hat? Java Basics - Anfänger-Themen 1
Kiki01 Wie würde eine geeignete Schleife aussehen, die die relative Häufigkeit für jeden Charakter in einem Text bestimmt? Java Basics - Anfänger-Themen 3
M Wie richte ich eine Diagonale an Robotern in einer World ein? Java Basics - Anfänger-Themen 15
O Wie erstelle ich eine Instanz in einer Klasse für die ich die Instanz will? Java Basics - Anfänger-Themen 4
EchtKeineAhnungManchmal Hallo :) ich bekomme es nicht hin eine Fehlermeldung auszugeben über die GUI Java Basics - Anfänger-Themen 3
S Kann ich eine jar anschauen wie sie gecoded wurde? Java Basics - Anfänger-Themen 2
A Eine Textdatei auslesen Java Basics - Anfänger-Themen 16
A Objekte mit Parametern in eine Liste packen Java Basics - Anfänger-Themen 19
Poppigescorn scan.nextInt() wiederholen bis eine Zahl eingeben wird Java Basics - Anfänger-Themen 7
B Programm, dass alle 3 Tage eine Webseite öffnet? Java Basics - Anfänger-Themen 20
N Variabel in eine class mit "extends JLabel" übertragen Java Basics - Anfänger-Themen 2
C Programm das feststellen kann, ob eine eingegebene Zahl einem Schaltjahr entspricht, richtig geschrieben? Java Basics - Anfänger-Themen 11
Vivien Auf eine Variable von einer anderen Klasse aus zugreifen Java Basics - Anfänger-Themen 3
B eine methode erstellen Java Basics - Anfänger-Themen 7
F Wann ist es eine Instanz und wann nicht? Java Basics - Anfänger-Themen 1
E Warum lässt sich eine Klasse nicht starten, wenn eine andere Klasse in dem Modul fehlerhaft ist? Java Basics - Anfänger-Themen 1
J Alle .java Dateien von einem Verzeichnis in eine Zip speichern Java Basics - Anfänger-Themen 2
H Kann eine while-Schleife ein Programm blockieren? Java Basics - Anfänger-Themen 8
P eine kleine Aufgabe mit Audio Java Basics - Anfänger-Themen 1
O zweidimensionales array in eine csv-Datei Java Basics - Anfänger-Themen 1
P Wie rufe ich Methoden mit einer Referenz auf eine Klasse||Objekt auf Java Basics - Anfänger-Themen 4
Bademeister007 Hallo Leute ich hab eine Frage zur ArrayList Java Basics - Anfänger-Themen 8
M Nach einer erstmaligen Eingabe, eine zweite Eingabe nur noch gegen bestätigung möglich Java Basics - Anfänger-Themen 2
TimoN11 Java - Eine oder mehrere Eingaben möglich machen Java Basics - Anfänger-Themen 6
A Wie schaffe ich das eine while Schleife addiert danach subtrahirt? Java Basics - Anfänger-Themen 1
Y Einfügen in eine doppelt verkettete Liste Java Basics - Anfänger-Themen 8
T Ich habe eine Variabel die nicht Methoden übergreifend ist. Kann mir jemand Helfen :) Java Basics - Anfänger-Themen 5
H Daten aus einer Datei in eine Liste speichern Java Basics - Anfänger-Themen 23
Tino1993 for-Schleife, die eine vorgegebene Anzahl von Zeichen ausgibt Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben