Wichtig für einen Chat?

Status
Nicht offen für weitere Antworten.

Atomic92

Mitglied
Hi
das Thema was ich hier ansprechen will, ist vielleicht etwas umfangreich, aber ich würde es trotzdem gerne ansprechen.
Ich selbst bin ziemlich neu auf dem Gebiet der Netzwerkprogrammierung in Java, habe aber vor mich in Zukunft immer mehr in diese Richtung zu bewegen, da mich das Thema an sich ziemlich reizt.
Deswegen hab ich vor einigen Tagen mit der Programmierung eines Chates angefangen.
Ich kann euch auch hier mal den Quellcode posten, der eigentlich ziemlich kurz ist, was auch der Anlass für meinen Post hier ist.
Wenn ich mir die anderen Chats so angucke, fällt mir immer auf, dass diese mit Threads und allem möglichen arbeiten.
Aber meiner ist halt ziemlich kurz gestrickt und deshalb frage ich, was man alles zu beachten hat.
Ich denke, das dieses Thema auch sehr nützlich für andere User sein kann, da man vielleicht etwas über die Grundlagen zum Programmieren eines Chates lernt.

Hier hab ich mal meinen Quellcode:

Der Launcher um das Programm zu starten

Code:
package fcmm.server.com;

import java.io.IOException;

public class Launcher 
{
	public static void main(String[] args) throws IOException
	{
		//starte den Server
		KleinerServer server = new KleinerServer();
	}
}


Der Server, welcher die Nachrichten abfängt und mit sich die GUI startet.

Code:
package fcmm.server.com;

import java.net.*;
import java.io.*;


public class KleinerServer 
{
	ServerSocket server = new ServerSocket(1234);
	
	Surface sf = new Surface();
	
	String msg;
	
	InputStreamReader input;
	BufferedReader puffer;
	
	
	public KleinerServer() throws IOException
	{
		//starte die GUI
		sf.show();
		
		//Nachrichten abfangen
		while(true)
		{
			Socket client = server.accept();
			
			input = new InputStreamReader(client.getInputStream());
			puffer = new BufferedReader(input);
			
			
			msg = puffer.readLine();
			sf.updateText(msg);
			
			input.close();
		}
	}
}

Der Client, welcher die Nachrichten verschickt.


Code:
package fcmm.server.com;

import java.net.*;
import java.io.*;

public class Client
{
	PrintWriter output;
	
	public Client() throws IOException
	{
		
		Socket server = new Socket("localhost", 1234);
		
		
		output = new PrintWriter(new OutputStreamWriter(server.getOutputStream()));
		
	}
	
	//Nachrichten versenden
	public void senden(String text)
	{
		output.println(text);
		output.flush();
	}
	
}

Die Surface, auf welcher die Eingaben gemacht werden, und angezeigt werden.

Code:
package fcmm.server.com;

import java.awt.*;
import java.awt.event.*;
import java.io.IOException;
import javax.swing.*;

public class Surface extends JFrame implements ActionListener //, KeyListener
{
	JTextArea msgIn;
	JTextField msgOut;
	JButton senden;
	JScrollPane scroll;
	
	Client client; 
	
	
		public void actionPerformed(ActionEvent e)
		{
			String label;
			label = e.getActionCommand();
			
			
			if(label.equals("Senden"))
			{
				send();
			}
			
		}
		
		/*
		public void keyTyped(KeyEvent ke)
		{
			int taste = ke.getKeyCode();
			
			if(taste == KeyEvent.VK_ENTER);
			{
				send();
			}
		}
		
		public void keyReleased(KeyEvent ke)
		{
			
		}
		
		public void keyPressed(KeyEvent ke)
		{
			
		}
		*/
		
		public void send()
		{
			try
			{
				client = new Client();
				client.senden(msgOut.getText());
				msgIn.append("\n");
				msgIn.append("Ich: ");
				msgIn.append(msgOut.getText());
				msgOut.setText("");	
			}
			catch
			(IOException io)
			{
			
			}
		}
	
	public Surface()
	{
		setSize(300,380);
		setLocation(300,300);
		setVisible(true);
		setResizable(false);
		
		
		setLayout(new FlowLayout(FlowLayout.CENTER, 20, 20));
		
		setTitle("Chat");
		
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		msgIn = new JTextArea(null, 10, 20);
		msgIn.setEditable(false);
		msgIn.append("Wilkommen");
		scroll = new JScrollPane(msgIn);
		msgOut = new JTextField(20);
		senden = new JButton("Senden");
		senden.addActionListener(this);
		
		add(scroll);
		add(msgOut);
		add(senden);
		
		//this.addKeyListener(this);
		
		
	public void updateText(String msg)
	{
		StringBuffer text = new StringBuffer();
		text.append("\n");
		text.append("Du: ");
		text.append(msg);
		msgIn.append(text.toString());
		
	}
	
}

Ich hoffe, dass dieses Thema euch anspricht und ihr mir helfen könnt.
MFG
Atomic92
 

Atomic92

Mitglied
Hi
also erstmal danke das man sich mit dem Post überhaupt befasst.
Ich selbst würde gerne wissen, in wie fern ich Threads in dem Chat verwenden kann und darf, da ja theoretisch die Verbindung unterbrochen werden müsse.

Außerdem interresiert mich halt, wie ich am besten die Verbindung aufbauen soll:

also welches Protokoll? TCP/IP ? ...

Und was mich auch noch interessieren würde, ob ich meinen Chat verschlüsseln kann.
Also ob ich z.B. die Daten-Pakette mit SSL oder so verschlüsseln kann.
Oder ob ich den Text selbst chefrieren muss.

Ich wäre aber auch für allen anderen Tipps dankbar.

Ich weiß, dass das alles sehr viel verlangt ist, aber ich hoffe, das der ein oder andere mir in einem der Punkte helfen wird.

MFG
Atomic92
 

Pappenheimer++

Bekanntes Mitglied
In Punkto Threads: Bei solchen Servern gibt es immer zwei Möglichen keiten: Threads oder Non-Blocking-I/O. Eines von beiden brauchst du in jedem Fall, wenn du mehrere Clients bedienen willst (wovon wir hier mal ausgehen). NIO soll performanter sein, aber den Unterschied wirst du wahrscheinlich erst ab ein paar Hundert Clients merken. Was einfacher zu programmieren ist: keine Ahnung! Mit NIO in Java kenne ich mich überhaupt nicht aus. Ich schreibe aber auch gerade nen Chat und den mach ich mit Threads und TCP. Ich bin zwar auch erst am Anfang, aber das grobe Gerüst steht und funktioniert ;)
 

Atomic92

Mitglied
Das was du da oben siehst, also meinen Quellcode, ist auch voll funktionsfähig.
Man muss wohl noch die IP-Adressen im Code ändern, aber das werde ich noch beheben.

Ich hoffe ich bekomme noch auf meine anderen Fragen antwort.

Naja
MFG
Atomic92
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
Kr0e MTU Größe wichtig? Netzwerkprogrammierung 3
M wichtig!! Bitte!! (Nachricht von Server an Client senden) Netzwerkprogrammierung 2
FrankenDerStein HTTP Https Server Bibliothek für Linux und Android gesucht. Netzwerkprogrammierung 7
FrankenDerStein Socket UDP Multithreading für ein Port Netzwerkprogrammierung 2
M Server-Client-System für Browsergame Netzwerkprogrammierung 5
Tobero Java serversocket nicht nur zuganglich für localhost Netzwerkprogrammierung 6
T Brauche Hilfe beim GET-String für HttpURLConnection Netzwerkprogrammierung 4
F Server für Java Applikationen Netzwerkprogrammierung 16
B Webview für Anwendung Netzwerkprogrammierung 7
M Sicheres Login-System für App implementieren Netzwerkprogrammierung 6
J Netty umsetzung für ein Protokoll Netzwerkprogrammierung 1
J ERM für kleine Verwaltungsdatenbank Netzwerkprogrammierung 2
H Machbarkeitsfrage: TCP/IP Client (z.B. Netty) für Java Web Applcation Netzwerkprogrammierung 1
Messoras Launcher für mein Spiel Netzwerkprogrammierung 7
F Einfaches Gateway für Log-Files Netzwerkprogrammierung 1
P RMI - Neue eigene Instanz für jeden Aufruf auf nicht serialisierbares Objekt - wie? Netzwerkprogrammierung 0
P PPTP Protokoll für JAVA Netzwerkprogrammierung 14
T FTP Wie Notwendigkeit für "rekey" klientenseitig detektieren? Netzwerkprogrammierung 3
S Webserver für Jar File Netzwerkprogrammierung 4
G Socket Socket verbindung für Chat System Netzwerkprogrammierung 3
V Templates für Java Client rabbitmq Netzwerkprogrammierung 4
M Erreichbar für alle zu sein Netzwerkprogrammierung 9
M Server nur für eine Aufgabe Netzwerkprogrammierung 2
N Selbes URL Objekt für alle Requests nutzen Netzwerkprogrammierung 7
T uberspace.de als (v)root-Ersatz für kleinere Java-Anwendungen? Netzwerkprogrammierung 12
L Proxy für Dateidownload? Netzwerkprogrammierung 3
K HTTP Eigener Http Response für Datei-Download Netzwerkprogrammierung 4
D Socket Leitstelle für Funkspiel Netzwerkprogrammierung 8
F Java-Beispielcode für Zeroconf (ähnlich Apple Bonjour) Netzwerkprogrammierung 7
I HTTP S - Zertifikate+Cockies für Form-basierten Login Netzwerkprogrammierung 2
Ollek Socket Sucher passende Server/Client Lösung für meine Anwendung Netzwerkprogrammierung 2
M Gleicher Port für Senden und Empfangen ? Netzwerkprogrammierung 17
N RMI Einstellungen für "übers Internet" Netzwerkprogrammierung 8
F SSL-Zertifikate für viele Nutzer? Netzwerkprogrammierung 8
K Byte für Byte aus InputStream lesen Netzwerkprogrammierung 5
S wie stell man die classpath für JARs? Netzwerkprogrammierung 3
M Bestimmte Klassen für Netzwerkchecks gesucht Netzwerkprogrammierung 11
M ClassLoader für Axis2 setzen Netzwerkprogrammierung 15
M Welches Speicherformat für News-Database?? Netzwerkprogrammierung 2
Shoox VPN-Verbindung für Datenbankzugriff Netzwerkprogrammierung 2
P Proxy für Anwendung setzten Netzwerkprogrammierung 3
T Bezeichner "end of line" für die Funktion readline Netzwerkprogrammierung 5
A DataGramsocket Übertragungsproblem im Internet (IPs für Voip) Netzwerkprogrammierung 5
E Userliste für Chat Applet Netzwerkprogrammierung 4
S HTTP Kleines Programm für den Routerneustart Netzwerkprogrammierung 3
L Zeitspanne für erneutes senden Netzwerkprogrammierung 16
L Socket Chat Server für mehrere Clients Netzwerkprogrammierung 7
F Netzwerkprogrammierung für Anfänger Netzwerkprogrammierung 2
J Framework/ Muster für Chat-ähnliches Programm gesucht Netzwerkprogrammierung 2
B Variablen ausrichten für Übertragung Netzwerkprogrammierung 2
D FTP Pfadangabe für ftp-upload funktioniert nicht Netzwerkprogrammierung 5
K Getrennte Rechner für RMI-Server/RMI-Registry, bzw. Alternativen? Netzwerkprogrammierung 5
dayaftereh HTTPCleint und HTMLparser für hTTpBot Netzwerkprogrammierung 2
E Socket Client-Applikation mit GUI für Internet IO-Platine Netzwerkprogrammierung 2
0din Grundlage für Bluetooth Netzwerkprogrammierung 5
N "Jungfernflug" der Socketprogrammierung für ein Mühlespiel Netzwerkprogrammierung 8
F Empfehlung für embedded Webserver Netzwerkprogrammierung 10
W Bibliothek für Certificate Management Protocol (CMP) Netzwerkprogrammierung 3
O Client/Server für Ticker Netzwerkprogrammierung 2
J Stubs für SOAP-Webservice generieren. Ich bekomme es einfach nicht hin... Netzwerkprogrammierung 3
dayaftereh Bester Stream für ein Spiel? Netzwerkprogrammierung 15
data89 Sockets: ein alter Hut - für Euch - für mich nicht! Netzwerkprogrammierung 10
G FileDialog für FTP Client Netzwerkprogrammierung 2
P Welches Protokoll für RMI verwenden? Netzwerkprogrammierung 10
H RCON Tool für Gameserver Netzwerkprogrammierung 11
D Was für Verbindungen mit Socket möglich? Netzwerkprogrammierung 2
S Realisierung eines Netzwerkcodes für ein Strategiespiel Netzwerkprogrammierung 7
G Datagram-Sockets für UDP-Kommunikation Netzwerkprogrammierung 2
W Was für ein Stream soll ich verwenden? Netzwerkprogrammierung 8
A Rezept für Webservices Netzwerkprogrammierung 5
I unc pfad für die klasse file? Netzwerkprogrammierung 4
P eine BufferedReader für alles ankommende Netzwerkprogrammierung 2
T Filter für Input UND OutputStream Netzwerkprogrammierung 4
T Welches Netzwerk ist am bestern für. Netzwerkprogrammierung 2
G server für mein spiel. Netzwerkprogrammierung 5
M Log In Programm für Seiten Netzwerkprogrammierung 2
G Netzwerkprogrammierung für spiele Netzwerkprogrammierung 2
A IRC-Server für das lokale Netzwerk? Netzwerkprogrammierung 12
C Einfacher Filedownload mit Sockets geht nicht für pdffiles Netzwerkprogrammierung 16
S Server für Internetspiel Netzwerkprogrammierung 2
G Objecte für Kommunikation nutzen Netzwerkprogrammierung 2
J Java Programm für Upload von Dateien per HTTP Netzwerkprogrammierung 7
S Voreinstellungen für JavaMail Netzwerkprogrammierung 2
S Idee für Projekt auf Agentenbasis Netzwerkprogrammierung 8
S Suche API für einfachen HTTP-Zugriff. Netzwerkprogrammierung 17
G benötige Beispiel für parallel ablaufende Threads Netzwerkprogrammierung 3
M RMI - Ein Objekt für Alle? Netzwerkprogrammierung 5
Z Protokoll für Schiffeversenken Netzwerkprogrammierung 5
T Kann man jeden Port für Programm verwenden? Netzwerkprogrammierung 2
R proxy für java anwendung angeben [resolved] Netzwerkprogrammierung 15
B Wie Router einstellen für CLient-Server-Programm? Netzwerkprogrammierung 4
R PPTP Protokoll für JAVA Netzwerkprogrammierung 3
Icewind Klasse für DNS Anfragen Netzwerkprogrammierung 14
P Welche Art von Sockets für ein Spiel? Netzwerkprogrammierung 3
M Socket Verbindungen für einen Chat Netzwerkprogrammierung 10
M Ausgangsport für FTp-Connection festlegen??? Netzwerkprogrammierung 3
D beste Methode für Datenübertragung ? Netzwerkprogrammierung 1
F http Post auf einen Grafana Server Netzwerkprogrammierung 3
izoards Mehrere TCP Verbindungen auf einen Server [alles Local] Netzwerkprogrammierung 2
S Java: Anbindung an einen realen Server? (+ Portfreigabe) Netzwerkprogrammierung 8

Ähnliche Java Themen

Neue Themen


Oben