# Einfacher Server/Client



## patrick-ratz (28. Dez 2010)

Hallo und frohe W.
erstmal möchte ich euch heute ein code zeigen den ich vor ein paar tagen im netz gefuneden habe.
er ist ein einfacher CHAT , der mit Java geschrieben wurde 
das problem: wer hat in gemacht? es ist weder name noch Copy-right dran
hier ist er:


```
//Server.java

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

public class Server 
{
 public static void main(String args[]) throws IOException 
 {
  ServerSocket serverSocket = new ServerSocket(6000);
  final Scanner scan = new Scanner(System.in);
  while(true)
  {
   final Socket socket=serverSocket.accept();         
   new Thread(new Runnable()
   {
   public void run()
   {  
   try
   {
    while(true)
   {
    DataInputStream dis = new DataInputStream(socket.getInputStream());
    System.out.println(dis.readUTF());
   }
  }
  catch (Exception ie)
  { }
 }
}).start();
         
new Thread(new Runnable()
{
 public void run()
 { 
  try
 {
  while(true)
 {
  String userInput = scan.nextLine();
  DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
  dos.writeUTF("Server: "+userInput);
 }
 }
 catch (Exception ie)
 {
 }
 }
 }).start();
}//while loop
}//main
}
```


```
//Client.java

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

public class Client 
{
 public static void main(String args[]) throws IOException 
 {
  final Socket socket = new Socket("localhost",6000);            
  final Scanner scan = new Scanner(System.in);            
  new Thread(new Runnable()
  {
//////////////////////////////////////////////////////////
  public void run()
  { 
   try
   {
    while(true)
    {
     String userInput = scan.nextLine();
     DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
     dos.writeUTF("Client: "+userInput);                        
     }             
    
  }
  catch (Exception ie)
  {
  }

  }
  }).start();

//////////////////////////////////////////////////        
  new Thread(new Runnable()
  {
   public void run()
  {
   try
   {
    while(true)
    {
     DataInputStream dis = new DataInputStream(socket.getInputStream());
     System.out.println(dis.readUTF());
    }
   }
 
  catch (Exception ie)
  { }
  }
  }).start();
 }
}
```

der Server muss nur noch mit: javac Server.java erstellt werden
und Client muss nur noch mit: javac Client.java   erstellt werden

- das ganze habe ich mit ner batch datei ausgeführt:


```
@echo off
:start
cls
echo.
echo  1 = Open Server
echo  2 = Open Client
echo  3 = Exit  
echo.
set /p wert= Enter a Number: 

if '%wert%' == '1' Goto start_server
if '%wert%' == '2' Goto start_client
if '%wert%' == '3' Goto exit
goto ende

:start_server
start  java Server
goto ende

:start_client
start java Client
goto ende

:ende
goto start

:exit
exit
```

so: ich hab mir mal folgendes ausgedacht:  server schickt client ein bestimmten text und macht dan folgenges: -öffne notepad:

hier der schnippsel (java profis wissen wo der reinkommen würde,ich auch aber werde ich hier nicht zeigen - weil damit könnte man ..... )


```
if (userInput.equals("open notepad")) 
                         { 
                      
                          dos.writeUTF("Client hacket Server !!! ");
                          try { 
                          Runtime.getRuntime().exec("c:\\windows\\notepad.exe"); 
                          } 
                          catch (Exception rune) {
                          System.out.println(rune);
                          }
```

 - meine frage: kann ich wenn ich den port 6000 offen habe auch über internet auf  den server zu
greifen oder wie kann ich das machen , dass ich miene IP nutzen kann


----------



## MQue (28. Dez 2010)

Welche IP hat dein server (eine private oder eine öffentliche?). Hast du eine IP- Adresse welche mit 10, 172, 192.168 anfängt, dann ist es eine private IP, welche nur intern (im gleichen LAN) erreichbar ist. Solltest du eine öffentliche IP haben, dann schau, dass dir die Firewall nicth den Port (IN und OUT) und die IP blockiert, wenn das gegeben ist dann wirds funktionieren.

Wenn du den Server pingen kannst, heißt das noch nicht, dass es funktioniert (Ping ist auf Layer 4- firewalls können auch auf höheren Layern arbeiten)


----------



## patrick-ratz (28. Dez 2010)

ich sag mal so : im "internen" netzwerk ist mein Server erreichbar -heisst: von mein dad,meinbruder,mir mein laptop - sie sind am im netzwerk"zuhause" eingbunden und haben W-lan und in der Firewall hab ich port 6000 mal aus spass freigegeben


----------



## MQue (28. Dez 2010)

wie gesagt, schau ob deine IP privat oder öffentlcih ist, im eigenen LAN kann man den Server natürlich erreichen, das heißt noch gar nichts im Bezug auf die erreichbarkeit von aussen.


----------



## ARadauer (28. Dez 2010)

> meine frage: kann ich wenn ich den port 6000 offen habe auch über internet auf den server zu
> greifen oder wie kann ich das machen , dass ich miene IP nutzen kann


port forwarding beim router aktivieren...


----------



## patrick-ratz (29. Dez 2010)

ja ich werd mal gucken... muss der client den port auch öffnen oder nur der server  ??

also - server = mein pc
client = freund


----------

