GoDLike Comunity


Join the forum, it's quick and easy

GoDLike Comunity
GoDLike Comunity
Would you like to react to this message? Create an account in a few clicks or log in to continue.
Log in

I forgot my password

Checkpagerank.net
Who is online?
In total there is 1 user online :: 0 Registered, 0 Hidden and 1 Guest

None

Most users ever online was 18 on Wed Mar 01, 2023 5:42 pm
Statistics
We have 1651 registered users
The newest registered user is lesn1k

Our users have posted a total of 558 messages in 467 subjects

[VB]Crearea unei aplicatii client-server

Go down

[VB]Crearea unei aplicatii client-server Empty [VB]Crearea unei aplicatii client-server

Post by MeG@DaN Thu Mar 10, 2011 12:44 pm

Sa incepem .

Care e ideea de baza ? Simplu . Din client trimitem
un cuvant ( string ) catre server , iar atunci cand serverul va primi
acel string , va face ceva anume . De exemplu , daca din client trimitem
catre server stringul "mesaj" , serverul va afisa un MsgBox .

Cum
vom face acest lucru ? Vom folosi WINSOCK , mai exact MSWINSCK.OCX . Ce
este acest winsock ? Este o biblioteca de functii , care ne permite sa
ne conectam , sa trimitem si sa receptionam date .

Sa incepem .
Intram in Visual Basic , alegem Standard si punem un Winsock pe Form (
nu o sa stau sa va explic cum se face asta , daca nu stiti jucati Mario )
. Mai punem un TextBox pentru IP , si un buton de conectare . Asta
pentru client .

Deschidem din nou Visual Basic , pentru server ,
si nu punem decat un Winsock .

Sa facem conexiunea . Serverul
va deschide un port prin care va primi datele de la client , pe care le
va procesa . Cum facem asta ?

Private Sub Form_Load()
On
Error Resume Next ' Handler de erori . In caz de eroare , se trece peste
eroare , nu se opreste rularea serverului .
Winsock1.LocalPort =
1111 ' Deschidem portul 1111 ( Puteti alege alt port )
Winsock1.Listen
' Setam serverul sa astepte date de la client
End Sub

Serverul
va trebui rulat . Apoi in client , ne conectam la server :

Private
Sub Command1_Click()
On Error Resume Next ' La fel
Winsock1.Close
' Inchidem o conexiune anterioara , daca aceasta exista
Winsock1.RemoteHost
= Text1.Text ' IPul la care vrem sa ne conectam , cel din TextBox .
Daca testezi serverul pe calculatorul tau poti folosi la IP 127.0.0.1 .
Winsock1.RemotePort
= 1111 ' Setam portul prin care clientul sa se conecteze la server
Winsock1.Connect
' Conectam clientul la server
End Sub

In caz de conexiune
reusita , va interveni evenimentul Winsock_Connect . Putem afisa pe
titlu ferestrei clientului , ca avem o conexiune reusita .

Private
Sub Winsock1_Connect()
Form1.Caption = "Conectat la" &
Text1.Text ' Setam captionul ( titlul ) ferestrei ca s-a conectat ,
Text1.Text , fiind IP-ul scris in TextBox .
End Sub

In caz
de o conexiune nereusita va interveni evenimentul Private Sub
Winsock1_Error() . La fel , putem afisa la titlul ferestrei , faptul ca a
intervenit o eroare :

Private Sub Winsock1_Error(ByVal Number
As Integer, Description As String, ByVal Scode As Long, ByVal Source As
String, ByVal HelpFile As String, ByVal HelpContext As Long,
CancelDisplay As Boolean)
Form1.Caption = "Eroare la conectare"
End
Sub

Acum in server . La apasarea butonului de conectare din
client , in server , va interveni evenimentul Winsock1_ConnectionRequest
. Va trebui acceptata conexiunea .

Private Sub
Winsock1_ConnectionRequest(ByVal requestID As Long)
Winsock1.Close '
Inchidem o conexiune existenta , in caz ca exista
Winsock1.Accept
requestID ' Acceptam conexiunea de la client
End Sub

Cam
asta a fost conexiunea . Acum , sa setam sa faca serverul ceva anume ,
pentru inceput sa deschida notepad . Pentru asta , vom trimite din
client stringul "notepad" , iar cand serverul va primi acel string , va
deschide notepad in calculatorul victimei .

Cum trimitem
stringul ? Vom pune inca un buton , si la apasarea acestuia , vom
trimite stringul .

Private Sub Command2_Click()
On Error
Resume Next
Winsock1.SendData "notepad" ' Trimitem stringul
"notepad"
End sub

La primirea stringului , in server , va
interveni evenimentul Winsock1_DataArrival() . Vom primi si vom procesa
datele .

Private Sub Winsock1_DataArrival(ByVal bytesTotal As
Long)
Dim date_primite As String ' Declaram variabila date_primite
de tipul string
Winsock1.GetData date_primite ' Memoram datale
primite in variabila date_primite .
If date_primite = "notepad" Then
' Verificam daca stringul trimis din client si memorat in server este
"notepad" , si daca este , deschidem notepad .
Shell "notepad.exe" '
Deschidem notepad .
End If ' Inchidem instructiunea If
End Sub
Dar
ce facem daca vrem sa trimitem mai multe date din client , si sa nu
stim ce anume contin unele , sa poata fi modificate de utilizatorul
clientului , de exemplu , sa trimitem un mesaj ? Simplu . Trimitem totul
ca un singur string , iar in server il vom imparti intr-un vector . Vom
face acest lucru in server , cu ajutorul functiei Split . Deci in
client , la trimiterea stringului , va trebui sa folosim un delimitator .
Vom impatri in server datele primite in vector folosind acel
delimitator . Mai bine va dau un exemplu .

Mai puneti pe Form un
buton si un TextBox .

Private sub Command3_click()
On Error
Resume Next
Winsock1.SendData "mesaj|" + Text2.Text ' Dupa cum
vedeti , dupa "mesaj" , se afla caracterul "|" . Vom folosi acest
caracter pe post de delimitator . Cand serverul va primi stringul
"mesaj" , va afisa un mesaj ( MsgBox ) , cu datele trimise dupa mesaj si
anume Text2.Text .
End Sub

In server vom procesa datele
primite :

Private Sub Winsock1_DataArrival(ByVal bytesTotal As
Long)
Dim date_primite As String
Dim Vector() As String '
Declaram vectorul Vector() de tip string .
Winsock1.GetData
date_primite
Vector() = Split(date_primite,"|") ' Acum impartim
datele primite in vector in functie de delimitatorul nostru "|" . Asadar
primul element al vectorului va fi "mesaj" , iar cel de-al doilea va fi
Text2.Text , mesajul trimis din server . Atentie : vectorii in Visual
Basic sunt in baza 0 , adica incep de la 0 . Asadar primul element al
vectorului va fi Vector(0) nu Vector(1) . Putem seta ca vectorii sa
inceapa de la 1 , folosind instructiunea Option Base 1 la Declarations .
Deci Vector(0) va fi "mesaj" iar Vector(1) va fi mesajul trimis din
client . Va trebui sa verificam apoi primul string Vector(0) , si daca
acesta este "mesaj" vom afisa ca MsgBox continutul lui Vector(1) .
If
Vector(0) = "mesaj" Then ' Verificam daca primul string este "mesaj"
MsgBox
Vector(1) ' Afisam ca MsgBox continutul mesajului trimis din client.
End
If
End Sub

Aceasta este ideea de baza . Sa prezint in
continuare starile prin care trece un Winsock . Putem verifica aceste
stari , folosind metoda State . Aceste stari sunt :

0 -
sckClosed - Conexiunea e inchisa
1 - sckOpen - Conexiunea e deschisa

2 - sckListening - Conexiunea e in asteptare
3 -
sckConnectionPending - Conexiune in desfasurare
4 - sckResolvingHost
- In curs de rezolvare
5 - sckResolved - Sistem gazda rezolvat
6
- sckConnecting - Se conecteaza
7 - sckConnected - Conectat
8 -
sckClosing - Se inchide conexiunea
9 - sckError - Eroare

Ce
putem face cu aceste state-uri ? De exemplu nu lasam sa se trimita un
string din client in caz ca acesta nu este conectat la server .

Private
Sub Command2_Click()
If Winsock1.State <> 7 ' State-ul este 7
daca este conectat
MsgBox "Nu esti conectat" ' In caz ca nu e
conectat , afisam mesajul "Nu esti conectat" .
Else:
Winsock1.SendData "notepad"
End If
End Sub

Daca incercam
sa trimitem un string si clientul nu e conectat , si nu folosim On
Error Resume Next , clientul se va inchide in urma unei erori .
MeG@DaN
MeG@DaN
Administrator
Administrator

Mesaje : 465
Data de inscriere : 17/12/2010
Localizare : Acasa

http://godlike.forumclan.com

Back to top Go down

Back to top

- Similar topics

 
Permissions in this forum:
You cannot reply to topics in this forum