<- Tilbage


Download eksempel

Microsoft Winsock Control 6.0

I dag hvor netværk er begyndt at blive så stor en del af vores hverdag, er det vel også på tide at man begynder at lave nogle applikationer der udnytter disse muligheder. I Visual Basic får man stillet komponenten Winsock Control 6.0" til rådighed. Ved hjælp af den kan man opbygge applikationer der usynligt for brugeren kan kommunikere med andre maskiner på et netværk, som f.eks. Internettet

I dette eksempel vil jeg lave et simpelt program, hvor et password tastes ind i et client-program for derefter at blive checket på en server som indeholder de gyldige passwords. Hvis passwordet er gyldigt, sendes der et positivt svar tilbage ellers sendes der et negativt svar.

Når du har oprettet et nyt projekt ("Standard EXE"), skal vi have tilføjet Winsock kontrollen. Dette gøres ved klik på:
Project -> Components -> Vælg "Microsoft Winsock Control 6.0".
Placer nu kontrollen et tilfældigt sted på din form. Dette skal gøres på både server og client projektet.

I dette eksempel har jeg navngivet Winsock kontrollen, "Wsck" Jeg vil i resten af artiklen kun holde mig til det kode som har noget med datakommunikation at gøre. Jeg vil også kun gennemgå kode fra serveren, da clienten indeholder næsten samme kodestykker, bare i en anden rækkefølge.

Server Applikationen

Serveren skal som sagt lytte på sin forbindelse og høre om der kommer nogle requests. Men før den kan lytte, må vi fortælle programmet hvordan og hvor den skal lytte. Dette har jeg lagt i Form_Load området.

Wsck.Protocol = sckUDPProtocol
	MsgBox (Wsck.LocalIP)
	Wsck.LocalPort = "2777"
Wsck.Bind
		
Først fortæller vi winsock at den skal benytte UDP, som er en connection-less protokol. Man kunne også vælge TCP, som er en connection-oriented protokol, men for nemhedens skyld benytter vi UDP.
Derefter får vi programmet til at vise vores IP-adresse i en msgbox. Hvis man ikke er koblet op på et netværk, vil man få adressen 127.0.0.1. ("Default adresse").
Linje 3 fortæller winsock at den skal benytte port 2777. Dette portnummer har jeg valgt helt tilfældigt og det kunne i princippet være et hvilken som helst tal mellem 1024 og 65535. Husk hvis du har en firewall installeret at der skal være åbnet for porten.
Den sidste kommando fortæller winsock, at den skal begynde at lytte på sin port for indgående beskeder.

Nu hvor vi har fået serveren til at lytte på sin port, skal vi jo også fortælle programmet hvad det skal gøre hvis der pludselig kommer en besked. Winsock stiller en metode til rådighed som vi benytter i vores eksempel. Metoden er en Sub-procedure, som winsock automatisk kalder når der dukker indgående beskeder op.

Private Sub Wsck_DataArrival(ByVal bytesTotal As Long)
	Wsck.GetData TestData, vbString
	Msgbox TestData	
End Sub
		

Alt det kode som man placere i denne sub, vil blive udført hver gang data modtages på porten. Her benytter vi funktionen ‘GetData’, til at lægge de indgående data over i variablen ‘TestData’ som vi fortæller er af type ‘String’. Tilsidst viser vi de nye data i en MsgBox.
Hvis man gerne vil kende afsenderens IP-adresse og portnummer, kan man føje disse linjer til overstående kode.

IP = Wsck.RemoteHost
Port = Wsck.RemotePort
		
Hvor IP og Port er to variabler defineret af os.
Den sidste funktion som serveren bruger er ‘SendData’. Hvis vi vil sende et svar til en af de clienter som har request’et os, skal vi selvfølgelig bruge dennes IP og portnummer. Heldigvis har vi lige gemt dem i to variabler. Følgende kode viser hvordan man sender et response til en client.
Wsck.RemoteHost = IP
Wsck.RemotePort = Port
Wsck.SendData "Password er OK"
		
Her sætter vi først IP-adressen og derefter portnumret på clienten. Tilsidst sender vi stringen "Password er OK" afsted over netværket.

Ved hjælp af disse få kommandoer og metoder kan man bygge et distribueret system op. Altså et system der usynligt for brugeren kommunikere med flere computere.
I vores ‘password-eksempel’, ved brugeren f.eks ikke at clienten kobler sig op til en anden maskine, nemlig serveren. ("Dog er det en god idé at informere brugeren om dette").

Jeg håber at denne artikel har givet dig blod på tanden, til at lave nogle client-server programmer.

Status: Version 1.0

Eksempel lavet af: Anders Hansen.

<- Tilbage