Log in
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 usersThe newest registered user is lesn1k
Our users have posted a total of 558 messages in 467 subjects
[VB]Crearea unei aplicatii client-server
Page 1 of 1
[VB]Crearea unei aplicatii client-server
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 .
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 .
Similar topics
» Aplicatii Windows 95
» [PhotoShop-Manipulare Imagine]Explozia Unei PLanete
» [html]-Cum aliniezi un text in jurul unei imagini
» 1.04h client
» Mu Client 1.01e Download
» [PhotoShop-Manipulare Imagine]Explozia Unei PLanete
» [html]-Cum aliniezi un text in jurul unei imagini
» 1.04h client
» Mu Client 1.01e Download
Page 1 of 1
Permissions in this forum:
You cannot reply to topics in this forum
Mon Feb 25, 2013 9:12 am by Guest
» Ajuta Comunitatea
Sun Feb 24, 2013 3:36 pm by Guest
» Salut de la kalean
Wed Dec 19, 2012 5:16 pm by kalean
» firecracker
Sat Oct 20, 2012 3:14 am by 10th
» Ajuta Comunitatea in dezvoltare
Wed Jul 04, 2012 5:28 pm by Guest
» welcome........
Wed Jul 04, 2012 5:25 pm by Guest
» Cerere UnBan
Mon Jul 02, 2012 5:57 pm by Guest
» Astept potentiali clienti la componente IT si cel mai bun serviciu de gazduire din Romania!
Sat Jun 30, 2012 12:54 pm by Guest
» Cerere Rank
Fri Jun 29, 2012 10:15 am by Guest