Filer over netværk

Tags:    visual-basic

User
Bruger #962 @ 21.03.02 22:04
Hej Alle

Jeg kunne godt tænke mig et par forslag til hvordan jeg kan sende hele filer over et netværk.
Jeg er ved at lave et program der er har både en server side og en client side, det er i det program jeg gerne vil kunne sende filer...

Der er naturligvis Up for et godt eksempel, gerne md kode! :D

"10 ryk i banditten er bedre end 10 banditter på ryggen"



1 svar postet i denne tråd vises herunder
1 indlæg har modtaget i alt 4 karma
Sorter efter stemmer Sorter efter dato
Jeg kunne godt tænke mig et par forslag til hvordan jeg kan sende hele filer over et netværk...


Det nemmeste er at bruge Microsoft WinSock-kontrollen. Den skal inkluderes i begge dele, dvs. både i serveren og i klienten. Du skal sætte Socket på serveren til at lytte på en eller anden port, så klienten kan kontakte serveren.

<pre>With Winsock1
'Luk server socket, om nødvendigt
If .State <> sckClosed Then .Close

.LocalPort = 4545 'sæt porten, der skal lyttes på (åbnes)
.Listen 'begynd at lytte
End With</pre>

Ovenfor, er lytte-porten på serveren sat til 4545. Dette kan være næsten enhver tilgængelig port. Dog er portene som bekendt beregnede til forskellige formål, men i teorien kan ALLE porte (undtagen port 0 - ICMP) bruges med WinSock.

Din klient-applikation skal også have et socket, så klienten kan kontakte serveren. Klienten må kende serveren's IP-address og vide, hvilken port serveren lytter på. Hvis porten ikke kendes, kan en port scanner bruges til formålet (dog bliver mange servere paranoide, hvis man port-scanner dem for meget).

Klienten kan bruge en eller anden port på sin egen maskine, men MÅ kontakte en åben (lyttende) port på serveren for at initiere en forbindelse. Derfor bruger jeg 4545 for RemotePort i klienten's kode:

<pre>With Winsock1
If .State <> sckClosed Then .Close 'luk socket, om nødvendigt

.LocalPort = 2323 'sæt den lokale port
.RemoteHost = "80.84.250.30" 'server's IP-adresse
.RemotePort = 4545 'serveren's åbne port
.Connect 'kontakt server
End With</pre>

Den lokale port kan igen være næsten hvad det skal være. IP addressen i eksemplet er bare en jeg fandt på, så sæt den rigtige ind der. Du kan også bruge en URL i stedet for IP adresse. RemoteHost = "www.udvikleren.dk"

Når din klient kontakter serveren, fyres hændelsen ConnectionRequest på serveren's socket. Hvis serveren vil acceptere "opkaldet", skal den bruge Accept metoden til at starte forbindelsen.

<pre>Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)

Winsock1.Accept requestID 'accepter opkaldet fra klient

End Sub</pre>

RequestID variablen er et argument, der fås via hændelsen, så det skal du ikke spekulere så meget over her og nu. Når serveren accepterer forbindelsen, affyres hændelsen Connect på klienten's socket. Derved ved klienten, at alting er cool og kommunikationen kan begynde:

<pre>Private Sub Winsock1_Connect()

MsgBox "Connected.", vbInformation, "Success!"

End Sub</pre>

Når du så vil sende en fil, skal du bare åbne filen, læse den ind i et byte array eller en streng og sende den variabel til serveren gennem klienten's socket. Lad os antage, at du har læst en fil's indhold ind i strengen strFileData. Så sendes filen således:

<pre>With Winsock1
.SendData strFileData 'send filen's indhold
End With</pre>

På server-siden opdager serveren's socket de indkommende data og affyrer DataArrival hændelsen. Når dette sker, kan serveren lægge de indkomne data ned i en streng, som derefter kan udskrives, gemmes i en fil, eller hvad det nu skal være.

<pre>Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)

Dim strFileData As String
Winsock1.GetData strFileData 'hent data fra socket

End Sub</pre>

Nå, jeg må slutte her (denne post er næsten en komplet artikel). Der er nogle flere detaljer, men det finder du jo nok ud af hen ad vejen. Jeg håber ihvertfald, at dette får dig på rette vej.[Redigeret d. 22/03-02 15:51:44 af Herluf Hermansen]



t