# Virtuelle Datenübertragung programmieren



## GuestfortheRest (24. Apr 2012)

Guten Tag Leute,
ich beschäftige mich zur Zeit mit dem Problem, dass ich ein virtuelles Netzwerk programmieren will.
Computer (MAC, IP) werden schon automatisch generiert.
Nun würde ich gerne einem Computer A und einem Computer B eine Netzwerkverbindung zuordnen können.

Folgende Gedanken habe ich mir bereits gemacht:


```
private double übertragungsdauer, tatsächlichedatarate;
	
	public void virutalDatatransfer(String IPa, String IPb, double clength, double datarate, File a){
		/*
		 * setze ip a auf "client" und ip b auf "server" 
		 * clength sei die physikalische Länge der Verbindung
		 * datarate sei die maximale Durchsatzrate in MBit/s
		 * File a sei das Paket der Länge n Bits
		 * Nach simulation sollen die Werte in übertragungsdauer und tatsächlichedatarate gespeichert werden
		 */
		
	}
```


Theoretisch müsste man ja einen virtuellen ServerSocket und Socket machen und dann den Datenstrom simulieren und die Zeit messen... 
Nur weiß ich nicht wie ich das in Abhängigkeit mit der Länge und der übergebenen Datenrate implementiert kriege.

Wäre lieb wenn mir da jemand unter die Arme greifen kann


----------



## HoaX (24. Apr 2012)

Wie wäre es wenn du mal eine konkrete Frage stellst? Wo hängt es denn genau? Kennst du die Grundlagen, welche die Geschwindigkeit im Netzwerk beeinflussen? Sollen wir dir da jetzt fertigen Code hin schreiben oder was?


----------



## GuestfortheRest (24. Apr 2012)

Erweiterte Grundlagen in Java sind bei mir durchaus vorhanden.
Mein Problem ist, dass ich nicht weiß inwiefern:

Länge n
Paketlänge x
Datenübertragungsrate y

Auf eine Verbindung einfluss nehmen. Sprich ich bräuchte mal einen Denkanstoss (Formel). 
Schön wäre es auch wenn man eine durchschnittliche Zeitangabe hat wie lange ein Bit pro Meter brauch.

Oder heisst 10 Bit/s, dass auf 1 Meter 10 Bits 1 Sekunde brauchen, kommt mir nämlich sehr falsch vor.


----------



## GuestfortheRest (24. Apr 2012)

Oder gibt es in Java sogar eine vorimplementierte Möglichkeit auf die man zurückgreifen kann?


----------



## HoaX (24. Apr 2012)

Ja, Bit pro Meter ist falsch. Nein, da gib es nichts. Und es ist auch zuviel um es hier kurz zu beschreiben. Am Besten du besorgst dir ein Buch über die Grundlagen und Routing.


----------



## GuestfortheRest (24. Apr 2012)

So hier noch mal ein Pseudocode mit den Gedanken von heute:


```
/* Comp = Computer (mac, ip, ipv4, ipv6, hostname): String
* typ = 10Base-T, 100Base-T ,...
* Der typ beschreibt eben den IEEE Standart der verwendet
* werden soll, mit samt allen Daten die er festlegt.
*/
virtualdatatransfer(Comp a, Comp b, double distanz, typ x){
        Leitung leitunga = new Leitung(x);
	boolean mark = true;
	if (a oder b == null) exit;
	else{
		Erzeuge auf a ein Paket der länge n;
		Setze b in Erwartungshaltung;
		do{
			while( a.paket.length > 0 ){
				if ( Leitung.isEmpty() ){
					Sende ein byte (hier müsste dann der Sendevorgang in Abhängigkeit der Hardwarespezifikationen die simuliert werden sollen implementiert werden);
					reduziere a.paket.length - 1;
				}else{
					warte( bis Leitung frei );
				}
			}
			if (b.empfangenesPaket.length == a.gesendetesPaket.length){
				sende Quittung an a;
			}else{
				mark = false;
			}
		}while(mark == false);
	}
}
```

Es wäre nett wenn man mir helfen könnte (vielleicht eine Methode für SendeEinBye(IEEE)) oder mir Literatur nennen kann wo erklärt wird, wie eine physikalische Verbindung aussieht bzw. wie ein Datenverkehr auf einer physikalischen Leitung aussieht und zwar so detailiert wie möglich.


----------

