# Client-Server-Programm!



## Baweg (26. Apr 2005)

Hi ich bin noch Anfänger in Java und versuche mich gerade an einem Client-Server-Programm. Habe einen einfachen Client der seinen Namen und dann die Mitteilung schickt. Der Client ist ein Applet wo man die Mitteilung einfach in ein Textfeld eingeben kann. Der Server funktioniert bisher nur in DOS, jedoch möchte ich dadraus auch gerne ein Applet machen, sodass die ankommenden Mitteilungen als Labels angezeigt werden. Alles kompliliert einwandfrei. Der Client funktioniert super. Wenn ich den Server in DOS auf habe kommen die Nachrichten an und der Name steht auch drüber. Nur wenn ich den Server als Applet starte bleibt das Feld leer. Ich stelle meine Quelcodes mal hier rein vllt sieht jemand einen Fehler

*Client:*

```
import java.net.*;
import java.io.*;
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
public class JavaClientF extends Applet implements ActionListener {
TextField eingabe = new TextField("", 20);
String s;
public void init()
{
add(eingabe);
Button b = new Button("abschicken");
b.addActionListener(this);
add(b);
}
public void actionPerformed(ActionEvent e)
{
s = eingabe.getText();
try{
Socket name = new Socket("192.168.2.8",6001);
PrintWriter name1 = new PrintWriter(name.getOutputStream(),true);
name1.println("Name:");
Socket anschluss = new Socket("192.168.2.8",6000);
PrintWriter ausgabe = new PrintWriter(anschluss.getOutputStream(),true);
ausgabe.println(""+s);
}
catch (Exception a) {}
}
}
```
*Server:*

```
import java.net.*;
import java.io.*;
import java.applet.*;
import java.awt.*;
public class JavaServerApp extends Applet{
int a=1;
public void empfangen()
{
try{
ServerSocket anschluss = new ServerSocket(6000);
ServerSocket anschluss1 = new ServerSocket(6001);
while(a==1)
{
Socket lauschen1=anschluss1.accept();
InputStreamReader portLeser1=new InputStreamReader(lauschen1.getInputStream());
BufferedReader ein=new BufferedReader(portLeser1);
String s1 = ein.readLine();
Socket lauschen=anschluss.accept();
InputStreamReader portLeser=new InputStreamReader(lauschen.getInputStream());
BufferedReader ein1=new BufferedReader(portLeser);
String s = ein1.readLine();
Label name = new Label(""+s1);
add(name);
Label text = new Label(""+s);
add(text);
}
}
catch (Exception a) {}
}
}
```


----------



## mightymop (26. Apr 2005)

hallo

also normale applets haben nicht das recht dazu einen serversocket zu öffnen...
sie können lediglich eine verbindung zu jenem rechner aufbauen, von dem sie geladen wurden...
bsp: liegt das applet auf   www.google.de/applet   dann kann das applet nur zu www.google.de eine 
verbindung aufbauen....


anders ist es wenn du das applet signierst... dann hat es mehr rechte.. aber das is ne andere frage 

mfg 

mightymop


----------



## youssef (26. Apr 2005)

habe auch eine Frage : wo hast du die funktion "empfangen" im server aufgerufen ?


----------



## mightymop (26. Apr 2005)

```
.....
.....
Socket lauschen1=anschluss1.accept();  // <<< da nimmt der socket an....
InputStreamReader portLeser1=new InputStreamReader(lauschen1.getInputStream()); //hier wird n Stream erstellt
BufferedReader ein=new BufferedReader(portLeser1);   //und hier der stream nochmals in nen gepufferten             
                                                                                 //stream gepackt...
String s1 = ein.readLine();                  // <<< da liest er vom Socket "lauschen1"

Socket lauschen=anschluss.accept();   // ab hier analog zum obigen mit dem Socket "lauschen" 
InputStreamReader portLeser=new InputStreamReader(lauschen.getInputStream()); 
BufferedReader ein1=new BufferedReader(portLeser); 
String s = ein1.readLine(); 
.....
.....
```


----------



## mightymop (26. Apr 2005)

hm...ich sollt mich ma reggen dann kann ich editieren LOL

ok letzter post war net so besonders hilfreich hatte mich verlesen... 
dachte du meintest an welcher stelle er empfängt ... LÖL


naja egal 

mfg 

mightymop


----------



## Baweg (26. Apr 2005)

@ youssef: ich denke du meinst wo ich die MEthode empfangen aufrufe....naja es ist die erste und einzige Methode in meinem Programm...sie wird automatisch gestartet....

@mightymop: Und wie kann ich signieren? Oder könnte ich den Server auch als Application schreiben nur dann als Frame? Ich will halt von der DOS-Ebene weg und das ganze mit Grafik schmücken....


----------



## SebiB90 (26. Apr 2005)

ich glaub der fehler liegt daran das du das applet erst wieder neu zeichnen musst bevor die labels erscheinen also repaint() benutzen


----------



## mightymop (26. Apr 2005)

[quote="Baweg@mightymop: Und wie kann ich signieren? Oder könnte ich den Server auch als Application schreiben nur dann als Frame? Ich will halt von der DOS-Ebene weg und das ganze mit Grafik schmücken....[/quote]

also erstmal vorweg... n server schreibt man nich mit grafik.. n server soll ein dienstprogramm sein, was im hintergrund läuft... wenn man den dann mit "grafik" kombinieren will musst de dir halt n web-interface oder ne gui dazu basteln, die mittels tcpschnittstelle mit dem server kommuniziert...

der voteil beim dienstprogramm ist, das mans im hintergrund als dienst laufen lassen kann, sowohl unter linux als auch unter windows... wenn man n programm schreibt mit integrierter "grafik", wie du es nennst, dann hast du den nachteil, dass du dich immer erst anmelden musst, um das programm starten zu können.... naja ok bei windows gibts n trick da gehts auch anders aber dafür brauchst windows api kenntnisse...
zumal eine "grafik"lose anwendung von der performance besser ist, was bei einem server nicht unwichtig sein soll...

zum signieren kann ich dir momentan auch nix zu sagen, habs auch nur mal so nebenbei irgendwo gelesen...
sorry

...

mfg 

mightymop


----------



## Baweg (26. Apr 2005)

joa daran hatte ich auch mal gedacht, quasi den Server im Hintergrund laufen zu lassen und dass ein Programm halt nur die empfangen Nachrichten vom Server holt und anzeigt....

Wie kann ich denn ein Programm schreiben, dass die Serverapplikation startet und im Hintergrund laufen lässt und dann die empfangenen Nachrichten anzeigt?
Also wie lad ich in dem einem Programm dann die Klasse vom Server?


----------



## mightymop (26. Apr 2005)

also
1. das mit dem start im hintergrund müsstest über nen windows dienst oder linuxdienst realisieren... (gibts meinesachtens spezielle klassen für zumindest unter c#, bei java weiß ich net genau oder halt über windows api - mit linux habe ich mich diesbezüglich noch nicht beschäftigt...)
also du musst den server als eine solche anwendung implementieren... am leichtesten ists immer erst ne konsolenanwendung zu basteln und wenn fertig daraus nen dienst zu machen.... (müsste eigentlich nur am start was geändert werden...)

2. das programm, womit du quasi den server konfigurierst und steuerst baut ganz normal auch eine tcp verbindung auf und du kommunizierst dann mit ihm mittels eines von dir selbst erstellten protokols bla bla 

mfg 

mightymop


----------

