# Chat (Server) sendet an verschieden Benutzer.



## osion (4. Feb 2013)

Ich habe gerade so ein Tutorial gemacht

Er sendet einfach zu der Adresse, welcher er bekommt, sendet er eine Nachricht zurück (der Server).
Im Beispiel habe ich nur einen client, aber wenn, z. B. 2 schreiben, wie kann ich sagem, wer was bekommt?


und der Server sieht so aus:


```
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.nio.Buffer;


public class chat_2013 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		try {
			ServerSocket server=new ServerSocket(5555);
			System.out.println("Server gestartet");
			Socket client = server.accept();
			
			//Streams
			OutputStream out=client.getOutputStream();
			PrintWriter writer=new PrintWriter(out);
			
			InputStream in = client.getInputStream();
			BufferedReader reader=new BufferedReader(new InputStreamReader(in));
			//----
			String s=null;
			
			while((s=reader.readLine())!= null)
			{
				writer.write(s+"\n");
				writer.flush();
				System.out.println("Nachricht von Client: "+s);
			}
			writer.close();
			server.close();
			
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	
	}

}
```


----------



## trööt (4. Feb 2013)

wenn du wenigstens mal dran gedacht hättest das korrekte unterforum zu wählen ... denn BASIC ist hier falsch ... und dann noch dran gedacht hättest dort (NET) die SuFu zu nutzen ... oder mal gleich google nach "java chat" gefragt hättest ... dann hättest du ein paar hundert millionen treffer zu diesem thema gehabt ... viele auf der ersten seite führen dann sogar hier ins java-forum.org oder zu anderen sehr guten tutorials ...

aber da du alleine DAS nicht mal auf die reihe bekommen hast ist eine sinnvolle antwort auf deinen post wohl eher verschwendung von resourcen (um mal auf einen sehr witzigen thread anzuspielen) ... und lässt außerdem vermuten das dir die nötigen grundlagen fehlen um so-etwas wie eine server-client kommunikation überhaupt zu bewerkstelligen ...

mehr kann man dazu eigentlich nicht mehr sagen


----------



## osion (5. Feb 2013)

trööt hat gesagt.:


> wenn du wenigstens mal dran gedacht hättest das korrekte unterforum zu wählen ... denn BASIC ist hier falsch ... und dann noch dran gedacht hättest dort (NET) die SuFu zu nutzen ... oder mal gleich google nach "java chat" gefragt hättest ... dann hättest du ein paar hundert millionen treffer zu diesem thema gehabt ... viele auf der ersten seite führen dann sogar hier ins java-forum.org oder zu anderen sehr guten tutorials ...
> 
> aber da du alleine DAS nicht mal auf die reihe bekommen hast ist eine sinnvolle antwort auf deinen post wohl eher verschwendung von resourcen (um mal auf einen sehr witzigen thread anzuspielen) ... und lässt außerdem vermuten das dir die nötigen grundlagen fehlen um so-etwas wie eine server-client kommunikation überhaupt zu bewerkstelligen ...
> 
> mehr kann man dazu eigentlich nicht mehr sagen



Lieber trööt

Danke für deine Antwort und die Behauptung das ich die SuFu nicht gebrauche. Ich werde jetzt meinen Anwalt wegen Verleugnung einschalten. So etwas kann man einfach nicht unbestraft im Raum stehen lassen.

Im Ernst...Klar brauche ich die SuFu. Ich brauche nicht die vom Forum, sondern die von Google (gepriesen sei mein Gott). Ich glaube nicht, dass ein ganz einfacher Chat, welcher Daten empfängt (Zeichen) und die wieder sendet, die PROJAVAPROGRAMMIERER-Sparte ist.

Zusätzlich ist die Suche für JAVA ANFÄNGER sehr Mühsam, weil entweder die Ergebnisse total der Suche vorbeischiessen, nicht vorhanden, total unbrauchbar oder unnötig (Etwas einfach zu erklären ist auch ne Begabung) kompliziert wird.

Kurz gesagt ich habe die Frage gestellt, weil ich nichts für mich brauchbares gefunden habe und gehofft das mir dazu jemand eine kurze verständliche Antwort geben kann.


Sooo ein klärendes Gespräch am Morgen tut doch richtig gut xD

Ich wünsche dir und dem Rest noch ein schöner Tag =)


Gruss
Beta


p.s. ich war einer der besten im Abschluss Wirtschaft, aber ich habe nie im Leben verstanden was im Buch gestanden ist.


----------



## asdfghjl (5. Feb 2013)

osion hat gesagt.:


> Im Beispiel habe ich nur einen client, aber wenn, z. B. 2 schreiben, wie kann ich sagem, wer was bekommt?


Dazu müsstest Du zumindest die OutputStreams bzw. einen Zugriff auf diese (z.B. per Writer) in einer Liste o.ä. halten. Damit sich überhaupt mehrere Clients mit dem Server verbinden können, muss die Socket Annahme des Servers in einer Schleife in einem separaten Thread passieren. Ausserdem muss das Lesen der InputStreams der einzelnen Clients ebenfalls in separate Threads ausgelagert werden, da das sonst das ganze "System" blockiert wäre.


----------



## osion (5. Feb 2013)

asdfghjl hat gesagt.:


> Dazu müsstest Du zumindest die OutputStreams bzw. einen Zugriff auf diese (z.B. per Writer) in einer Liste o.ä. halten. Damit sich überhaupt mehrere Clients mit dem Server verbinden können, muss die Socket Annahme des Servers in einer Schleife in einem separaten Thread passieren. Ausserdem muss das Lesen der InputStreams der einzelnen Clients ebenfalls in separate Threads ausgelagert werden, da das sonst das ganze "System" blockiert wäre.



Jo habe ich noch gemacht, ein Thread, welcher über den ExecutorService 30 Threads zulässt (also im Beispiel hier dann die Verdindungen).

Danke =)


----------



## tröööt (5. Feb 2013)

@TO
du hast mich komplett falsch verstanden

ich habe angemerkt das dieser thread hier im basics-forum de-platziert ist weil es hier nicht darum geht das du ein anfänger bist ... sondern das du hier etwas mit dem java.net-package vorhast ... und alles was damit in irgendeiner art und weise zu tun hat ist im speziellen netzwerk-forum deutlich besser aufgehoben ...

dessweiteren habe ich , auch wenn für dich scheinbar unverständlich , ausgedrückt das es auch sehr gute "tutorials" gibt ... welche wirklich zeile für zeile ERKLÄREN ... das man natürlich gewisses grundlagen-wissen we z.b. umgang mit streams haben sollte bevor man sich an etwas wie einen chat wagt sollte eigentlich klar sein und wird in der regel vorrausgesetzt ....

es geht nun mal nicht dir einen chat zu erklären ohne das du überhaupt weist wie man richtig mit objekten, streams und vor allem threads umgeht ... sowas gehört in diesem speziellen fall in die schublade : benötigtes vorwissen ... welche sich noch mal in die fächer : grundlagen , datenverarbeitung und parallelität aufteilt ...

und da du selbst sagst du hast den thread hier erstellt weil du ein anfänger bist ... (was wie gesagt so nicht ganz korrekt ist ... denn man wählt das passende sub-forum eigentlich auf grund des themas welches im thread behandelt wird ... und nicht entsprechend seiner begabung oder spezialisierung) ... fehlen dir vermutlich in einigen der genannten fächer einige dinge ... und bevor du diese nicht komplett beisammen hast macht es keinen sinn sich mit dem nächst-höheren thema , eben dem chat , der alles in sich vereint , zu beginnen ...




> Zusätzlich ist die Suche für JAVA ANFÄNGER sehr Mühsam, weil entweder die Ergebnisse total der Suche vorbeischiessen, nicht vorhanden, total unbrauchbar oder unnötig (Etwas einfach zu erklären ist auch ne Begabung) kompliziert wird.


um es mal aus ein ander zunehmen

- "am ziel vorbeischießen" > falsche suchbegriffe

- "nicht vorhanden" > beim großen G eigentlich unmöglich ...

- "total unbrauchbar" > hier hätte ich gerne mal ein beispiel ... klar gibt es code der absoluter müll ist .. aber die eine oder andere zeile kann man aus jedem code mal versuchen auseinander zu nehmen und zu verstehen ...

- "unnötig verkompliziert" > gibt es ... aber meist eher umgekehrt : dem suchenden fehlt schlicht das grundlagen-wissen um den code zu verstehen ...


gehen wir mal auf google ... und geben dort "java chat" ein ... was erhalten wir da so

- java.seite.net/chat/ : ur-altes tutorial mit sehr breiter und ausführlicher erklärung , setzt aber ein gewisses mindest-maß an grundlagen-kenntnissen vorraus ...
direkt erstes suchergebnis bei google ... und als grundlage sicher die seite mit denen die meisten ihre ersten schritte auf diesem gebiet gemacht haben werden ...
wenn du das nicht verstehst ... dann solltest du dir definitiv noch mal ganz von vorne die grundlagen angucken ... ich empfehle hier die Java-Insel sowie die java-bücher von "Michael Seeboerger-Weichselbaum" ... findet man bei amazon oder in jeder besseren bibliothek ... zwar auch mitlerweile hoffnungslos veraltet ... aber um die grundlagen zu lernen ideal ... waren auch meine ersten bücher (sowie weitere von diesem autor) ...

- Java programmieren aus Leidenschaft › ... › Netzwerkprogrammierung
direkt zweiter treffer führt hierher ins netz-forum ... da sollte man mal durchstöbern

2te seite
- stackoverflow.com/questions/.../java-chat-server : stackoverflow ... zwar nicht direkt ein tutorial sondern eine fragestellung zu einem problem .. aber code sieht ganz gut aus


und dann willst du uns wirklich so einen dummen spruch von wegen "für anfänger ungeeignet" an die backe nageln ?
ich kann dir auch n knopf an die backe nähen und n klavier dran hängen ... nur um dir zu demonstrieren wie "schwer" musik sein kann ...

ganz erlich .. von solch lernresistenten möchtegern hobby-entwicklern haben wir hier genug ... wenn man nicht bereit ist sich mal von selbst auf seine vier buchstaben zu setzen ... mal n paar grundalgen zu lernen ... und eine sehr bekannte internetsuchmaschine richtig zu benutzen um selbst mal n paar antworten auf seine anfänger-fragen zu finden .. die es so mit sicherheit zu hauf im netz gibt ... dann sollte man die finger von der programmierung lassen ... denn wer einen computer nicht richtig benutzen kann sollte nicht versuchen ihm vorzuschreiben was er zu tun und zu lassen hat ... denn nichts anderes bedeutet das wort "programmieren" ...


um es dir also noch mal ganz kurz zusammen gefasst zu sagen : LERN GRUNDLAGEN und lies dir bereits lang und breit beantwortete threads mehrmals durch bis du sie verstanden hast .. dann dürften sich sehr viele deiner fragen von selbst beantworten und du lernst was dabei ...

wenn du dann noch konkrete fragen zu konkreten problemen mit konkreten fehlermeldungen und code-stücken hast ... DANN kannst du im entsprechenden forum gerne weiterhin fragen stellen ...

aber herkommen ... irgendein stichwort in den raum werfen und darauf hoffen die community macht das dann schon ... so läufts hier nicht ...

und das sollte man nach gut 30 posts schon gemerkt haben


----------



## Bizarrus (5. Feb 2013)

Zumal sein Problem tagtäglich "irgendjemand" hat und die Frage IMMER WIEDER gleich beantwortet wird:
Server Multithreaded machen und die Clients im Server in einer Map speichern, dann hast du die möglichkeit alle oder auch bestimmt clieten anzusprechen!

Viel spass beim Anwalt wegen der mutmaßlichen "Verleumdung" xD


----------



## osion (5. Feb 2013)

tröööt hat gesagt.:


> @TO
> du hast mich komplett falsch verstanden
> 
> ich habe angemerkt das dieser thread hier im basics-forum de-platziert ist weil es hier nicht darum geht das du ein anfänger bist ... sondern das du hier etwas mit dem java.net-package vorhast ... und alles was damit in irgendeiner art und weise zu tun hat ist im speziellen netzwerk-forum deutlich besser aufgehoben ...




Ob es jetzt ins netzwerk-forum gehört oder hier (Fragen ausschließlich zu Java-Grundlagen, wozu das auch wohl gehört) sei mal dahingestellt.


tröööt hat gesagt.:


> @TO
> 
> - "total unbrauchbar" > hier hätte ich gerne mal ein beispiel ... klar gibt es code der absoluter müll ist .. aber die eine oder andere zeile kann man aus jedem code mal versuchen auseinander zu nehmen und zu verstehen ...
> - "unnötig verkompliziert" > gibt es ... aber meist eher umgekehrt : dem suchenden fehlt schlicht das grundlagen-wissen um den code zu verstehen ...



*total unbrauchba*r sind Ergebnisse, welche, z. B. zu einem Forum, führen und dann sagen die "Kannst du so nicht machen" und somit auf das Thema nicht eingegangen wird.

*"unnötig verkompliziert" * Kennt sicher jeder aus der Schule, es gibt Lehrer die können was verständlich erklären und Leute die machen es unnötig kompliziert. Es ist ein wenig wie Juristendeutsch.

- Java programmieren aus Leidenschaft › ... › Netzwerkprogrammierung
direkt zweiter treffer führt hierher ins netz-forum ... da sollte man mal durchstöbern



tröööt hat gesagt.:


> @TO
> 2te seite
> - stackoverflow.com/questions/.../java-chat-server : stackoverflow ... zwar nicht direkt ein tutorial sondern eine fragestellung zu einem problem .. aber code sieht ganz gut aus



Sicher hast du in deiner Antwort in betracht gezogen, dass nicht alle Leute Arbeitslos, Informatikstudenten oder damit ihr Geld verdinnen. Solche Leute sind manchmal froh wenn Sie nicht 12 h zuerst das Internet nach denn betreffenden Begriff suchen müssen, sondern ein erfahrener kurz sagen kann "mit XY". Ich weiss nachher auch nach was ich suchen muss.

Dir ist ist sicher auch klar, dass ich die Suche sehr intensiv suche (letztlich sogar in einen Post von 2003 geschrieben deswegen). 



tröööt hat gesagt.:


> @TO
> um es dir also noch mal ganz kurz zusammen gefasst zu sagen : LERN GRUNDLAGEN und lies dir bereits lang und breit beantwortete threads mehrmals durch bis du sie verstanden hast .. dann dürften sich sehr viele deiner fragen von selbst beantworten und du lernst was dabei ...
> 
> wenn du dann noch konkrete fragen zu konkreten problemen mit konkreten fehlermeldungen und code-stücken hast ... DANN kannst du im entsprechenden forum gerne weiterhin fragen stellen ...
> ...



Wir haben jetzt sicher alle mehr Zeit damit verschwendet als dass du wie Bizarrus einfach sagst

"Server Multithreaded machen und die Clients im Server in einer Map speichern, dann hast du die möglichkeit alle oder auch bestimmt clieten anzusprechen!"


Gruss =)


p.s. nicht alle haben Leute die Sie damit fragen können (ok ich habe ein Informatik Ingenieur als Bruder, aber mit Bruder fragen ist so ne Sache)


----------



## SlaterB (5. Feb 2013)

osion hat gesagt.:


> Wir haben jetzt sicher alle mehr Zeit damit verschwendet als dass du wie Bizarrus einfach sagst
> 
> "Server Multithreaded machen und die Clients im Server in einer Map speichern, dann hast du die möglichkeit alle oder auch bestimmt clieten anzusprechen!"


sowas als Antwort gut zu finden zeigt eher wie sinnlos die Frage war,
dass es um Threads geht, dass jeder Client für sich arbeitet usw. sind Grundlagen zum Chat die 
a) selbstverständlich sind
b) bei jedem Tutorial/ Beispiel dazu gleich als erstes erwähnt werden
(edit: ok, vielleicht nicht gerade als erstes, aber zentraler Bestandteil, etwa
http://www.java-forum.org/netzwerkprogrammierung/92184-java-chat-selbst-gemacht.html


> Die Connection-Klasse wird vom Chat-Server erzeugt und behandelt die eigentlichen Verbindungen zu den Clients.
> [..]
> Für jede eingegangene Verbindung wird ein eigenes connection-Objekt erzeugt, das diese übernimmt. Es soll als eigenständiger Thread laufen und wird deshalb von der Thread-Klasse abgeleitet.


)

daran zu erinnern ist nichts neues, damit weiterzukommen bedeutet eh schon alles gewußt zu haben

'ich habe keine Ahnung wie ich meinen Taschenrechner programmieren soll?!
- lies Zahlen ein und rechne
- alles klar, nun weiß ich bescheid, danke'
??

erinnert an dieses Thema hier
http://www.java-forum.org/java-basics-anfaenger-themen/147504-server-client-clients-speichern.html


man muss hier nicht weiter diskutieren, bringt eh alles nichts,
und Netzwerk-Bereich wäre schon besser, verschoben 


edit:


osion hat gesagt.:


> Dir ist ist sicher auch klar, dass ich die Suche sehr intensiv suche (letztlich sogar in einen Post von 2003 geschrieben deswegen).


also mir kommt das überhaupt nicht so vor, falls dich meine Meinung beeindruckt


----------



## tröööt (5. Feb 2013)

ob man threads zu grundlagen zählt ... kann man geteilter meinung sein ... ich würd es schon dazu zählen ... aber ich denke wenn es hier um einen chat geht und darum wie man diesen so hinbekommt das er mit mehreren usern umgehen kann gehört zumindest IMO nicht mehr zu einfachen multi-threading-basics ... das ist schon speziell in richtung : multi-user-network-application ... und sowas gehört ins netzwerk forum ...

wenn du fragen direkt zu multi-threading hast ... gleich ob du dich damit dann hierauf beziehen würdest oder nicht wäre es noch was anderes ... aber das war zumindest für mich nicht wirklich die kernaussage deines threads ...

und das nicht jeder arbeitslos ist und somit unendlich viel zeit hat ... oder ein info-student ... oder gar eine ausgelernte fachkraft im IT-sektor ... ja gut ... das verlangt auch keiner ... aber auch wenn man sich nur zum hobby mit programmierung beschäftigt sollte man schon durch aus den willen ... oder besser : die eigeninitiative ... sollte man dennoch mitbringen ... denn man wird im netz kaum wen finden der einem alles lang und breit vorkaut ... schon garnicht weil es bereits alles im netz gibt und überhaupt nicht ohne bezahlung ... ich glaube so viel langeweile hat nicht mal n arbeitsloser

es gibt keinen "richtigen" weg etwas zu lernen ... schon gar nicht programmieren ... aber es gibt empfohlene stufen und reihenfolgen die man für das richtige verständnis schon einhalten sollte ...

es bringt z.b. überhaupt nichts wenn man sich gleich auf einen chat wirft ohne das man z.b. grundlagen über streams hat und wie man mit diesen arbeitet ...
genau so wenig sollte man sowas versuchen wenn man nicht weis was multithreading ist oder probleme damit hat dies richtig anzuwenden ...

man kann nun mal einfach nicht B machen ohne A zu können ... aber genau das versuchst du hier anscheinend ...

deine unfähigkeit genau diesen umstand zu begreifen ... das du grundlagen lernen MUSST ... zeigt das du noch ganz andere probleme hast ...



> total unbrauchbar sind Ergebnisse, welche, z. B. zu einem Forum, führen und dann sagen die "Kannst du so nicht machen" und somit auf das Thema nicht eingegangen wird


aua ... alleine die kombination dieser gegensätze ... das tut beim lesen weh ...

wenn dir jemand die antwort gibt das es so und so eben nicht geht ... dann ist er helfend auf das thema eingegangen ... auch wenn du noch nicht wirklich weist wie es nun besser geht ... weist du zumindest wie man es nicht machen sollte ...

wenn du sowas als "unnötig nicht aufs thema eingegangen" abtust ... dann ist mir schon klar warum du solche probleme hast trotz sehr guter tutorials dinge selbst zu lösen ...



> "unnötig verkompliziert" Kennt sicher jeder aus der Schule, es gibt Lehrer die können was verständlich erklären und Leute die machen es unnötig kompliziert. Es ist ein wenig wie Juristendeutsch


mit "schule" magst du hier sicher noch durch kommen ... aber eigentlich schon im abi ... und vor allem später im studium und ausbildung ... und am ende im beruf ... wird man dich mit dieser einstellung nur noch lächelnd abtun ...

klar gibt es leute die probleme haben sich so zu aritkulieren das es andere leute verstehen ... aber man sollte ab einer gewissen reife schon verlangen können das man sich mal selbst damit beschäftigt und das was man vllt nicht ganz so verstanden hat selbstständig erarbeitet ...

bleistift : im hörsaal schreibt der dotent n thema an die wand ... erklärt n bisschen bruchstückhaft was dazu ... und gibt aufgaben ...
wenn du jetzt kommst nach dem motto : das wurde uns nicht erklärt ... sorry ... 6 , setzen ... denn der lehrer erwartet mit recht das du dich selbst zu hause mal hinsetzt und dich mit dem thema befasst ...

alleine aus dem grund das jeder deutsche bürger das recht auf informationen hat ... und auch wenn man keinen eigenen pc und internetanschluss hat ... (was man sich sogar beim amt mit eben dieser begründung anmelden lassen kann) gibt es immer noch öffentliche einrichtungen wie bibliotheken und universitäten ...

und genau so ist es hier : wenn du was mit java machen willst solltest du dich damit auch shcon mal selbst befassen ... und nicht erwarten das du einfach irgendein projekt starten ... dazu ne frage ins netz stellen und diese von der community beantworten lassen kannst ...

wenn du dann nichts auf die reihe bekommst ist es shclicht und ergreifen deine eigene schuld und dein eigenes problem ...



und auch wenn du witziger weise der meinung bist das man anstatt die zeit mit sowas zu verschwenden es auch kurz auf den punkt hätte bringen können ... so würde dies mit sicherheit nur zum nächsten thread führen bei dem dann wieder fragen gestellt werden die ebenfalls bereits beantwortet wurden ...

lieber nehm ich 10min zeit und mach dir klar das du so zu NULL kommen wirst ... und dich schon mal selbst hinsetzen musst wenn du wirklich was lernen willst ...


aber wie ich schon sagte : mit solche lern-resistenten möchtegern haben wir es hier öfter zu tun .. und die erfahrung zeigt immer wieder : viele geben es entweder ganz auf weil sie irgendwann an einem punkt stehen wo gar nichts mehr geht ... natürlich selbstverschuldet weil man ja bisher der meinung war : ach selbst lernen brauch ich es nich ... oder einige ganz harte spammen dann so lange bis ihnen entweder eine lösung präsentiert wird oder man beginnt sie zu ignorieren ...


denk mal drüber nach anstatt drüber zu flamen ... vielleicht wirst du ja einsichtig und beginnst nun selbst mal grundlagen zu lernen um deine probleme selbst lösen zu können


----------



## chrilux (22. Dez 2013)

Da benutze ich mal die Suchfunktion und finde hier ein völlig bescheuertes Thema....


----------

