Class ThrServer

java.lang.Object
  extended by java.awt.Component
      extended by java.awt.Container
          extended by java.awt.Window
              extended by java.awt.Frame
                  extended by javax.swing.JFrame
                      extended by ThrServer
All Implemented Interfaces:
java.awt.image.ImageObserver, java.awt.MenuContainer, java.io.Serializable, java.lang.Runnable, javax.accessibility.Accessible, javax.swing.RootPaneContainer, javax.swing.WindowConstants

public class ThrServer
extends javax.swing.JFrame
implements java.lang.Runnable

Die ThrServer Klasse.

Die ThrServer Klasse ist die eigentliche Klasse, die für den Dateiempfang zuständig ist. Gesteuert wird sie von der Server-Klasse, die einzelne Threads von "ThrServer" startet, sobald eine Verbindung eingeht. Mittels den Threads ist es möglich mehrere Instanzen der Klasse zu starten und ein paralleler Dateiempfang von verschiedenen Verbindung ist damit möglich.

See Also:
Runnable (Java API), Serialized Form

Nested Class Summary
 
Nested classes/interfaces inherited from class javax.swing.JFrame
javax.swing.JFrame.AccessibleJFrame
 
Nested classes/interfaces inherited from class java.awt.Frame
java.awt.Frame.AccessibleAWTFrame
 
Nested classes/interfaces inherited from class java.awt.Window
java.awt.Window.AccessibleAWTWindow
 
Nested classes/interfaces inherited from class java.awt.Container
java.awt.Container.AccessibleAWTContainer
 
Nested classes/interfaces inherited from class java.awt.Component
java.awt.Component.AccessibleAWTComponent, java.awt.Component.BaselineResizeBehavior, java.awt.Component.BltBufferStrategy, java.awt.Component.FlipBufferStrategy
 
Field Summary
(package private)  javax.swing.JProgressBar bar
          Eine Progressbar / Prozessbalken, die den Empfangsprozess anzeigt.
(package private)  java.lang.String benutzer
          Der Benutzername auf den Senderrechner wird gespeichert.
(package private)  java.io.BufferedReader br
          Der BufferedReader bekommt den Charakterstrom vom InputStreamReader zugewiesen.
(package private)  java.io.BufferedWriter bw
          Der BufferedWriter erhaelt den Charakterstrom vom OutputStreamWriter.
(package private)  boolean check
          Check Variable die die Entscheidung für den Dateiempfang behandelt.
(package private)  java.net.Socket clientSocket
          Die Eingehende Verbindung wird von der Serverklasse einem Socket zugewiesen, dieser uebergibt diesen und wird den Lokalen zugeordnet.
(package private)  long dateigroesse
          Long Variable die, die aus dem InputStream herausgelesene Dateigroesse der Anfrage enthaelt.
(package private)  java.lang.String dateiname
          Stringvariable die den Dateiname enthaelt, heraus gelesen aus der InputStream, der Anfrage des Senders.
(package private)  java.lang.String eigenerbenutzer
          Stringvariable die den Eigenen Benutzernamen aus dem System liest.
(package private)  boolean erfolg
          Uepruefungsvariable fuer die Komplette Dateiuebertragung.
(package private)  java.io.File file
          Ein File-Objekt wird mittels den Dateiname erstellt.
(package private)  java.io.FileOutputStream fos
          Das File-Objekt wird dem FileOutputStream zugewisen, ein Schreibender Dateistrom auf der Datei.
(package private)  int groessse
          Variable die, die Tatsaechlig geschriebenen Bytes zaehlt, wird benoetigt um uebertragung zu kontrollieren.
(package private)  java.lang.String home
          Stringvariable die das Home-Verzeichnis aus dem Systemliest und dein Seperator anhaengt.
(package private)  java.lang.String hostname
          Der Hostname/Rechnername des Senders wird gespeichert.
(package private)  java.lang.String ipnummer
          Die IP-Adresse des Senders wird gespeichert.
(package private)  java.io.InputStream is
          Der InputStream des Clientockets wird auf dem InputStream gesetzt der ein Bytestrom einliest.
(package private)  java.io.InputStreamReader isr
          Der InputStream kriegt den Bytestrom vom InputStream des Clientsocket, aus dem er dann einen Charakterstrom erzeugt.
(package private)  java.lang.Thread meinThread
          Ein Thread Objekt kriegt den Aktuellen Thread zugewiesen, notwendig ob mit IsInterrupt den Thread zu stoppen.
(package private)  java.lang.String name
          Der Dateiname von der zu Sendenen Datei wird gespeichert.
(package private)  java.io.OutputStream os
          Der Dateistrom wird mittels den OutputStream gleich gesetzt um einen Bytestrom zu schreiben.
(package private)  java.io.OutputStreamWriter osr
          Der OutputStream wird dann wiederum in diesem OutputStreamWriter verpackt.
(package private)  java.lang.String pathname
          Stringvariable die den engültigen Pfad enhaelt wo die zu empfangen Datei gespeichert werden.
(package private)  java.lang.String puffer
          Puffer-String der aus den Dateipfad und den Dateinamen besteht, das File-Objekt bekommt diese Uebergeben.
(package private)  java.util.Scanner sc
          Scanner-Objekt wird benutzt um die Dateigroesse in Int aus den Charakterstrom zu lesen.
(package private)  java.lang.String separator
          Stringvariable die den Dateiseperator Symbol des System beinhaltet.
private static long serialVersionUID
          Routine Serialisierbarkeits ID.
(package private)  java.io.InputStream socketinstr
          InputStream der den InputStream vom Clientsocket zugewiesen bekommt.
(package private)  java.io.OutputStream socketostr
          OutputStream wird auf den OutputStream vom Clientsocket gesetzt.
(package private)  int thrnr
          Thread-Zaehler, nur Testzwecke
(package private)  java.awt.TrayIcon trayIcon
          Das TrayIcon Objekt, wird von der Server-Klasse mittels ByteTaxi-Klasse uebergeben.
 
Fields inherited from class javax.swing.JFrame
accessibleContext, EXIT_ON_CLOSE, rootPane, rootPaneCheckingEnabled
 
Fields inherited from class java.awt.Frame
CROSSHAIR_CURSOR, DEFAULT_CURSOR, E_RESIZE_CURSOR, HAND_CURSOR, ICONIFIED, MAXIMIZED_BOTH, MAXIMIZED_HORIZ, MAXIMIZED_VERT, MOVE_CURSOR, N_RESIZE_CURSOR, NE_RESIZE_CURSOR, NORMAL, NW_RESIZE_CURSOR, S_RESIZE_CURSOR, SE_RESIZE_CURSOR, SW_RESIZE_CURSOR, TEXT_CURSOR, W_RESIZE_CURSOR, WAIT_CURSOR
 
Fields inherited from class java.awt.Component
BOTTOM_ALIGNMENT, CENTER_ALIGNMENT, LEFT_ALIGNMENT, RIGHT_ALIGNMENT, TOP_ALIGNMENT
 
Fields inherited from interface javax.swing.WindowConstants
DISPOSE_ON_CLOSE, DO_NOTHING_ON_CLOSE, HIDE_ON_CLOSE
 
Fields inherited from interface java.awt.image.ImageObserver
ABORT, ALLBITS, ERROR, FRAMEBITS, HEIGHT, PROPERTIES, SOMEBITS, WIDTH
 
Constructor Summary
ThrServer(java.net.Socket socket, java.awt.TrayIcon tray, int c)
          Konstruktor der ThrServer-Klasse.
 
Method Summary
 void run()
          Die run()-Methode, die eigentliche Main Methode dieser Klasse.
(package private)  void verb_abbruch()
          Verbindungsabbruch.
 
Methods inherited from class javax.swing.JFrame
addImpl, createRootPane, frameInit, getAccessibleContext, getContentPane, getDefaultCloseOperation, getGlassPane, getGraphics, getJMenuBar, getLayeredPane, getRootPane, getTransferHandler, isDefaultLookAndFeelDecorated, isRootPaneCheckingEnabled, paramString, processWindowEvent, remove, repaint, setContentPane, setDefaultCloseOperation, setDefaultLookAndFeelDecorated, setGlassPane, setIconImage, setJMenuBar, setLayeredPane, setLayout, setRootPane, setRootPaneCheckingEnabled, setTransferHandler, update
 
Methods inherited from class java.awt.Frame
addNotify, getCursorType, getExtendedState, getFrames, getIconImage, getMaximizedBounds, getMenuBar, getState, getTitle, isResizable, isUndecorated, remove, removeNotify, setCursor, setExtendedState, setMaximizedBounds, setMenuBar, setResizable, setState, setTitle, setUndecorated
 
Methods inherited from class java.awt.Window
addPropertyChangeListener, addPropertyChangeListener, addWindowFocusListener, addWindowListener, addWindowStateListener, applyResourceBundle, applyResourceBundle, createBufferStrategy, createBufferStrategy, dispose, getBufferStrategy, getFocusableWindowState, getFocusCycleRootAncestor, getFocusOwner, getFocusTraversalKeys, getGraphicsConfiguration, getIconImages, getInputContext, getListeners, getLocale, getModalExclusionType, getMostRecentFocusOwner, getOwnedWindows, getOwner, getOwnerlessWindows, getToolkit, getWarningString, getWindowFocusListeners, getWindowListeners, getWindows, getWindowStateListeners, hide, isActive, isAlwaysOnTop, isAlwaysOnTopSupported, isFocusableWindow, isFocusCycleRoot, isFocused, isLocationByPlatform, isShowing, pack, postEvent, processEvent, processWindowFocusEvent, processWindowStateEvent, removeWindowFocusListener, removeWindowListener, removeWindowStateListener, reshape, setAlwaysOnTop, setBounds, setBounds, setCursor, setFocusableWindowState, setFocusCycleRoot, setIconImages, setLocationByPlatform, setLocationRelativeTo, setMinimumSize, setModalExclusionType, setSize, setSize, setVisible, show, toBack, toFront
 
Methods inherited from class java.awt.Container
add, add, add, add, add, addContainerListener, applyComponentOrientation, areFocusTraversalKeysSet, countComponents, deliverEvent, doLayout, findComponentAt, findComponentAt, getAlignmentX, getAlignmentY, getComponent, getComponentAt, getComponentAt, getComponentCount, getComponents, getComponentZOrder, getContainerListeners, getFocusTraversalPolicy, getInsets, getLayout, getMaximumSize, getMinimumSize, getMousePosition, getPreferredSize, insets, invalidate, isAncestorOf, isFocusCycleRoot, isFocusTraversalPolicyProvider, isFocusTraversalPolicySet, layout, list, list, locate, minimumSize, paint, paintComponents, preferredSize, print, printComponents, processContainerEvent, remove, removeAll, removeContainerListener, setComponentZOrder, setFocusTraversalKeys, setFocusTraversalPolicy, setFocusTraversalPolicyProvider, setFont, transferFocusBackward, transferFocusDownCycle, validate, validateTree
 
Methods inherited from class java.awt.Component
action, add, addComponentListener, addFocusListener, addHierarchyBoundsListener, addHierarchyListener, addInputMethodListener, addKeyListener, addMouseListener, addMouseMotionListener, addMouseWheelListener, bounds, checkImage, checkImage, coalesceEvents, contains, contains, createImage, createImage, createVolatileImage, createVolatileImage, disable, disableEvents, dispatchEvent, enable, enable, enableEvents, enableInputMethods, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, getBackground, getBaseline, getBaselineResizeBehavior, getBounds, getBounds, getColorModel, getComponentListeners, getComponentOrientation, getCursor, getDropTarget, getFocusListeners, getFocusTraversalKeysEnabled, getFont, getFontMetrics, getForeground, getHeight, getHierarchyBoundsListeners, getHierarchyListeners, getIgnoreRepaint, getInputMethodListeners, getInputMethodRequests, getKeyListeners, getLocation, getLocation, getLocationOnScreen, getMouseListeners, getMouseMotionListeners, getMousePosition, getMouseWheelListeners, getName, getParent, getPeer, getPropertyChangeListeners, getPropertyChangeListeners, getSize, getSize, getTreeLock, getWidth, getX, getY, gotFocus, handleEvent, hasFocus, imageUpdate, inside, isBackgroundSet, isCursorSet, isDisplayable, isDoubleBuffered, isEnabled, isFocusable, isFocusOwner, isFocusTraversable, isFontSet, isForegroundSet, isLightweight, isMaximumSizeSet, isMinimumSizeSet, isOpaque, isPreferredSizeSet, isValid, isVisible, keyDown, keyUp, list, list, list, location, lostFocus, mouseDown, mouseDrag, mouseEnter, mouseExit, mouseMove, mouseUp, move, nextFocus, paintAll, prepareImage, prepareImage, printAll, processComponentEvent, processFocusEvent, processHierarchyBoundsEvent, processHierarchyEvent, processInputMethodEvent, processKeyEvent, processMouseEvent, processMouseMotionEvent, processMouseWheelEvent, removeComponentListener, removeFocusListener, removeHierarchyBoundsListener, removeHierarchyListener, removeInputMethodListener, removeKeyListener, removeMouseListener, removeMouseMotionListener, removeMouseWheelListener, removePropertyChangeListener, removePropertyChangeListener, repaint, repaint, repaint, requestFocus, requestFocus, requestFocusInWindow, requestFocusInWindow, resize, resize, setBackground, setComponentOrientation, setDropTarget, setEnabled, setFocusable, setFocusTraversalKeysEnabled, setForeground, setIgnoreRepaint, setLocale, setLocation, setLocation, setMaximumSize, setName, setPreferredSize, show, size, toString, transferFocus, transferFocusUpCycle
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 
Methods inherited from interface java.awt.MenuContainer
getFont, postEvent
 

Field Detail

serialVersionUID

private static final long serialVersionUID
Routine Serialisierbarkeits ID.

See Also:
Constant Field Values

file

java.io.File file
Ein File-Objekt wird mittels den Dateiname erstellt.


fos

java.io.FileOutputStream fos
Das File-Objekt wird dem FileOutputStream zugewisen, ein Schreibender Dateistrom auf der Datei.


os

java.io.OutputStream os
Der Dateistrom wird mittels den OutputStream gleich gesetzt um einen Bytestrom zu schreiben.


is

java.io.InputStream is
Der InputStream des Clientockets wird auf dem InputStream gesetzt der ein Bytestrom einliest. (Datei)


socketinstr

java.io.InputStream socketinstr
InputStream der den InputStream vom Clientsocket zugewiesen bekommt. Dieser liefert ein Strom aus Bytes. (Anfrage)


isr

java.io.InputStreamReader isr
Der InputStream kriegt den Bytestrom vom InputStream des Clientsocket, aus dem er dann einen Charakterstrom erzeugt.


br

java.io.BufferedReader br
Der BufferedReader bekommt den Charakterstrom vom InputStreamReader zugewiesen. Dieser kann aus dem Charakterstrom Text herauslesen.


socketostr

java.io.OutputStream socketostr
OutputStream wird auf den OutputStream vom Clientsocket gesetzt. Dieser schreib dann Bytes. (Antwort)


osr

java.io.OutputStreamWriter osr
Der OutputStream wird dann wiederum in diesem OutputStreamWriter verpackt. Dieser Wandelt den Bytestrom in einen Charakterstrom um.


bw

java.io.BufferedWriter bw
Der BufferedWriter erhaelt den Charakterstrom vom OutputStreamWriter. Dieser schreibt ein Text in den Charakterstrom.


clientSocket

java.net.Socket clientSocket
Die Eingehende Verbindung wird von der Serverklasse einem Socket zugewiesen, dieser uebergibt diesen und wird den Lokalen zugeordnet.


ipnummer

java.lang.String ipnummer
Die IP-Adresse des Senders wird gespeichert.


hostname

java.lang.String hostname
Der Hostname/Rechnername des Senders wird gespeichert.


benutzer

java.lang.String benutzer
Der Benutzername auf den Senderrechner wird gespeichert.


name

java.lang.String name
Der Dateiname von der zu Sendenen Datei wird gespeichert.


check

boolean check
Check Variable die die Entscheidung für den Dateiempfang behandelt.


erfolg

boolean erfolg
Uepruefungsvariable fuer die Komplette Dateiuebertragung.


trayIcon

java.awt.TrayIcon trayIcon
Das TrayIcon Objekt, wird von der Server-Klasse mittels ByteTaxi-Klasse uebergeben.


sc

java.util.Scanner sc
Scanner-Objekt wird benutzt um die Dateigroesse in Int aus den Charakterstrom zu lesen.


bar

javax.swing.JProgressBar bar
Eine Progressbar / Prozessbalken, die den Empfangsprozess anzeigt.


separator

java.lang.String separator
Stringvariable die den Dateiseperator Symbol des System beinhaltet.


eigenerbenutzer

java.lang.String eigenerbenutzer
Stringvariable die den Eigenen Benutzernamen aus dem System liest.


puffer

java.lang.String puffer
Puffer-String der aus den Dateipfad und den Dateinamen besteht, das File-Objekt bekommt diese Uebergeben.


home

java.lang.String home
Stringvariable die das Home-Verzeichnis aus dem Systemliest und dein Seperator anhaengt.


pathname

java.lang.String pathname
Stringvariable die den engültigen Pfad enhaelt wo die zu empfangen Datei gespeichert werden.


dateiname

java.lang.String dateiname
Stringvariable die den Dateiname enthaelt, heraus gelesen aus der InputStream, der Anfrage des Senders.


meinThread

java.lang.Thread meinThread
Ein Thread Objekt kriegt den Aktuellen Thread zugewiesen, notwendig ob mit IsInterrupt den Thread zu stoppen.


thrnr

int thrnr
Thread-Zaehler, nur Testzwecke


dateigroesse

long dateigroesse
Long Variable die, die aus dem InputStream herausgelesene Dateigroesse der Anfrage enthaelt.


groessse

int groessse
Variable die, die Tatsaechlig geschriebenen Bytes zaehlt, wird benoetigt um uebertragung zu kontrollieren.

Constructor Detail

ThrServer

public ThrServer(java.net.Socket socket,
                 java.awt.TrayIcon tray,
                 int c)
Konstruktor der ThrServer-Klasse.

bekommt das TrayIcon von der Server Klasse uebergeben, setzt groesse und Position des JFrames fest, Layout wird bestimmt, TrayIcon wird der lokalen Kopie zugewiesen und die JProgressBar wird eingesetzt. Clientsocket wird der lokalen Kopie zugewiesen.

Weitere Informationen sind in der Beschreibung der run()-Methode zulesen.

Parameters:
socket - Clientsocket von der Server Klasse
tray - TrayIcon von der ByteTaxi Klasse
c - Integer-Variable als Zaehler der insgesamt erstellten Threads.
Method Detail

verb_abbruch

void verb_abbruch()
Verbindungsabbruch.

Eine Funktion, die fuer den Verbindungsabbruch sorgt. Ein "false" wird mittels den BufferedWriter geschrieben, falls der Dateiempfang verweigert wurde, und die Funktion bei Verweigern aufgerufen wird. Allgemein wird dann der clientSocket geschlossen.


run

public void run()
Die run()-Methode, die eigentliche Main Methode dieser Klasse.

Die run()-Methode wird ausgefuert, sobald eine Instanz von ThrServer erstellt wird. Wenn eine neue Instanz von ThrServer, also ein Thread gestartet wurde, ist auch eine Verbindung eingegangen die dann dem neu startenden Thread mittels Socketuebergabe Parameter zugeweist wird. Es koennen mehrere Threads der ThrServer parallel gestartet werden. Als Erstes werden Client/Sender (Host der eingehenden Verbindung) Informationen ausgelesen und ausgegeben. Mittels den InputStream werden Informationen ueber die Datei, der Dateiname, die Dateigroesse und der Benutzername des Senders eingelesen. Diese werden mittels OutputStreams vom der Clientklasse gesendet. Der Benutzer (Empfaenger) erhaelt mittels JOptionPane ein Auswahlfenster mit den ganzen empfangenen Information und hat zu entscheiden, ob er den Dateiempfang zustimmt oder nicht (nur zwei Auswahlmoeglichkeiten). Verweigert er den Empfang, wird der Thread mittels der Funktion interrupt() gestoppt. Wenn der Dateiempfang zugestimmt wird, wird mittels den eingelesenen Dateinamen und den vorher festgelegten Pfad ein neues File-Objekt erstellt. Falls jedoch der Dateiname schon existiert, wird mit einem Hinweis und einer Eingabeaufforderung nach einem alternativen Dateinamen gefragt. Von dem InputStream, der einen Bytestrom einliest, werden durch dem OutputStream, der auf einen FileOutputStream gesetzt wird, die empfangenen Bytes in dem neu erstellten File-Objekt geschrieben. Bei Abbruch oder vollstaendiger Uebertragung wird dies mit einem entsprechenden Ballon-Tip in der Taskleiste angezeigt. War die Uebertragung nicht erfolgreich, wird der FileOutputStream geschlossen und die neu angelegte Datei mit den bis dahin empfangenen Bytes wird geloescht, um bei einem erneuten Dateiempfangsversuch keine Komplikationen zu haben. Ein Verbindungsabbruch wird mittels entsprechender Exception gefangen und im Terminal, sowie in der Taskleister als Ballon-Tip angezeigt.

Specified by:
run in interface java.lang.Runnable
See Also:
Runnable (Java API), Thread (Java API)