# LAN Dateien versenden



## Dark Ranger (11. Oktober 2005)

Also:
Ich will ein Programm schreiben, wo man als erstes mal sich einen Benutzernamen geben muss und danach muss man ein paar Dateien auswählen, diese sollen dann im Netzwerk freigegeben sein, aber nicht so wie bei den Windows Freigaben!
Man muss ausserdem einstellen können, wieviele Personen freigegebene Dateien von einem ziehen dürfen und mit welcher Übertragungsrate, also ungefähr so wie bei Kazaa,Emule usw. halt eben nur für das Netzwerk!
Und man muss halt auch die Freigaben von anderen Benutzern sehen! Wenn es möglich ist, dann sollte auch eine Suchfunktion vorhanden sein, also wenn ein Benutzer zum Beispiel nach dem Freeware Programm "Burn4Free" sucht, dann soll das Programm gucken, ob irgendwer dieses Programm im Netzwerk freigegeben hat und die Ergebnisse dann auflisten! Mit einem Doppelklick soll dann der "Download" starten, sowohl bei der Suche, als auch wenn man nur so ein wenig in den ordnern stöbert und etwas gutes findet!

Könnt ihr mir vielleicht ein paar Tips geben? Ist es überhaupt möglich soetwas zu programmieren? Wonach muss ich suchen?

Danke schonmal im Vorraus! ^^


----------



## Dark Ranger (12. Oktober 2005)

Kann mir keiner ein paar Stichworte sagen?

Ist es überhaupt möglich?


----------



## Shakie (12. Oktober 2005)

Hast du schon mal mit VB über das Netzwerk kommuniziert? Wenn nicht, dann solltest du vielleicht mit einem einfachen Chat-Programm anfangen. Zum Übertragen von Daten übers Internet/LAN gibt es das Winsock-Steuerelement.  
Möglich ist dein Projekt mit VB auf alle Fälle.


----------



## Dark Ranger (12. Oktober 2005)

Ja einen Chat habe ich schon lange programmiert, nur mit der Useranezeige klappt es nicht, aber da weiß ich wo der Fehler liegt, bin bis jetzt aber noch nicht dazu gekommen ihn zu beheben! ^^
Wie mache ich es mit dem Freigeben? Kann ich da einfach Dateien in irgendwelchen Variablen (mit Arrays?) oder so speichern?


----------



## Shakie (12. Oktober 2005)

Du meinst, wie du eine bestimmte Datei über das Netzwerk an einen anderen Pc schickst? Dazu musst du jedes Byte der Datei einlesen und einzeln über das LAN senden. Der Empfänger muss die einzelnen Bytes dann wieder zu einer Datei zusammensetzen.
Das Öffnen einer Datei zum Lesen der einzelnen Bytes geht mit

```
Open "C:\Datei.bla" For Binary Access Read As #Dateinummer
```


----------



## Dark Ranger (12. Oktober 2005)

Es soll ja so sein, dass die User zuerst Dateien freigeben müssen, diese sollen erst dann übertragen werden, wenn ein anderer User nach dieser datei sucht und sie angezeigt bekommen hat, wenn er nun einen Doppelklick ausführt, dann soll die datei übertragen werden!

Das Programm soll halt für viele User gleichzeitig funktionieren!


----------



## Shakie (12. Oktober 2005)

Ja und wo liegt jetzt das Problem?


----------



## Dark Ranger (12. Oktober 2005)

Ich wollte einfach nur fragen, ob ich es so machen kann, dass ich die Freigaben in Variablen speichern kann
Geht es auch irgendwie, dass man komplette Ordner freigeben kann?


----------



## Shakie (13. Oktober 2005)

Dark Ranger hat gesagt.:
			
		

> Ich wollte einfach nur fragen, ob ich es so machen kann, dass ich die Freigaben in Variablen speichern kann


Dafür sind Variablen doch da, oder? Oder verstehe ich dich irgendwie falsch?


			
				Dark Ranger hat gesagt.:
			
		

> Geht es auch irgendwie, dass man komplette Ordner freigeben kann?


Das hängt doch davon ab, wie du dein Programm programmierst.


----------



## Dark Ranger (13. Oktober 2005)

Ich habe halt bis jetzt immer nur Strings usw. übertragen und noch keine Dateien, aber das haste mir ja erklärt! ^^

Was meinst du, ist es besser die freigegebenen Dateien an den Server zu schicken oder sie auf dem Client zu lassen und dann wenn danach gefragt wird, dass sie erst dann über den Server übertragen werden?

Ich habe mal ne Frage: Ist es nicht ziemlich langsam, wenn man die Datei so auseinander nimmt? Oder kann man trotzdem volle 100Mbit/s übertragen (was ja praktisch kaum möglich ist)?


----------



## Shakie (13. Oktober 2005)

Du solltest die Dateien natürlich beim Client liegen lassen. Stell dir vor, jemand gibt eine 2 GB große Datei frei! Dann wäre das Netzwerk erst mal lahmgelegt ^^.
Desweiteren musst du dir das so vorstellen: ein String besteht aus mehreren Zeichen. Jedem Zeichen kann dabei eine eindeutige Nummer von 0 bis 255 zugeteilt werden (es sei denn du programmierst fürs chinesische Windows, dann sinds mehr). (Die Nummern kannst du dir mit der Funktion "vba.Asc(Zeichen)" ausgeben lassen, zu der Funktion gibt es auch tausende von Threads.) Diese Nummer heißt ASCII-Zeichen. Nun ist es so, dass wenn du eine Datei byteweise einließt jedes Byte logischerweise einen Wert von 0 bis 255 annehmen kann (sonst wäre es ja kein Byte).
Und vielleicht klingelt es nun bei dir...
Du ließt also ein Byte der Datei ein und erhälst somit eine Zahl. Diese wandelst du nun in ein Zeichen (dafür gibt es die Funktion "vba.Chr$(Zeichennummer)") und sendest dieses Zeichen als String so wie du es aus einem Chat gewohnt bist an den Empfänger. Der muss die Zeichen dann halt wieder mit "vba.Asc(Zeichen)" in ein Byte zurückwandeln und in eine Datei schreiben.

Das dauert aber recht lange. Deswegen könntest du gleich mehrere Verbindungen zu dem Empfänger aufbauen, indem du mehrere Winsock-Controls lädst. Ich würde dir aber vorschlagen, es erst mal mit einer Verbindung zu probieren. Wenn du das geschafft hast kannst du dir was wegen der Geschwindigkeit überlegen.


----------



## Dark Ranger (13. Oktober 2005)

Danke, dass bringt mich schonmal weiter!
Werde mich dann wieder melden! ^^


----------



## Dark Ranger (15. Oktober 2005)

Ich habe mal ne ganz blöde Frage!
Wie kann ich es machen, dass man z.B. auf einen Command Button drückt und dann dieses Windows Dialog angezeigt bekommt, wo man eine datei auswählen kann?


----------



## Dark Ranger (17. Oktober 2005)

Kann mir irgendjemand mal ein Stichwort zurufen, damit ich mnich darüber schlau machen kann?


----------



## mage (17. Oktober 2005)

Entweder Windows API Funktion 

```
Private Declare Function GetOpenFileName Lib "comdlg32.dll" _
  Alias "GetOpenFileNameA" (pOpenfilename As OPENFILENAME) _
  As Long
```

Oder Du bindest dir unter Projekt -> Komponenten das "Microsoft Common Dialog Control X" ein und zieht dir das OpenFileDialog Control auf dein Formular.


----------



## Dark Ranger (18. Oktober 2005)

```
Option Explicit
Dim Datei1 As Byte

Private Sub Command1_Click()
Dim DateiNr As Integer
DateiNr = FreeFile
With CommonDialog1
.ShowOpen
If Err.Number = 0 Then
Open .FileName For Binary Access Read As #DateiNr
Input #DateiNr, Datei1
Close DateiNr
End If
End With
End Sub
```

Dies ist mein bisjetziger Code!
Ich weiß nicht wo und wie ich es einbauen soll, dass der Code die Datei in einen String verwndelt!


----------



## Dark Ranger (19. Oktober 2005)

Ich bin jetzt schon ein wenig weiter gekommen, aber richtig funktionieren tut es immer noch nicht!

Vielleicht könnt ihr ja mal drüberschauen! ^^


----------



## Dark Ranger (19. Oktober 2005)

Bitte guckt euch denn Code mal an! Ich weiß wirklich nicht woran es liegt!


----------



## Dark Ranger (21. Oktober 2005)

Kann nicht mal wer drübergucken? Es ist doch nur ganz wenig Code!


----------



## Shakie (21. Oktober 2005)

Ließ dir doch einfach mal verschiedene Threads zum Lesen von Dateien durch.


----------



## Dark Ranger (21. Oktober 2005)

Das mache ich schon seit drei Tagen, aber ich finde keinen Fehler!


----------



## Shakie (22. Oktober 2005)

Was sollte dein oben geschriebener Code denn genau machen?

Schau dir dieses Tutorial an, vor allem Kapitel 5: http://www.vb-magazin.de/vblernen/vb6_Dateienerstellen.aspx#ind


----------



## Dark Ranger (22. Oktober 2005)

Man kann eine Datei aussuchen, diese wird dann in eine Variable gespeichert!
Dann kann man sich als server oder als Client "anmelden"! Wenn man connectet ist, dann soll die Datei als String übertragen werden und dort wieder in eine Datei umgewandelt werden!

Habe ich etwa irgendetwas falsch beim öffnen der Dateien gemacht?


----------

