You are on page 1of 81

TRNG I HC CNG NGHIP H NI

KHOA CNG NGH THNG TIN


-------------------------------- ------------------------------

BO CO THC TP TT NGHIP
ti:

XY DNG PHN MM LP HC O TRONG


MNG LAN

Nhm sinh vin thc hin:

HONG VN VANG
NGUYN MNH DNG

Lp : H- KHMT1K3
Ging vin hng dn:

TH.S NGUYN TIN LI

H Ni, 05/2012

PHIU GIAO TI

Page | 2

NHN XT CA GIO VIN HNG DN


................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
...........................................................................................................................................
..................................................................................................................................
H Ni, ngy thng

nm 2012

Ging vin
Th.S Nguyn Tin Li
Page | 3

LI NI U
Cng ngh thng tin l ngnh cng nghip mi nhn ca th gii ni chung v
ca Vit Nam ni ring, n pht trin mnh m khng ngng trong nhng nm gn
y. S lng cc trng hc c o to nghnh CNTT ngy mt tng cao, cng vi
l cc trung tm tin hc m ra ngy mt nhiu. V l t nhin khi cc trng, cc
trung tm mun c cc phng my cht lng th h cng s c nhu cu s dng cc
h thng qun l phng my a nng, tin dng v thn thin ngi s dng. Ti cc
phng my cc ging vin c th d dng truyn t kin thc mt cch sinh ng,
trc quan cho cc hc vin bng cch s dng chc nng chia s mn hnh ca phn
mm qun l phng my, hoc ging vin c th ch dn cho hc vin trc tip trn
mn hnh ca hc vin ch bng thao tc n gin ging nh trc tip ging vin ngi
ti my ca hc vin
Do vic xy dng mt phn mm lp hc o trong mng Lan l mt vic rt
cn thit, nhm h tr cc ging vin cng nh h tr cc hc vin c th tip cn
c vi cch hc tp trc quan d hiu. Nhn thc c tm quan trng cng nh
cp thit phi c mt h thng qun l cc my tnh trong phng hc mng Lan. Nhm
chng em ng k ti Xy dng phn mm lp hc o trong mng Lan. Vi hi
vng phn mm s gii quyt c phn no trong qu trnh dy v hc trong phng
my s dng mng Lan. V tin xa hn l mt phn mm o to thng qua mng
Internet, c hc vin v ging vin c th truy cp t bt k my tnh no c
ci t phn mm vic hc tp v ging dy s cng tr ln d dng hn.
hon thnh bo co thc tp tt nghip ny, chng em c s gip
tn tnh ca ging vin hng dn - Th.S Nguyn Tin Li - Ging vin khoa CNTT
trng i Hc Cng Nghip H Ni, Thy tn tnh hng dn, gp chnh sa rt
chi tit cho bi bo co ca chng em. Chng em xin chn thnh gi li cm n su
sc ti Thy. Xin chc Thy v gia nh lun mnh khe v thnh phc.

Page | 4

TM TT NI DUNG BO CO THC TP TT NGHIP


1. Nhng ni dung s c trnh by trong bi bo co.
xut xy dng mt phn mm lp hc o trong mng Lan c nhng chc
nng chnh sau y.
Chia s mn hnh ging dy.
Chia s ti liu hc tp.
Chat Message.
iu khin my tnh t xa (Remote Desktop).
H tr ging vin mt s chc nng v tin ch khc.
a ra cc kin thc, k thut c bn v quan trng v lp trnh mng vi
Socket v .Net Remoting.
Nghin cu cc lnh vc lp trnh nng cao nh cc hm API, lp trnh x l
nh c ng dng c th trong bi ton.
Bo co v qu trnh xy dng cc module chnh ca phn mm, v sau
tin hnh xy dng mt phn mm hon thin.
a ra mt phn mm hon thin v nh gi v cc kt qu thc nghim.
2. Cu trc ca bo co.
Chng 1. Tng quan v ti.
Chng 2. L thuyt c s.
Chng 3. ng dng phn mm qun l lp hc o.
Chng 4. Ci t v th nghim.
Chng 5. Kt lun.
Ti liu tham kho v kin ngh.

Page | 5

DANH SCH HNH NH


Hnh 2. 1: Chc nng ca Socket..............................................................................................16
Hnh 2. 2. S giao tip cc my tnh khc nhau...................................................................17
Hnh 2. 3: Cc ch giao tip cc tng mng khc nhau.......................................................18
Hnh 2. 4. Minh ha qu trnh khi to TCP Socket Server.....................................................19
Hnh 2. 5. M t qu trnh khi to TCP Socket Client kt ni ti Server...............................19
Hnh 2. 6. M t qu trnh truyn nhn thng tin gia Server v Client..................................20
Hnh 2. 7. M t kt thc phin lm vic gia Client v Server...............................................20
Hnh 2. 8. M t qu trnh khi to UDP Socket Server...........................................................21
Hnh 2. 9. M t qu trnh khi to UDP Socket Client...........................................................21
Hnh 2. 10. M t qu trnh truyn nhn d liu bng UDP.....................................................22
Hnh 2. 11. M hnh trao i thng tin ca .Net Remoting......................................................29
Hnh 2. 12. Lp trnh s kin trong Windows...........................................................................33
Hnh 2. 13. Gi v nhn s kin trong Windows......................................................................34
Hnh 2. 14. Kt qu chng trnh khng s dng ng b ha................................................41
Hnh 2. 15. Kt qu chng trnh s dng ng b ha...........................................................42
Hnh 2. 16. Biu din nh trong h mu RGB..........................................................................46
Hnh 2. 17. M t thut ton ct nh.........................................................................................46
Hnh 2. 18. M t ma trn im nh.........................................................................................47
Hnh 2. 19. Minh ha thut ton so snh nh............................................................................47
Hnh 3. 1. M hnh phn cp chc nng................................................................................
...56
Hnh 3. 2. Hnh minh ha chc nng chia s mn hnh............................................................57
Hnh 3. 3. Cc ni dung ging dy c trn mn hnh cc my hc vin...................................57
Hnh 3. 4. Minh ha chia s mn hnh cho ton b hc vin....................................................58
Hnh 3. 5. Minh ha cc ti liu c chia s..........................................................................58
Hnh 3. 6. Minh ha chc nng chia s mn hnh.....................................................................59
Hnh 3. 7. M hnh lung d liu..............................................................................................60

Page | 6

DANH MC BNG BIU


Bng 1. 1. Cu hnh ti thiu ca phng my...........................................................................13
Bng 1. 2. Cu hnh c khuyn co trong phng my.........................................................13
Bng 2. 1. Mt s phng thc ca lp NetworkStream ................................................23
Bng 2. 2. Mt s phng thc lp StreamRead......................................................................24
Bng 2. 3. Mt s phng thc lp StreamWriter....................................................................24
Bng 2. 4. Cc thnh vin ca lp TCPClient..........................................................................25
Bng 2. 5. Cc phng thnh vin ca lp TCPListener..........................................................26
Bng 2. 6. cc thnh vin ca lp UDPClient..........................................................................27
Bng 2. 7. Cc phng thc ca lp trnh Socket bt ng b.................................................28
Bng 2. 8. Mt s lp thuc tnh ca th vin System.Thread.................................................36
Bng 2. 9. Cc thnh phn static ca lp Thread......................................................................36
Bng 2. 10. Cc thnh vin cp i tng ca lp Thread.......................................................37
Bng 2. 11. Cc thnh phn chnh ca Registry........................................................................53

Page | 7

DANH MC CC THUT NG VIT TT


Danh sch t vit tt

Ngha ca t

LanVC

Lan Virual Class (Phn mm lp hc o).

IP

Internet Protocol.

TCP

Transmission Control Protocol.

UDP

User Datagram Protocol.

TCP/IP

Internet Protocol Suite.

FPT

File Transfer Protocol.

SMTP

Simple Mail Transfer Protocol.

HTTP

HyperText Transfer Protocol.

DNS

Doname System.

RGB

Khng gian mu gm ba mu Red - Blue - Green.

API

Application programming interface.

DLL

Dynamic Link Library.

XML

Extensible Markup Language.

HTML

HyperText Markup Language.

MC LC
PHIU GIAO TI..............................................................................................................2
NHN XT CA GIO VIN HNG DN.....................................................................3
Page | 8

LI NI U...........................................................................................................................4
TM TT NI DUNG BO CO THC TP TT NGHIP.........................................5
DANH SCH HNH NH.......................................................................................................6
DANH MC BNG BIU.......................................................................................................7
DANH MC CC THUT NG VIT TT.......................................................................8
MC LC..................................................................................................................................9
CHNG 1. TNG QUAN V TI..............................................................................12
1.1. L do chn ti..........................................................................................................12
1.2. Tnh hnh nghin cu trn thc t..............................................................................12
1.3. Vn t ra ca ti...............................................................................................13
1.3.1. Mt s vn v cu hnh ca h thng.................................................................13
1.3.2. xut cc module.................................................................................................13
1.4. Mc tiu ca ti.......................................................................................................14
1.5. i tng v phng php nghin cu.....................................................................14
1.5.1. i tng nghin cu.............................................................................................14
1.5.2. Phng php nghin cu........................................................................................14
1.6. D kin cc kt qu nghin cu..................................................................................15
1.7. Kt lun.........................................................................................................................15
CHNG 2. L THUYT C S.......................................................................................16
2.1. Lp trnh Socket C#.....................................................................................................16
2.1.1. Socket l g?............................................................................................................16
2.1.2. Chc nng ca Socket.............................................................................................16
2.1.3. Phn loi Socket......................................................................................................16
2.1.4. Thnh phn ca mt Socket....................................................................................17
2.1.4.1. S hiu cng (port number).............................................................................17
2.1.4.2. a ch IP.........................................................................................................17
2.1.5. Cc ch giao tip................................................................................................18
2.1.6. Xy dng ng dng Client-Server vi Socket:.......................................................18
2.1.6.1. M hnh Client-Server s dng Socket ch c kt ni (TCP).................19
2.1.6.2. M hnh Client-Server s dng Socket ch khng kt ni (UDP)..........20
2.1.7. S dng C# Stream vi TCP...................................................................................22
2.1.7.1. Lp NetworkStream.........................................................................................22
2.1.7.2. Lp StreamReader v StreamWriter................................................................23
2.1.8. S dng cc lp Helper Socket...............................................................................24
2.1.8.1.TCPClient.........................................................................................................24
2.1.8.2. TCPListener.....................................................................................................25
2.1.8.3. UDPClient........................................................................................................26
2.1.9. Lp trnh Socket bt ng b..................................................................................27
2.1.9.1. Thnh lp kt ni.............................................................................................28
2.1.9.2. Trao i d liu................................................................................................28
2.2. Lp trnh .Net Remoting.............................................................................................29
2.2.1. Cc khi nim.........................................................................................................29
2.2.2. Remote Objects trong .NET Remoting...................................................................29
2.2.3.Domain.....................................................................................................................30
2.2.4.Channel....................................................................................................................30
2.2.5. Object Activation....................................................................................................31
2.2.6. Client Activated Objects.........................................................................................31
2.2.7. To mt Remotable Object.....................................................................................32
2.3. Lp trnh s kin trong Windows...............................................................................33
2.3.1. S dng Event v Delegate.....................................................................................33
Page | 9

2.4. Lp trnh a lung.......................................................................................................34


2.4.1. Khi nim a lung (Thread)..................................................................................34
2.4.2. Tham kho th vin System.Thread.......................................................................35
2.4.2. Lp Thread..............................................................................................................36
2.4.3. Thao tc vi lung..................................................................................................37
2.4.4. ng b ha (Synchronization) trong lp trnh a lung.......................................39
2.4.4.1. ng b ha.....................................................................................................39
2.4.4.2. Deadlock..........................................................................................................42
2.4.4.3. Race condition.................................................................................................43
2.5. Lp trnh x l nh trong C#......................................................................................45
2.5.1. Mt s khi nim x l nh....................................................................................45
2.5.1.1. Khi nim nh..................................................................................................45
2.5.2. K thut x l nh c bn.......................................................................................46
2.5.2.1. Thut ton ct nh............................................................................................46
2.5.2.2. Thut ton so snh hai nh bitmap...................................................................47
2.6. Mt s k thut khc...................................................................................................48
2.5.1. Cc hm API...........................................................................................................48
2.5.1.1. Khi nim API..................................................................................................48
2.5.1.2. Cc thnh phn ca Windows API...................................................................48
2.5.1.3. Cch dng cc hm API...................................................................................48
2.5.1.4. S dng cc hm API.......................................................................................49
2.5.2. XML........................................................................................................................50
2.5.2.1. Khi nim v XML..........................................................................................50
2.5.2.2. Cc quy tc vit th XML................................................................................51
2.5.3. Registry trong C#....................................................................................................51
2.5.3.1. Khi nim Registry..........................................................................................51
2.5.3.2. Cc lp .Net Registry.......................................................................................51
2.7. Kt lun chng...........................................................................................................53
CHNG 3. NG DNG PHN MM QUN L LP HC O................................54
3.1. Phn tch thit k h thng..........................................................................................54
3.1.1.Kho st hin trng v lp d n..............................................................................54
3.1.1.2. xut tng xy dng h thng mi.........................................................54
3.1.1.3. M t hot ng ca h thng..........................................................................54
3.1.2. Phn tch cc chc nng ca h thng....................................................................55
3.1.2.1. M hnh phn cp chc nng...........................................................................55
3.1.2.2. Gii thch r tng chc nng ca h thng......................................................56
3.1.2.3. M hnh lung d liu......................................................................................59
3.2. Xy dng cc lp x l chnh......................................................................................60
3.2.1. Cc lp bn pha Server..........................................................................................60
3.2.1.1. Lp ServerReceiver..........................................................................................60
3.2.1.2. Lp ServerSender.............................................................................................62
3.2.1.3. Lp ServerTCP.................................................................................................65
3.2.1.4. Lp BuffData...................................................................................................70
3.2.2. Cc lp bn pha Client...........................................................................................71
3.2.2.1. Lp ClientReceiver..........................................................................................72
3.2.2.2. Lp ClientSender.............................................................................................74
3.2.2.3. Lp ClientTCP.................................................................................................76
3.3. Thit k giao din.........................................................................................................79
CHNG 5. KT LUN.......................................................................................................80
5.1. Nhng kt qu t c..............................................................................................80
Page | 10

5.2. Hng pht trin..........................................................................................................80


TI LIU THAM KHO......................................................................................................81

CHNG 1. TNG QUAN V TI


1.1. L do chn ti.
Page | 11

Hin nay, vi s pht trin vt bc ca khoa hc cng ngh trong i sng x


hi. Vic ng dng cng ngh mng Lan vo trong vic ging dy ti cc trng i
Hc, v Cao ng ngy cng pht trin. Nhng vic qun l phng hc trong mng
Lan cn nhiu bt cp.
Tn km u t tin ca vo h thng my chiu, bng hin ti.
Kh khn trong khu chia s ti liu hc tp.
Gio vin kh khn trong qu trnh ging dy, v gii p thc mc hc
vin.
Khng c nhiu s tng tc gia ging vin v hc sinh.
V vy xut pht t vn nhm chng em quyt nh la chn ti Xy
dng phn mm lp hc o trong mng Lan. Vi mong mun em li mt phn
mm gip tn dng sc mnh ca CNTT em li hiu qu cho vic ging dy trong
cc phng hc hin ti.
1.2. Tnh hnh nghin cu trn thc t.
Hin nay trn th trng cng c cc sn phm phn mm c tnh nng
tng t hoc mt s phn mm c tnh nng nh mt module nh ca phn mm lp
hc o.
Farstone Virtual Class.
u im : L mt phn mm ca hng FarStone a ra vi mc
ch qun l lp hc o gn nh rt hon ho, n c th cho php
ging vin v hc sinh tng tc vi nhau v cng n gin v
tin li.
Nhc im : gi c ca n th khng h d cht no vi 299$. V
n cn thiu mt tnh nng l chc nng quay phim mn hnh
v Void chat trong lp hc.
Remote Desktop Connection.
u im : l mt phn mm ca hng Micosoft c chy trn
Windows 7 v Windows Vista v n l mt phn mm min ph,
v s dng c mt cch linh hot.
Nhc im : cn c nhiu thiu st l ch c chc nng
remote desktop t xa m khng h c chc nng nh ging dy,..
Do phn mm ny ch gip ch c khng nhiu trong vic
qun l lp hc o. V thm na l chng ta cn phi nh tn ca
my Client v Password y l vic cc k bt tin.
FreeVC.
Page | 12

u im : l mt phn mm ca ngi vit c vit bi tc gi


Bi Duy Hng, phn mm ny nhn c gii thng phn
mm sng to ca trng i hc Cng Nghip H Ni. Phn
mm ny c nh gi l tin ch nh phn mm Farstone
Virtual Class nhng n l mt phn mm min ph v hiu nng
v tnh nng n gin d s dng
Nhc im : tuy vy phn mm ny cn nhiu thiu st nh
qun l Usb, Turn Off Computer, v mt vi chc nng khc.
Microsoft NetMeeting :
u im : cng l mt phn mm ca hng Microsoft c h tr
trn Windows XP n c th cho php ngi s dng dng t
chc hi tho, nhn thy ngi ni chuyn vi mnh, hoc c th
chia s ti liu mt cch d dng.
Nhc im : tuy vy phn mm cn c kh nhiu vn nh n
khng th xem cc my Client khi cn thit, m n ch xem c
danh sch cc my Client. V mt vi khuyt im khc nh kha
Usb, qun l cc my Client khi cn thit.
1.3. Vn t ra ca ti.
Da vo tnh hnh nghin cu cc phn mm trn thc t chng ta s tin hnh
xy dng ln mt phn mm hon ho hn, nhm loi b i nhng khuyt im ca
cc phn mm thc t, v tn dng ht cc im mnh ca phn mm thc t.
1.3.1. Mt s vn v cu hnh ca h thng.
Mt vn khng km phn quan trng l cu hnh cn thit thc hin
chy ng dng phn mm lp hc o trong mng Lan.
Server
Hardware

Software

Client

Ram 512 MB

Ram 256 MB

CPU P IV 3.0 GHz

CPU Ce 1.8 GHz

LAN network

LAN network

Window XP

Windows XP.

SQL Server 2005

.Net framework 3.5

.Net framework 3.5


Bng 1. 1. Cu hnh ti thiu ca phng my.
Server
Hardware

Ram 2.0 GB

Client
Ram 512 MB
Page | 13

Software

CPU Core 2 Duo 2.8 GHz

CPU P IV 2.4 GHz

LAN network

LAN network

Window Server 2003.

Windows XP.

SQL Server 2005

.Net framework 3.5

.Net framework 3.5


Bng 1. 2. Cu hnh c khuyn co trong phng my.
1.3.2. xut cc module.
Nh trong phn 1.1 v 1.2 chng ta c bit mc cp bch v cn thit
phi thc hin Xy dng phn mm lp hc o trong mng Lan. Do phn mm
ca chng em c xut cc module chnh sau y cn thit phi thc hin.
Module chia s (gm chia s ti liu, chia s mn hnh, thc hin vic trao i
thng tin bng chat message).
Module tin ch (gm c Turn off computer, Disable/Enable Usb disk, Remote
desktop, v chc nng VoIP).
Trong c hai module chnh quan trng v cn thit nht cn gii quyt v
Remote desktop v chia s mn hnh. Hai module ny v gii thut v cch xy dng
l tng i ging nhau.
1.4. Mc tiu ca ti.
a ra nhng gii php c th ca phn mm gii quyt cc bt cp
nu.
xut xy dng mt phn mm vi mc ch gip vic hc tp v ging
dy ti lp hc trong mng Lan tr ln d dng v trc quan hn.
Xy dng mt m hnh c th cho vn ang nghin cu. V a m hnh
vo ng dng thc t.
1.5. i tng v phng php nghin cu.
1.5.1. i tng nghin cu.
Tm hiu cc k thut c bn ca lp trnh mng vi Socket, v .Net
Remoting.
Nghin cu v lp trnh Thread, lp trnh s kin Delegate.
Tm hiu cc k thut trong lp trnh s dng cc hm API ng dng vo bi
ton lp trnh phn mm lp hc o.
Ngoi ra cn nghin cu lp trnh x l nh trong C# trong vn gii
quyt bi ton chia s mn hnh v iu khin my tnh t xa.
1.5.2. Phng php nghin cu.
Page | 14

Tm hiu cc kin thc v lp trnh mng vi Socket v .Net Remoting


thng qua cc gio trnh, cc bi vit v lp trnh mng trn cc din n song song vi vic tham kho t ti liu ca gio vin hng dn.
Tham kho cc kin thc v lp trnh x l nh, lp trnh cc hm API v
Thread trong sch v cng nh trn cc website.
Tm kim cc m ngun m v cc mng cn nghin cu trn cc website
nh codeproject.com, codeplex.com, sourceforge.net, github.com ... Nhm
mc ch tm hiu v qu trnh ci t thut ton x l c bn v nng cao
trn ngn ng lp trnh C/C++ v C#.
Tng bc nghin cu, nh gi v xut cc k thut s dng trong phn
mm.
Thc nghim da trn xy dng ng dng v nh gi cc kt qu thc
hin c v nhng kt qu cha thc hin c. T a ra cc gii
php v cc trin vng ca ti.
1.6. D kin cc kt qu nghin cu.
Hon thin qu trnh nghin cu, a ra mt s k thut c bn trong qu
trnh lp trnh mng.
Xy dng mt bo co c th v chi tit v cc k thut lp trnh Thread,
API v x l nh c ng dng trong bi ton.
Ci t v xy dng mt phn mm lp hc o thc t. V sau nh gi
cc kt qu thc nghim.
Kt lun chng.
Ni dung chng ny chng em s trnh by l do chn ra ti, cc ni
dung v cc mc cn thit nghin cu, a ra cc module cn thit phi xy dng
trong chng trnh. V a ra d kin thc hin ti gm : bo co v chng trnh
demo cc kt qu t c.

Page | 15

CHNG 2. L THUYT C S
2.1. Lp trnh Socket C#.
2.1.1. Socket l g?.
Socket l mt phng php thit lp kt ni truyn thng gia mt chng
trnh yu cu dch v ( client) v mt chng trnh cung cp dch v (server) trn
mng LAN, WAN hay Internet v i lc l gia nhng tin trnh ngay trong mt my
tnh. Mi socket c th c xem nh mt im cui (EndPoint) trong mt kt ni.
Mt socket trn my yu cu dch v c a ch mng c cp sn gi
mt socket trn my cung cp dch v. Mt khi socket c thit lp ph hp, hai
my tnh c th trao i dch v v d liu.
Socket c gii thiu ln u tin trong n bn UNIX - BSD 4.2 di dng
cc hm h thng theo c php ngn ng C (socket(), bind(), connect(), send(),
receive(), read(), write(), close() ,..). Ngy nay, Socket c h tr trong hu ht cc
h iu hnh nh MS Windows (WinSock), Linux v c s dng trong nhiu ngn
ng lp trnh khc nhau: nh C, C++, C#, Java, Visual Basic, Visual C++ . . .
D liu gi v nhn bng Socket bt buc phi l mng cc byte.
2.1.2. Chc nng ca Socket
Socket cho php thit lp cc knh giao tip m hai u knh c xc nh bi
hai cng (port). Thng qua cc cng ny mt tin trnh c th nhn v gi d liu vi
cc tin trnh khc.

Hnh 2. 1: Chc nng ca Socket.


2.1.3. Phn loi Socket
C cc loi Socket chnh l:
Socket kiu AF_UNIX ch cho php giao tip gia cc tin trnh trong cng
mt my tnh.
Page | 16

Socket kiu AF_INTET cho php giao tip gia cc tin trnh trn nhng
my tnh khc nhau trn mng.
Phn loi theo kiu kt ni:
Socket hng kt ni (TCP Socket)
Socket khng hng kt ni (UDP Socket)
2.1.4. Thnh phn ca mt Socket
2.1.4.1. S hiu cng (port number)
c th thc hin cc cuc giao tip, mt trong hai tin trnh phi cho bit s
hiu cng ca socket m mnh s dng. Mi cng giao tip th hin mt a ch xc
nh trong mt h thng. Khi tin trnh c gn mt s hiu cng (Server), n c th
nhn d liu gi n cng ny t tin trnh khc (Client). Tin trnh cn li cng 8 yu
cu to ra mt socket.
2.1.4.2. a ch IP
Ngoi s hiu cng, hai bn giao tip cn phi bit a ch IP ca nhau. Trong
khi s hiu cng dng phn bit cc qu trnh khc nhau trn cng mt my tnh th
IP dng phn bit cc my tnh khc nhau trn cng mt mng TCP/IP.

Hnh 2. 2. S giao tip cc my tnh khc nhau.


Trong hnh trn, a ch ca tin trnh B1 c xc nh bng 2 thng tin: (Host
B, Port B1)
a ch my tnh c th l a ch IP dng 118.69.123.139 hay l a ch theo
dng domain nh www.uit.edu.vn.
S hiu cng gn cho Socket phi l duy nht trn phm vi my , c gi
tr trong khong t 0-65535 (16 bits). Trong cc cng t 1-1023 c gi
l cng h thng c dnh ring cho cc tin trnh ca h thng.
Page | 17

2.1.5. Cc ch giao tip


Xt kin trc ca h thng mng TCP/IP:

Hnh 2. 3: Cc ch giao tip cc tng mng khc nhau.


Tng vn chuyn (Transport Layer) gip chuyn tip cc thng ip gia cc
chng trnh vi nhau. N c th hot ng theo hai ch :
Giao tip c ni kt, nu gia chng s dng giao thc TCP.
Giao tip khng kt ni, nu s dng giao thc UDP.
Socket l giao din gia chng trnh v lp vn chuyn. N cho php ta chn
giao thc s dng tng vn chuyn l TCP hay UDP cho chng trnh ng dng ca
mnh.
Bng so snh s khc bin gia hai ch giao tip c kt ni v khng kt
ni.
Ch c ni kt
- Tn ti knh giao tip o gia hai bn
giao tip.
- D liu c gi i theo bo m: c
kim tra li, truyn li gi tin li hay mt,
m bo th t ca cc gi tin.
- D liu chnh xc nhng tc truyn
chm.

Ch khng ni kt
- Khng tn ti knh giao tip o gia hai
bn.
- D liu c gi i khng m bo:
Khng kim tra li, khng pht hin v
truyn li gi tin b li hay mt, khng
m bo th t n ca cc gi tin.
- D liu khng chnh xc, tc truyn
nhanh.

2.1.6. Xy dng ng dng Client-Server vi Socket:


Socket l phng tin hiu qu xy dng cc ng dng theo kin trc ClientServer. Cc ng dng trn Internet nh Web, Mail, FTP.. . l cc v d in hnh.

Page | 18

Chng ta s tm hiu v cc bc c bn trong vic xy dng cc ng dng


Client-Server s dng Socket lm phng tin giao tip theo ch hng kt ni
(c ng dng trong phn gi file v gi hnh nh trong chng trnh).
2.1.6.1. M hnh Client-Server s dng Socket ch c kt ni (TCP)
Giai on 1: Server to Socket, gn s hiu cng v lng nghe cc kt ni.

Hnh 2. 4. Minh ha qu trnh khi to TCP Socket Server.


Socket() : Server yu cu to ra mt Socket c th s dng cc dch v
ca tng vn chuyn.
Bind() : Socket khi c to ra cn phi c gn vo mt port cc b.
Listen() : Server lng nghe cc yu cu kt ni t Client trn cng c
gn.
Giai an 2: Client to Socket, yu cu thit lp mt ni kt vi Server

Hnh 2. 5. M t qu trnh khi to TCP Socket Client kt ni ti Server.


Socket() : Client yu cu to mt Socket c th s dng dch v ca tng
vn chuyn, thng thng h thng thng t ng gn mt port cn dnh
cho Socket ca Client. Nhng y ta s t ng a vo port cho Socket
ca Client.
Connect() : Client gi yu cu kt ni ti Server c a ch ip v port xc
nh.

Page | 19

Accept() : Sau khi bn pha Client kt ni ti Server th Server s chp nhn


kt ni ca Client, khi mt knh giao tip o c hnh thnh. Client v
Server c th trao i thng tin vi nhau thng qua knh giao tip o ny.
Giai on 3: Trao i thng tin gia Client v Server

Hnh 2. 6. M t qu trnh truyn nhn thng tin gia Server v Client.


Sau khi chp nhn yu cu kt ni, Server i Client gi yu cu n. y
Client s s dng hm Send() gi ln lt cc byte d liu.
Server phn tch v thc thi yu cu. Kt qu v n gi li d liu cho Client
bng lnh Send().
Trong giai on ny, vic trao i thng tin gia Server v Client phi tun
th theo giao thc ng dng. Thng thng th Client s l bn gi yu cu
n Server trc.
Giai on 4: Kt thc phin lm vic.

Hnh 2. 7. M t kt thc phin lm vic gia Client v Server.


Vic trao i d liu gia Server v Client c thc hin nhiu ln.
Knh o s b xa khi Server hoc Client ng Socket bng lnh Close().
Page | 20

2.1.6.2. M hnh Client-Server s dng Socket ch khng kt ni (UDP)


UDP l giao thc theo phng thc khng lin kt c s dng thay th cho
TCP . N khc vi TCP, khng c chc nng thit lp lin kt v kt thc lin kt. Do
vy vic trao i thng tin d liu l khng ng tin cy.
Cc giai on thc hin ca Socket khng hng kt ni.
Giai on 1: Server to ra Socket v gn s hiu cng.

Hnh 2. 8. M t qu trnh khi to UDP Socket Server.


Socket(): Server yu cu to ra mt Socket s dng cc dch v ca tng
vn chuyn.
Bind(): Sau khi khi to Socket th cn phi gn mt port cc b cho n.
Giai on 2: Client to Socket.

Hnh 2. 9. M t qu trnh khi to UDP Socket Client.


Bn pha Client s yu cu to ra mt Socket s dng dch v ca tng
vn chuyn.
Sau Client c th Send d liu ti mt a ch ip v port cc b ca
Server.
Giai on 3: Trao i thng tin gia Client v Server

Page | 21

Hnh 2. 10. M t qu trnh truyn nhn d liu bng UDP.


Client v Server c th trao i thng tin vi nhau nhiu ln qua hai hm
l Sendto() v hm Recvfrom().
Gia Client v Server khng h c mt knh o no v vy vic truyn nhn
d liu thng d b mt mt.
2.1.7. S dng C# Stream vi TCP.
iu khin thng ip dng giao thc TCP thng gy ra kh khn cho cc lp
trnh vin, do vy .Net Framwork cung cp mt s lp gim gnh nng lp trnh.
Mt trong nhng lp l NetworkStream, v hai lp dng gi v nhn d liu s
dng hai lp l StreamWriter v StreamReader.
2.1.7.1. Lp NetworkStream.
Lp ny c nm trong th vin System.Net.Socket. Lp NetworkStream c
th c to lp bng nhiu phng thc khc nhau, nhng mt phng thc to lp
m ta hay s dng l gn vo Socket ca Server v Client c to lp sn.
Socket
newsock
=
new
SocketType.Stream, ProtocolType.Tcp);

Socket(AddressFamily.InterNetwork,

NetworkStream ns = new NetworkStream(newsock);

Mt s phng thc ca lp NetworkStream.


Thuc tnh
CanRead()

M t
true nu NetworkStream h tr c

CanSeek()

Lun lun false

CanWrite()

true nu NetworkStream h tr ghi

DataAvailable()

true nu c d liu c

Phng thc

M t

BeginRead()

Bt u c NetworkStream bt ng b

BeingWrite()

Bt u ghi NetworkStream bt ng b

EndRead()

Kt thc c NetworkStream bt ng b
Page | 22

EndWrite()

Kt ghi c NetworkStream bt ng b

Flush()

y ton b d liu i

Read()

c d liu t NetworkStream

Write()

Ghi d liu t NetworkStream

Equals()

So snh hai i tng NetworkStream

GetHashCode()

Ly hash code cho NetworkStream.

Close()

ng i tng NetworkStream
Bng 2. 1. Mt s phng thc ca lp NetworkStream

Ch : Phng thc Flush() c dng sau mi phng thc Write() m


bo d liu c t vo NetworkStream s lp tc gi n h thng xa.
NetworkStream khi truyn d liu cng c gp mt s vn v bin d liu.
Vn ny c gii quyt vi hai lp StreamReader v lp StreamWriter.
2.1.7.2. Lp StreamReader v StreamWriter.
Hai lp ny nm trong th vin System.IO iu khin c v ghi cc thng
ip text t mng. C hai lp u trin khai vi i tng NetworkStream xc nh
cc h thng nh du cho thng ip TCP.
Cc phng thc to lp lp StreamRead v StreamWriter, trong mt
phng thc to lp m ta hay c s dng nht l gn hai lp trn vo lp
NetworkStream c to lp t trc.
Socket newsock = new Socket(AddressFamily. InterNetwork, SocketType.
Stream, ProtocolType. Tcp);
NetworkStream ns = new NetworkStream(newsock);
StreamReader nr = new StreamReader(ns);
StreamWriter nw = new StreamWriter(ns);

Mt s phng thc ca lp StreamRead.


Phng thc

M t

Read()

c mt hoc nhiu byte d liu t


StreamReader.

Peek()

Tr v byte d liu hp l tip theo m


Khng g b n khi Stream.

ReadLine()

c d liu bt u t i tng
StreamRead tr ln cho ti khi bt gp k t
xung dng u tin.

ReadToEnd()

c d liu cho n ht Stream.


Page | 23

ToString()

To ra mt chui m t i tng Stream.

Equals()

So snh hai i tng StreamRead.

Close()

ng i tng StreamRead
Bng 2. 2. Mt s phng thc lp StreamRead

Mt s phng thc ca lp StreamWriter.


Lp StreamWriter cng c nhiu phng thc kt hp vi n, mt s phng
thc ca lp StreamRead cng c trong i tng StreamWriter, ngoi ra n cn c
mt s phng thc ging di y.
Phng thc

M t

Flush()

Gi tt c d liu trong b m
StreamWriter ra Stream.

Writer()

Gi mt hoc nhiu byte ra Stream.

WriterLine()

Gi d liu cng vi k t xung dng ra


Stream
Bng 2. 3. Mt s phng thc lp StreamWriter

2.1.8. S dng cc lp Helper Socket.


Cng nhm gim gnh nng cho cc lp trnh vin .Net Framwork a ra lp
Helper h tr c lp trnh hng kt ni vi Socket (TCP) v lp trnh khng hng
kt ni vi Socket (UDP).
2.1.8.1.TCPClient.
TCPClient c thit k nhm h tr cho vic vit cc ng dng TCP Client
c d dng.
Bng cc thnh vin ca lp TCPClient.
Phng thc khi to M t
TcpClient()

To mt i tng TcpClient. Cha t thng s g.

TcpClient(IPEndPoint)

To mt TcpClient v gn cho n mt EndPoint cc b.


(Gn a ch my cc b v s hiu cng s dng trao
i thng tin v sau)

TcpClient(String,Int32)

To mt i tng TcpClient v kt ni n mt my c
a ch v s hiu cng c truyn vo. RemoteHost c
th l a ch IP chun hoc tn my.

Cc thuc tnh

M t

Available

Cho bit s byte nhn v t mng v c sn c.

Client

Tr v Socket ng vi TCPClient hin hnh.


Page | 24

Connected

Trng thi cho bit kt ni c n Server hay cha?

Cc hm thnh phn

M t

Close()

Gii phng i tng TcpClient nhng khng ng kt


ni.

Connect(RemoteHost,
RemotePort)

Kt ni n mt my TCP khc c Tn v s hiu cng.

GetStream()

Tr v NetworkStream t gip ta gi hay nhn d


liu. (Thng lm tham s khi to StreamReader v
StreamWriter gi v nhn d liu di dng xu k t)
.
Khi gn vo StreamReader v StreamWriter ri th ta
c th gi v nhn d liu thng qua cc phng thc
Readline, writeline tng ng ca cc lp ny.
Bng 2. 4. Cc thnh vin ca lp TCPClient.

T cc thnh vin ca lp TcpClient trn ta thy rng, vic kt ni v thc


hin gi nhn rt n gin. Theo cc trnh t sau:
Bc 1: To mt i tng TcpClient.
Bc 2: Kt ni n my ch (Server) dng phng thc Connect.
Bc 3: To 2 i tng StreamReader (Receive)v StreamWriter
(Send) v "ni" vi GetStream ca TCPClient.
Bc 4:
Dng i tng StreamWriter.Writeline/Write va to trn gi
d liu i.
Dng i tng StreamReader.Readline/Read va to trn c
d liu v.
Bc 5: ng kt ni.
Nu mun gi/nhn d liu mc byte (nh phn) th dng NetworkStream.
(truyn GetStream cho NetworkStream).
2.1.8.2. TCPListener.
TCPListerner l mt lp cho php ngi lp trnh c th xy dng cc ng
dng Server (V d nh SMTP Server, FTP Server, DNS Server, POP3 Server hay
server t nh ngha .). ng dng server khc vi ng dng Client ch n lun
lun thc hin lng nghe v chp nhn cc kt ni n t Client.
Bng cc thnh vin ca lp TCPListener.
Page | 25

Phng thc khi to

M t

TcpListener ( Int32)

To mt TcpListener v lng nghe ti cng ch


nh.

TcpListener (IPEndPoint)

To mt TcpListener vi gi tr Endpoint truyn


vo.

TcpListener(IPAddress,Int32)

To mt TcpListener v lng nghe cc kt ni n


ti a ch IP v cng ch nh.

Phng thc

M t

AcceptSocket( )

Chp nhn mt yu cu kt ni ang ch.

AcceptTcpClient()

Chp nhn mt yu cu kt ni ang ch. (ng


dng s dng ti lnh ny cho n khi no c mt
kt ni n Blocking).

Pending()

Cho bit liu c kt ni no ang ch i khng

Start()

Bt u lng nghe cc yu cu kt ni.

Stop()

Dng vic nghe.


Bng 2. 5. Cc phng thnh vin ca lp TCPListener.

2.1.8.3. UDPClient.
Giao thc UDP (User Datagram Protocol hay User Define Protocol) l mt giao
thc phi kt ni (connectionless) c ngha l mt bn c th gi d liu cho bn kia m
khng cn bit l bn sn sng hay cha? (Ni cch khc l khng cn thit lp
kt ni gia hai bn khi tin hnh trao i thng tin). Giao thc ny khng tin cy
bng giao thc TCP nhng tc li nhanh v d ci t. Ngoi ra, vi giao thc UDP
ta cn c th gi cc gi tin qung b (Broadcast) cho ng thi nhiu my.
Trong .NET, lp UDPClient (nm trong namesapce System.Net.Sockets) ng
gi cc chc nng ca giao thc UDP.
Bng cc thnh vin ca lp UDPClient
Phng thc khi to

M t

UdpClient ()

To mt i tng (th hin) mi ca lp


UDPClient.

UdpClient (AddressFamily)

To mt i tng (th hin) mi ca lp


UDPClient. Thuc mt dng a ch
(AddressFamily) c ch nh.

UdpClient (Int32)
UdpClient (IPEndPoint)

To mt UdpClient v gn (bind) mt cng cho n.


To mt UdpClient v gn (bind) mt IPEndpoint
Page | 26

(gn a ch IP v cng) cho n.


UdpClient(Int32,
AddressFamily)

To mt UdpClient
AddressFamily

gn

hiu

cng,

UdpClient(String, Int32)

To mt UdpClient v thit lp vi mt trm t xa


mc nh.

Phng thc

M t

BeginReceive()

Nhn d liu Khng ng b t my xa.

BeginSend()

Gi khng ng b d liu ti my xa

Close()

ng kt ni.

Connect()

Thit lp mt Default remote host.

EndReceive()

Kt thc nhn d liu khng ng b trn

EndSend()

Kt thc vic gi d liu khng ng b trn

Receive (ref IPEndPoint)

Nhn d liu (ng b) do my xa gi. (ng b


c ngha l cc lnh ngay sau lnh Receive ch c
thc thi nu Receive nhn c d liu v . Cn
nu n cha nhn c d ch mt cht th n
vn c ch (blocking))

Send()

Gi d liu (ng b) cho my xa.


Bng 2. 6. cc thnh vin ca lp UDPClient.

2.1.9. Lp trnh Socket bt ng b.


phn u ca bo co chng ta lp trnh Socket trong ch blocking.
Socket blocking s ch mi cho n khi hon thnh nhim v ca n. Trong khi n b
blocking th cc chc nng khc ca chng trnh khng thc hin c.
Khi lp trnh Windows th lc gi mt phng thc b blocking th ton b
chng trnh s ng li v khng th thc hin cc chc nng khc c. Do vic
lp trnh bt ng b l cn thit cho chng trnh khi b treo.
Lp AsyncCallback cung cp cc phng thc bt u mt chc nng bt
ng b v cung cp mt phng thc delegate gi chc nng bt ng b kt thc.
Cc phng thc bt ng b trong Socket chia cc chc nng mng lm hai
phn.
Mt phng thc Begin bt u cc chc nng mng v ng k phng
thc AsyncCallback.
Mt phng thc End hon thnh chc nng mng khi phng thc
AsyncCallback c gi.
Phng thc bt u

M t

Phng thc kt thc


Page | 27

BeginAccept()

Chp nhn kt ni

EndAccept()

BeginConnect()

Kt ni n thit b xa

EndConnect()

BeginReceive()

Nhn d liu t Socket

EndReceive()

BeginReceiveFrom()

Nhn d liu t thit b xa

EndReceiveFrom()

BeginSend()

Gi d liu t Socket

EndSend ()

BeginSendTo()

Gi d liu n thit b xa

EndSendTo()

Bng 2. 7. Cc phng thc ca lp trnh Socket bt ng b.


2.1.9.1. Thnh lp kt ni.
Phng thc dng thnh lp kt ni vi thit b xa ph thuc vo chng
trnh ng vai tr l Server hay Client. Nu l Server th phng thc BeginAccept()
c dng, cn bn Client th phng thc BeginConnect() c s dng.
Phng thc BeginAccept() v EndAccept().
Server.BeginAccept(new AsyncCallback(CallAccept), Server);
Socket s = (Socket)ia.AsyncState;
Server = s.EndAccept(ia);

Sau khi phng thc BeginAccept() kt thc, phng thc AsyncCallback nh


ngha s c gi khi kt ni xy ra. Phng thc AsyncCallback phi bao gm
phng thc EndAccept() kt thc vic chp nhn Socket. Sau y l nh dng ca
phng thc EndAccept().
Phng thc Beginconnect() v EndConnect()
_clientsocket.BeginConnect(_ipep,
new AsyncCallback(CallPConnect), _clientsocket);
_clientsocket.EndConnect(ia);

2.1.9.2. Trao i d liu.


Sau khi Server v Client thit lp kt ni, ta c th thc hin vic trao i d
liu gia Server v Client.
Phng thc BeginSend() v EndSend().
_ServerSocket.BeginSend(data, 0, data.Length, SocketFlags.None, new
AsyncCallback(SendcmdMessage), _ServerSocket);
Socket s = (Socket) ia.AsyncState;
s.EndSend(ia);

Cc phng thc khc thc hin ging nh phng thc BeginSend() v


EndSend().
2.2. Lp trnh .Net Remoting.
Page | 28

2.2.1. Cc khi nim.


.Net Remoting l c ch giao tip gia cc i tng (object) m khng cng
thuc mt Process. Gip cc lp i tng thuc cc ng dng khc nhau c th lin
lc c vi nhau. Cc i tng ca cc ng dng ny c th c thit lp trn cng
mt my tnh hay cc my tnh khc nhau v c giao tip t xa thng qua cc giao
thc kt ni nh HTTP,TCP.
Microsft .Net Remoting c gii thiu t .Net Framework 1.1 cng vi
Webservice. Cung cp cc k thut cho php mt i tng ny truy xut n mt i
tng khc nm cc Application Domain khc nhau.

Hnh 2. 11. M hnh trao i thng tin ca .Net Remoting.


2.2.2. Remote Objects trong .NET Remoting.
Nu nh mt chng trnh n th cc i tng s cng thuc trong ng
dng , v chng d dng giao tip c vi nhau; y c th c coi l Local
Objects. Tuy nhin nu cc i tng li thuc nhng ng dng khc nhau (cc
Application domain khc nhau) th cn c nhng Remote Object giao tip vi nhau.
Remote Object c th c dn xut t MarshalByRefObject hay s dng
[Serializable] tag hoc bng cch to cc giao din ISerializable.
Cc loi Remote Object:
Trong .NET Remoting, c hai c ch to instance ca Remote Object ri t
thc thi request. l Singleton v Singlecall. Ty vo mc ch s dng, nhu cu
ca ng dng m server c th khai bo theo c ch
WellKnownObjectMode.SingleCall, hay WellKnownObjectMode.Singleton.
Single Call Object: Remote Object s c sinh ra, thc thi request, tr
li cho client, sau Object ny vn c lu li ch khng b hy i.
Page | 29

n khi no process chy chng trnh Server kt thc th instance ny


mi b trnh ht rc Garbage Collection ht i.
Singleton Object: Ngc li vi Single Call, khi khai bo Remote Object
l Singleton th Remote Object s c khi to v hy i i vi mi
ln nhn request t pha Client. C ch ny tng t nh m hnh .NET
Webservice truyn thng.
Client-Activated Objects (CAO): Thuc kiu Server-side object, chng
ch c kch hot mi khi c request n t Client. Khi mt Client gi
mt request ti Server s dng ton t new, mt thng ip s c
gi ti Remote Application. Server sau s to ra mt Instance ca lp
c yu cu, v tr v mt ObjRef cho Client Application.
2.2.3.Domain.
Trong .NET, khi mt ng dng c np vo trong b nh, mt tin trnh c
to ra, v trong qu trnh ny, mt min ng dng (Application Domain) cng c
to ra. Trn thc t, ng dng ny s c np vo Application Domain. Mi ng
dng c thuc cc Application Domain khc nhau, v th nu chng mun giao tip
c vi nhau th phi s dng Remoting ch khng th giao tip trc tip vi nhau
c. Cc Application Domain c th cng thuc mt process hoc khc process.
2.2.4.Channel.
Trong k thut .Net Remoting th Channel c hiu nh l mt knh giao
tip gia Client v Server. Mt Object t Client s thng qua Channel giao tip vi
Object pha Server, Channel s truyn ti nhng Message t hai pha. Nh gii thiu
pha trn th c hai Channel chnh l TcpChannel v HttpChannel tng ng vi cc
giao thc TCP v HTTP. Ngoi ra, TcpChannel v HttpChannel u c kh nng
Extend thnh nhng Custom Channel.
Cc nguyn tc khi thit lp mt Channel.
Cn c t nht mt Channel c ng k vi .NET Remoting trc khi
Remote Object c gi. V cc Channels ny cn ng k trc cc
Remote Object.
Channel c ng k trong mi Application Domain hoc nhiu
Application Domain thuc mt Process. Khi Process kt thc th cc
Channel ny cng t ng c hy i.
Khng th ng k cc Channel khc nhau trn cng mt port thuc
cng mt my tnh mc d cc Channel ny c th cc Application
Domai khc nhau. Khi thit lp nhiu Channel trn cng mt my tnh
th chng cn listen cc port khc nhau.
Page | 30

Client lin lc vi Remote Object thng qua cc knh ng k bng


vic gi cc RegisterChannel trn lp ChannelService.
2.2.5. Object Activation.
Server Actived Object ch c to ra ln u tin Client thit lp cuc gi ti
cc Remote Method. Hay ni cch khc, Khi mt Client yu cu to ra cc Remote
Object th ch cc proxy cc b c to ra Client, cn Remote Object thc t nm
trn Server. Cc Remote Object ny s c khi to ln u tin Client thip lp
cuc gi cho Server. V d to ra cc Proxy nh sau.
// Trn Server
RemotingConfiguration.RegisterWellKnownServiceType(
typeof (RemoteServerObject), "Test",
WellKnownObjectMode.SingleCall);
...
// Trn Client
IRemoteCom
obj
(IRemoteCom)Activator.GetObject(typeof(IRemoteCom),

"tcp://localhost:1002/Test");
...

Nh ni trn, chng ta c hai c ch to instance ca Remote Object l


Single Call v Singleton. on m v d ca n nh sau.
RemotingConfiguration.RegisterWellKnownServiceType( typeof(RemoteServ
erObject),
"Test", WellKnownObjectMode.SingleCall);
...
RemotingConfiguration.RegisterWellKnownServiceType( typeof(RemoteServ
erObject),
"Test", WellKnownObjectMode.Singleton);

2.2.6. Client Activated Objects.


i tng Client Activated Object c to ra mi trn Server ngay lp tc mi
khi c request t Client hoc cng c th to ra bng t kha new hoc
Activator.CreateInstance().
// On the Server
RemotingConfiguration.ApplicationName = "TestCAO";
RemotingConfiguration.RegisterActivatedServiceType(typeof(RemoteObject
CAO));
...
// On the Client

Page | 31

RemotingConfiguration.RegisterActivatedClientType(typeof(RemoteObjectC
AO), "tcp://localhost:1002/TestCAO");
obj = new RemoteObjectCAO();
...

Ty thuc vo hon cnh v nhu cu m ta s dng loi khc nhau. V d:


Singleton object c dng tham chiu n nhng i tng cng
trn mt server, v bt k thay i ca Client cng s visible (hin
hu) vi nhng Client khc. V d nh trong h iu hnh Windows, khi
mt chng trnh thay th cc Client Program khc cng bit c. D
liu s c lu trn my ch v c truy cp bi tt c cc Client.
Chng ta s dng SingleCall khi mun cung cp mt mi trng
stateless (Kiu ging ca Web services truyn thng.
Chng ta s dng Client Activation nu i ng cn phi c duy tr
trng thi kt ni lin tc, trao i thng tin vi cc client khc.
2.2.7. To mt Remotable Object.
Mt Remote Object l mt i tng c k tha t lp MarshalByRefObject.
Trong C#, khi to mt lp th vin mi. Ta Add thm lp c tn
MarshalByRefObject nh ni trn. Khai bo using System.Runtime.Remoting
c th s dng c cc TcpChannel hay HttpChannel.
V d.
MyRemotableObject.cs
namespace RemotableObjects
{
public class MyRemotableObject : MarshalByRefObject
{
public MyRemotableObject()
{
}
public void SetMessage(string message)
{
Cache.GetInstance().MessageString = message;
}
}
}

2.3. Lp trnh s kin trong Windows.

Page | 32

Trong lp trnh s kin ca Windows, mi khi s kin sy ra, mt phng thc


c gi thc thi da trn s kin nh trong hnh di y.

Hnh 2. 12. Lp trnh s kin trong Windows.


2.3.1. S dng Event v Delegate.
Evetn l mt thng ip c gi bi mt i tng m t mt hot ng m
n din ra. Thng ip ny xc nh hot ng v truyn cc d liu cn thit cho hot
ng. Event c th m t hot ng no , chng hn nh hot ng click mt
Button, hot ng nhn v gi d liu trn Socket. Event sender khng cn thit phi
bit i tng no s iu khin thng ip s kin mi khi n c gi thng qua h
thng Windows. N cho b phn s kin ng k vi h thng Windows v thng
bo kiu s kin m b phn nhn s kin mun nhn nh hnh minh ha sau.

Hnh 2. 13. Gi v nhn s kin trong Windows.


B nhn s kin c xc nh trong h thng Windows bi mt con tr lp
c gi l Delegate. Mt Delegate l mt lp n gi tham chiu n mt phng
thc m phng thc ny iu khin s kin c nhn. Khi h thng Windows nhn
s kin, n kim tra xem th c Delegate no ng k x l n khng. Nu c
Delegate ng k s l s kin, thng ip s kin c truyn vo phng thc
Page | 33

c nh ngha bi Delegate. Sau khi phng thc hon tt, hn thng Windows s
x l s kin tip theo xy ra cho ti khi s kin kt thc chng trnh c pht ra.
2.4. Lp trnh a lung.
2.4.1. Khi nim a lung (Thread).
Mt lung (Thread) l mt chui lin tip nhng s thc thi trong chng
trnh. Trong mt chng trnh C#, vic thc thi bt u bng phng thc main() v
tip tc cho n khi kt thc hm main(). Cu trc ny rt hay cho nhng chng trnh
c mt chui xc nh nhng nhim v lin tip. Nhng thng th mt chng trnh
cn lm nhiu cng vic hn vo cng mt lc. V d trong Internet Explorer khi ta
ang ti mt trang web th ta nhn nt back hay mt link no , lm vic ny
Internet Explorer s phi lm t nht l 3 vic:
Ly d liu c tr v t Internet cng vi cc tp tin i km.
Th hin trang Web.
Xem ngi dng c nhp lm th g khc khng.
n gin vn ny ta gi s Internet Explorer ch lm hai cng vic:
Trnh by trang Web.
Xem ngi dng c nhp g khng.
thc hnh vic ny ta s vit mt phng thc dng ly v th hin trang
Web. Gi s rng vic trnh by trang Web mt nhiu thi gian (do phi thi hnh cc
on javascript hay cc hiu ng no ). V vy sau mt khong thi gian ngn
khong 1/12 giy, phng thc s kim tra xem ngi dng c nhp g khng. Nu c
th n s uc x l, nu khng th vic trnh by trang s c tip tc. V sau 1/12
giy vic kim tra s c lp li. Tuy nhin vit phng thc ny th rt phc tp do
ta s dng kin trc event trong Window ngha l khi vic nhp xy ra h thng s
thng bo cho ng dng bng cch a ra mt event. Ta s cp nht phng thc
cho php dng cc event:
Ta s vit mt b x l event p ng i vi vic nhp ca ngi
dng.
Ta s vit mt phng thc ly v trnh by d liu. Phng thc ny
c thc thi khi ta khng lm bt c iu g khc.
Ta hy xem cch phng thc ly v trnh by trang web lm vic: u tin n
s t nh thi gian. Trong khi n ang chy, my tnh khng th p ng vic nhp
ca ngi dng . Do n phi ch n vic nh thi gian gi phng thc kim
tra vic nhp ca ngi dng, ngha l phng thc va chy va quan st thi gian.
Bn cnh n cn phi quan tm n vic lu tr trng thi trc khi n gi phng
thc khc sau khi phng thc khc thc hin xong n s tr v ng ch n
Page | 34

dng. Vo thi Window 3.1 y thc s l nhng g phi lm x l tnh hung ny.
Tuy nhin NT3.1 v sau l Windows 95 tr i c vic x l a lung iu ny
lm vic gii quyt vn tin li hn. Di y chng ta s tm hiu mt vi lp c
bn trong ngn ng lp trnh C# v vn ng b ha (Synchronization) trong lp
trnh a lung.
2.4.2. Tham kho th vin System.Thread.
Namespace System.Threading cung cp mt s kiu d liu cho php bn thc
hin lp trnh a lung. Ngoi vic cung cp nhng kiu d liu tng trng cho mt
lung c th no , namespace ny cn nh ngha nhng lp c th qun l mt
collection cc lung (ThreadPool), mt lp Timer n gin (khng da vo GUI) v
cc lp cung cp truy cp c ng b vo d liu c chia s s dng.
Cc lp thnh vin

M t

Interlocked

Lp ny dng cung cp truy cp ng b ha vo d liu c chia


s s dng (shared data).

Moniter

Lp ny cung cp vic ng b ha cc i tng lung s dng


kha cht (lock) v tn hiu ch (wait signal).

Mutex

Lp ny cung cp vic ng b ha s ng c th c dng i


vi inter process synchronization.

Thread

Lp ny tng trng cho mt lung c thi hnh trong lng


Common Language Runtime. S dng lp ny bn c kh nng b
sung nhng lung khc trong cng AppDomain.

ThreadPool

Lp ny qun l nhng lung c lin h vi nhau trong cng mt


Process no .

Timer

Cho bit mt delegate c th c triu gi vo mt lc c khai


bo no . Tc v wait c thi hnh bi lung trong thread pool.

WaitHandle

Lp ny tng trng cho tt c cc i tng ng b ha (cho


php multiple wait) vo lc chy.

ThreadStart

Lp ny l mt delegate ch v hm hnh s no phi c thi


hnh u tin khi mt lung bt u.

TimerCallBack

Delegate i vi Timer.

WaitCallBack

Lp ny l mt delegate nh ngha hm hnh s ku gi li


(callback) i vi ThreadPool user work item.

Bng 2. 8. Mt s lp thuc tnh ca th vin System.Thread.


2.4.2. Lp Thread.
Lp n gin nht trong tt c cc lp thuc Namespace System.Threading l
lp Thread. Lp ny tng trng cho mt v bc hng i tng bao quanh mt l
trnh thi hnh trong lng mt AppDomain no . Lp ny nh ngha mt s hm
Page | 35

thc thi (c static ln shared) cho php bn to mi nhng lung t lung hin hnh,
cng nh cho Sleep, Stop hay Kill mt lung no .
Cc thnh phn Static

M t

CurrentThread

Thuc tnh read-only ny tr v mt quy chiu v lung hin


ang chy.

GetData()

i ly v tr t slot c khai bo trn lung hin hnh i vi


domain hin hnh trong lung.

SetData()

Cho t tr ln slot c khai bo trn lung hin hnh i


vi domain hin hnh trong lung

GetDomain()

i ly mt qui chiu v AppDomain hin hnh (hoc m nhn


din ID ca domain ny) m lung hin ang chy trn .

GetDomainID()
Sleep()

Cho ngng lung hin hnh trong mt thi gian nht nh c


khai bo.

Bng 2. 9. Cc thnh phn static ca lp Thread.


Ngoi ra lp Thread cng h tr cc thnh vin cung cp i tng.
Cc lp thnh vin

M t

IsAlive

Thuc tnh ny tr v mt tr boolean cho bit liu xem lung


khi ng hay cha.

IsBackground

i ly hoc t gi tr cho bit liu xem lung l mt lung nn


hay khng.

Name

Thuc tnh ny cho php bn thit lp mt tn vn bn mang tnh


thn thin i vi lung.

Priority

i ly hoc t u tin ca mt lung. C th c gn mt tr


ly t enumeration ThreadPriority (chng hn Normal, Lowest,
Highest, BelowNormal, AboveNormal).

ThreadState

i ly hoc t tnh trng ca lung. C th c gn t


enumeration ThreadState (chng hn Unstarted, Running,
WaitSleepJoin, Suspended, SuspendRequested, AbortRequested,
Stopped).

Interrup()

Cho ngng chy lung hin hnh.

Join()

Yu cu lung ch i vi lung b ngng chy.

Resume()

Tip tc li i vi mt lung b ngng chy.

Start()

Cho bt u thi hnh lung c khai bo bi delegate ThreadStart.

Suspend()

Cho ngng chy mt lung. Nu lung b ngng ri, mt triu


gi hm Suspend() s khng c tc dng.

Bng 2. 10. Cc thnh vin cp i tng ca lp Thread.


Page | 36

2.4.3. Thao tc vi lung.


Lung c thao tc bng cch dng lp Thread nm trong th vin
System.Threading. Mt th hin ca lung i din cho mt lung. Ta c th to cc
lung khc bng cch khi to mt i tng Thread.
Gi s rng ta ang vit 1 trnh bin tp hnh nh ho, v ngi dng yu
cu thay i su ca mu trong nh. Ta bt u khi to mt i tng lung nh
sau:
// entryPoint c khai bo trc l 1 delegate kiu ThreadStart
Thread depthChangeThread = new Thread(entryPoint);

on m trn biu din mt hm khi to ca Thread vi mt thng s ch nh


im nhp ca mt lung. l phng thc ni lung bt u thi hnh. Trong tnh
hung ny ta dng thng s l delegate, mt delegate c nh ngha trong
System.Threading gi l ThreadStart, ch k ca n nh sau:
public delegate void ThreadStart();

Thng s ta truyn cho hm dng phi l 1 delegate kiu ny. Ta bt u lung


bng cch gi phng thc Thread.Start(), gi s rng ta c phng thc ChanColor():
void ChanColor()
{
// x l thay i mu
}

Sp xp li ta c on m sau.
ThreadStart entryPoint = new ThreadStart(ChangeColorDepth);
Thread depthChangeThread = new Thread(entryPoint);
depthChangeThread.Name = Depth Change Thread;
depthChangeThread.Start();

Sau im ny, c hai lung s chy ng b vi nhau.


Trong on m ny ta ng k tn cho lung bng cch dng thuc tnh
Thread.Name. Khng cn thit lm iu ny nhng n c th hu ch.
Lu v im t nhp vo lung (trong v d ny l ChanColor() ) khng th
ly bt k thng s no. Ta s phi tm mt cch no truyn thng s cho phng
thc nu cn. Cch tt nht l dng cc trng thnh vin ca lp m phng thc ny
l thnh vin. Cng vy phng thc khng th tr v bt c th g .
Mi ln ta bt u mt lung khc, ta cng c th nh ch, hi phc hay b qua
n. nh ch ngha l cho lung ng (sleep) - ngha l khng chy trong 1 khong
thi gian. Sau n th c phc hi, ngha l tr n v thi dim m n b nh ch.
Nu lung c b, n dng chy. Window s hu tt c d liu m lin h n lung
, lung khng th c bt u li. Tip tc v d trn, ta gi s v l do no
Page | 37

lung giao din ngi dng trnh by mt hp thoi cho ngi dng c hi nh ch
tm thi s i tin trnh. Ta s son m p ng trong lung main :
depthChangeThread.Suspend();

V nu ngi dng c yu cu cho tin trnh c phc hi:


depthChangeThread.Resume();

Cui cng nu ngi dng mun hu lung :


depthChangeThread.Abort();

Phng thc Suspend() c th khng lm cho lung b nh ch tc thi m c


th l sau mt vi lnh, iu ny l lung c nh ch an ton. i vi phng
thc Abort() n lm vic bng cch tung ra bit l ThreadAbortException.
ThreadAbortException l mt lp bit l c bit m khng bao gi c x l.
Nu lung thc thi m bn trong khi try, bt k khi finally s c thc thi trc
khi lung b hu. Sau khi hu lung ta c th mun i cho n khi lung thc s b
hu trc khi tip tc lung khc ta c th i bng cch dng phng thc join():
depthChangeThread.Abort();
depthChangeThread.Join();

Join() cng c mt s overload khc ch nh thi gian i. Nu ht thi gian


ny vic thi hnh s c tip tc. Nu mt lung chnh mun thi hnh mt vi hnh
ng trn n, n cn mt tham chiu n i tng lung m i din cho lung ring.
N c th ly mt tham chiu s dng thuc tnh static -CurrentThread- ca lp
Thread:
Thread myOwnThread = Thread.CurrentThread;

C hai cch khc nhau m ta c th thao tc lp Thread:


Ta c th khi to mt i tng lung, m s i din cho lung ang
chy v cc thnh vin th hin ca n p dng n lung ang chy.
Ta c th gi mt s phng thc static, nhng phng thc ny s p
dng n lung m ta thc s ang gi phng thc t n. Mt phng
thc static m ta mun Sleep(), n gin t lung ang chy ng mt
khong thi gian, sau tip tc.
2.4.4. ng b ha (Synchronization) trong lp trnh a lung.
2.4.4.1. ng b ha.
i khi c th bn mun iu khin vic truy cp vo mt ngun lc, chng hn
cc thuc tnh hoc cc hm ca mt i tng, lm th no ch mt mch trnh c
php thay i hoc s dng ngun lc m thi. Vic ng b ha c th hin
thng qua mt ci kha c thit lp trn i tng, ngn khng cho lung no
truy cp khi mch trnh i trc cha xong cng vic.
Page | 38

Trong phn ny, ta s l quen vi c ch ng b ha m Common Language


Runtime cung cp: lnh lock. Nhng trc tin, ta cn m phng mt ngun lc c
chia s s dng bng cch s dng mt bin s nguyn n gin: counter.
bt u, ta khai bo bin thnh vin v khi gn v zero:
int counter = 0;

Bi ton c t ra y nh sau: lung th nht s c tr counter (0) ri gn


gi tr ny cho bin trung gian (temp). Tip tng tr ca temp ri Sleep mt khong
thi gian. Lung th nht xong vic th gn tr ca temp tr v cho counter v cho hin
th tr ny. Trong khi n lm cng vic, th lung th hai cng thc hin mt cng vic
ging nh vy. Ta cho vic ny lp ny khong 1000 ln. Kt qu m ta ch i l hai
lung trn m ln lt tng bin counter ln 1 v in ra kt qu 1, 2, 3, 4 tuy nhin
ta s xt on chng trnh di y v thy rng kt qu hon ton khc vi nhng g
m chng ta mong i.
on m ca chng trnh sau
using System;
using System.Threading;
namespace TestThread
{
public class Tester
{
private int counter = 0;
static void Main(string[] args)
{
Tester t = new Tester();
t.DoTest();
Console.ReadLine();
}
public void DoTest()
{
Thread t1 = new Thread(new ThreadStart(Incrementer));
t1.IsBackground = true;
t1.Name = "Thread One";
t1.Start();
Console.WriteLine("Start thread {0}", t1.Name);
Thread t2 = new Thread(new ThreadStart(Incrementer));

Page | 39

t2.IsBackground = true;
t2.Name = "Thread Two";
t2.Start();
Console.WriteLine("Start thread {0}", t2.Name);
t1.Join();
t2.Join();
Console.WriteLine("All my threads are done.");
}
public void Incrementer()
{
try
{
while (counter < 1000)
{
int temp = counter;
temp++;
Thread.Sleep(1);
counter = temp;
Console.WriteLine("Thread {0}. Incrementer: {1}",
Thread.CurrentThread.Name, counter);
}
}
catch (ThreadInterruptedException)
{
Console.WriteLine("Thread {0} interrupted! Cleaning up...",
Thread.CurrentThread.Name);
}
finally
{
Console.WriteLine("Thread {0} Existing.",
Thread.CurrentThread.Name);
}
}
}
}

Kt qu t c l:

Page | 40

Hnh 2. 14. Kt qu chng trnh khng s dng ng b ha.


Do ta cn phi ng b ha vic truy cp i tng counter.
C# cung cp i tng Lock thc hin cng vic ng b ha ny. Mt lock
s nh du mt critical section trn on m ng thi cung cp vic ng b ha i
vi i tng c ch nh khi lock c hiu lc. C php s dng mt Lock yu cu
kha cht mt i tng ri thi hnh mt cu lnh hoc mt khi lnh ri s m kha
cui cu hoc khi lnh . C# cung cp h tr trc tip kha cht thng qua t cht
lock. Ta s tra qua theo mt i tng qui chiu v theo sau t cht l mt khi lnh.
lock(expression) statement-block

Trong v d trn, c c kt qu nh mong mun, ta s sa hm


Incrementer li nh sau:
try
{
lock (this)
{
while (counter < 1000)
{
int temp = counter;
temp++;
Thread.Sleep(1);
counter = temp;
Console.WriteLine("Thread {0}. Incrementer: {1}",
Thread.CurrentThread.Name, counter);
}
}
}// Cc khi catch v finally khng thay i

Kt qu t c l:

Page | 41

Hnh 2. 15. Kt qu chng trnh s dng ng b ha.


Vic ng b cc lung l quan trng trong cc ng dng a lung. Tuy nhin
c mt s li tinh vi v kh kim sot c th xut hin c th l deadlock v race
condition.
2.4.4.2. Deadlock.
Deadlock l mt li m c th xut hin khi hai lung cn truy nhp vo cc ti
nguyn b kho ln nhau. Gi s mt lung ang chy theo on m sau, trong A, B
l hai i tng tham chiu m c hai lung cn truy nhp:
lock (A)
{
// do something
lock (B)
{
// do something
}
}

Vo cng lc 1 lung khc ang chy :


lock (B)
{
// do something
lock (A)
{
// do something
}
}

C th xy ra bin c sau: lung u tin yu cu mt lock trn A, trong khi vo


cng thi im lung th hai yu cu lock trn B. Mt khong thi gian ngn sau,
lung A gp cu lnh lock(B), v ngay lp tc bc vo trng thi ng, i cho lock
Page | 42

trn B c gii phng. V tng t sau , lung th hai gp cu lnh lock(A) v


cng ri vo trng thi ng ch cho n khi lock trn A c gii phng . Khng may,
lock trn A s khng bao gi c gii phng bi v lung u tin m lock trn A
ang ng v khng thc dy cho n khi lock trn B c gii phng iu ny cng
khng th xy ra cho n khi no lung th hai thc dy. Kt qu l deadlock. C hai
lung u khng lm g c, i ln nhau gii phng lock. Loi li ny lm ton ng
dng b treo, ta phi dng Task Manager hy n.
Deadlock c th c trnh nu c hai lung yu cu lock trn i tng theo
cng th t . Trong v d trn nu lung th hai yu cu lock cng th t vi lung
u, A u tin ri ti b th nhng lung m lock trn a u s hon thnh nhim v
ca n sau cc lung khc s bt u.
2.4.4.3. Race condition.
Race condition l ci ci g tinh vi hn deadlock. N him khi no dng vic
thc thi ca tin trnh , nhng n c th dn n vic d liu b li. Ni chung n xut
hin khi vi lung c gng truy nhp vo cng mt d liu v khng quan tm n cc
lung khc lm g hiu ta xem v d sau :
Gi s ta c mt mng cc i tng, mi phn t cn c x l bng mt
cch no , v ta c mt s lung gia chng lm tin trnh ny. Ta c th c mt i
tung gi l ArrayController cha mng i tng v mt s int ch nh s phn t
c x l .tac phng thc:
int GetObject(int index)
{
// tr v i tng vi ch mc c cho
}

V thuc tnh read/write.


int ObjectsProcessed
{
// ch nh bao nhiu i tng c x l
}

By gi mi lung m dng x l cc i tng c th thi hnh on m sau:


lock(ArrayController)
{
int nextIndex = ArrayController.ObjectsProcessed;
Console.WriteLine(Object to be processed next is + NextIndex);
++ArrayController.ObjectsProcessed;
object next = ArrayController.GetObject();
}

Page | 43

ProcessObject(next);

Nu ta mun ti nguyn khng b gi qu lu , ta c th khng gi lock trn


ArrayController trong khi ta ang trnh by thng ip ngi dng . Do ta vit li
on m trn:
lock(ArrayController)
{
int nextIndex = ArrayController.ObjectsProcessed;
}
Console.WriteLine(Object to be processed next is + NextIndex);
lock(ArrayController)
{
++ArrayController.ObjectsProcessed;
object next = ArrayController.GetObject();
}
ProcessObject(next);

Ta c th gp mt vn . Nu mt lung ly ly i tng (i tng th 11


trong mng) v i ti trnh by thng ip ni v vic x l i tng ny. Trong khi
lung th hai cng bt u thi hnh cng on m gi ObjectProcessed, v quyt
nh i tng x l k tip l i tng th 11, bi v lung u tin vn cha c
cp nht.
ArrayController.ObjectsProcessed trong khi lung th hai ang vit n mn
hnh rng by gi n s x l i tng th 11, lung u tin yu cu mt lock khc
trn ArrayController v bn trong lock ny tng ObjectsProcessed. Khng may, n qu
tr. C hai lung u ang x l cng mt i tng v loi tnh hung ny ta gi l
Race Condition.
2.5. Lp trnh x l nh trong C#
2.5.1. Mt s khi nim x l nh.
2.5.1.1. Khi nim nh.
Thng tin v vt th hay quang cnh c chiu sng m con ngi quan st v
cm nhn c bng mt v h thng thn kinh th gic.
Biu din nh v mt ton hc.
F(x,y) : trong x, y l ta khng gian hai chiu v f l ta ca
chi (nh n sc), mu (i vi nh mu).
Ch : x,y bin thin lin tc v f cng lin tc.
Mt s nh thng c biu din nh mt ma trn cc im nh. Trong
mi im nh c th c biu din bng.
Page | 44

nh nh phn (1 bit).
nh a mc xm (8 bit).
nh mu (16, 24 bit).
nh c biu din di dng ma trn cc im nh c gi l nh bitmap.
nh c chp mn hnh thng thu li nm trong h mu RGB, c c
trng bi ba mu : mu ( Red - R ),mu xanh l cy (Green - G ), mu xanh nc
bin (Blue - B) to ln khng gian mu c trng cho im nh v to ln mu sc ti
im nh .

Hnh 2. 16. Biu din nh trong h mu RGB.


2.5.2. K thut x l nh c bn.
2.5.2.1. Thut ton ct nh.

Hnh 2. 17. M t thut ton ct nh.

Page | 45

Vi mi u vo, nh lun c thu thp di dng ma trn im nh (v mi


im nh c trng bi cc thng tin ring). V d ta thu c ma trn im nh nh
sau :

Hnh 2. 18. M t ma trn im nh.


u vo : nh ban u, vng ct ly thng tin (x , y , w , h).
u ra : Vng nh mong mun.
T tng thut ton :
Khi to mt nh c kch thc bng vi kch thc vng nh cn ct.
Nhy con tr chut n dng th y.
Duyt nh theo tng dng cho n ht w dng, duyt n ta x, v
gn w gi tr im nh vo ch.
2.5.2.2. Thut ton so snh hai nh bitmap.

Hnh 2. 19. Minh ha thut ton so snh nh.

Page | 46

Chng ta s thc hin vic chp mn hnh desktop lin tc, v tin hnh so snh
gia hai nh vi nhau, nu c s khc bit gia hai nh th tin hnh khoanh vng
khc bit v ct nhng im khc bit (s dng thut ton ct nh).
u vo : Ta s a vo 2 nh chp mn hnh so snh.
u ra : Vng nh thay i.
T tng thut ton.
Chia mi nh thnh ma trn 10x10 vi Rectangle.
Sau ct tng Rectangle hai nh ra em so snh vi nhau.
Thc hin vic so snh tng pixel ca hai Rectangle vi nhau nu mt
trong cc pixel thay i th Rectangle b thay i.
Ta s ly ra Rectangle b thay i .
2.6. Mt s k thut khc.
2.5.1. Cc hm API.
2.5.1.1. Khi nim API.
API l vit tt ca Application Programming Interface (Giao din lp trnh ng
dng). API cung cp hu ht cc tnh nng thng dng cho tt c cc chng trnh
chy trn nn Window. Hu ht cc hm API thng c cha trong file DLL trong
th mc ca h thng Window (thng l C:\Windows\System).
2.5.1.2. Cc thnh phn ca Windows API.
C 4 thnh phn to ln Windows API.
Cc hm (Function) l thnh phn chnh ca Windows API, chng c
cha trong cc file DLL v c th c truy xut mt cch d dng bi
cc chng trnh trn nn Windows.
Cc cu trc (Structure) nhiu hm API i hi mt cu trc phi c
truyn cho chng c th vn chuyn mt lng ln thng tin m m
khng cn phi dng qu nhiu i s. Cc cu trc ny c dng trong
hm API nhng chng ta phi t nh ngha.
Cc hng c t tn (name constant) cng nh cu trc, cc hng phi
c nh ngha r rng trong chng trnh.
Cc hm Callback (Callback Function) v mt khi nim, cc hm
Callback ngc vi cc hm API. Mt hm Callback c nh ngha
hon ton trong chng trnh ca bn. Sau hm ny s c mt hm
API khc gi n khi thc hin mt tc v no . Cc hm Callback
cung cp mt cch thc chng trnh ca bn c th can thip trc
tip vo mt tc v no .
Page | 47

2.5.1.3. Cch dng cc hm API.


2.5.1.3.1. Cch khai bo.
[DllImport(Tn th vin dll)]
Public static extern <kiu> <Tn hm> (<Cc tham s truyn vo >);
Trong
<Tn hm > l cc hm trong th vin DLL.
<Tn th vin DLL> trc tin cn phi import vo mt th vin DLL
c th.
<kiu> truyn vo mt kiu d liu no cho cc hm trong th vin
API.
s dng c cc hm API th chng ta cn phi khai bo th vin sau y
System.Runtime. InteropServices.
Khai bo cc hng API h tr.
<Mc tham chiu> const <kiu> <Tn hng> = <gi tr c th>;
Trong
<Mc tham chiu> l mc truy xut khc nhau public, private ..
<kiu> truyn vo mt kiu d liu no cho cc hng API.
<Tn hng> Khai bo mt tn thng trong th vin API.
<Gi tr c th> Mi mt hng API u c mt gi tr c th truyn vo.
2.5.1.3.2. Cc file th vin ph bin.
Advapi32.dll : Th vin API nng cao bao gm bo mt v registry.
Comdlg32.dll : Th vin API dng cho cc hp thoi (Common dialog API
library).
Gdi32.dll : Th vin API dng cho giao din ng dng ho.
Kernel32.dll : Gm cc hm c trng cho h iu hnh.
Netapi32.dll : Th vin Network API.
User32.dll : Th vin to cho giao din ngi dng.
Version.dll : Th vin cc phin bn (Version library)
Winmm.dll : Th vin Windows a phng tin.
2.5.1.4. S dng cc hm API.
// Tm kim ca s chng trnh trong windows
[DllImport("user32.dll")]
public static
lpWindowName);

extern

IntPtr

FindWindow(string

lpClassName,

string

Page | 48

//Tm kim ca s con khi bit c Handle ca ca s cha.


[DllImport("user32.dll")]
public static extern IntPtr FindWindowEx(IntPtr hWnd1, IntPtr hWnd2, string
lpsz1, string lpsz2);
//Active mt ca s chng trnh.
[DllImport("user32.dll")]
public static extern bool SetForegroundWindow(IntPtr hWnd);
//SendMessageW: gi thng ip n ca s ng dng (thng ip
unicode)
[DllImport("user32.dll")]
public static extern IntPtr SendMessageW(IntPtr hWnd, uint Msg, IntPtr
wParam, IntPtr lParam);
//ly caption ca ca s ng dng
[DllImport("user32.dll")]
public static extern int GetWindowText(IntPtr hWnd, StringBuilder lpString,
int nMaxCount);
////Cc hm v menu
////GetMenu: ly menu ca ca s ng dng.
[DllImport("user32.dll")]
public static extern IntPtr GetMenu(IntPtr hwnd);
//GetSubMenu: ly submenu khi c gi tr ca Menu
[DllImport("user32.dll")]
public static extern IntPtr GetSubMenu(IntPtr hMenu, int nPos);
//GetMenuItemID: ly Id ca menu trong Submenu
[DllImport("user32.dll")]
public static extern IntPtr GetMenuItemID(IntPtr hMenu, int nPos);
//EnableMenuItem: set Enable ca menu(tham s wEnable c gi tr: 1
hoc 0)
[DllImport("user32.dll")]
public static extern
wIDEnableItem, int wEnable);

IntPtr

EnableMenuItem(IntPtr

hMenu,

IntPtr

Trn y ch l mt s hm c bn c p dng vo bi ton. Ngoi ra cn rt


nhiu cc hm khc c s dng.
2.5.2. XML.
2.5.2.1. Khi nim v XML.

Page | 49

XML l ngn ng xy dng cu trc ti liu vn bn, da theo chu n SGML


(Standard Generalized Markup Language: siu ngn ng c kh nng sinh ngn ng
khc).
XML cng ging nh HTML u l ngn ng nh du, nhng iu cn ni
y l s ra i ca XML khc phc cho mt s yu km ca HTML. HTML v
XML u s dng cc tag nhng cc tag ca HTML l mt b d liu tag c xy
dng v nh ngha trc, tc l ngi lp trnh phi tun th theo cc th nh
ngha ca HTML, hin HTML c khong hn 400 tag, nh ht 400 tag ny cng
khng c g kh khn i vi ngi lp trnh web chuyn nghip nhng tht kh i
vi nhng ngi khng chuyn. Hn na cc tag ca HTML khng ni ln c m t
d liu trong . Nhng i vi XML th hon ton khc bi v tag trong XML l do
ngi lp trnh nh ngha v mi tag l mt m t d liu m ngi lp trnh mun
truyn t.
2.5.2.2. Cc quy tc vit th XML.
Phi c mt phn t gc duy nht n cha tt c cc phn t trong ti liu.
Mi tag m phi c mt tag ng (Ging nh trong HTML).
Tn th XML phn bit gia ch hoa v ch thng (khc bit so vi th
HTML khng phn bit hoa thng).
Mi phn t con phi nm trn bn trong phn t cha ca n (cc phn t lng
nhau phi ng cp).
Gi tr thuc tnh phi c t trong du nhy kp hoc nhy n.
V d .
<Order>
<OrderDate>2002-6-14</OrderDate>
<Customer>Helen Mooney</Customer>
<Item>
<ProductID>1</ProductID>
<Quantity>2</Quantity>
</Item>
<Item>
<ProductID>4</ProductID>
<Quantity>1</Quantity>
</Item>
</Order>

2.5.3. Registry trong C#.


2.5.3.1. Khi nim Registry.
Page | 50

Registry l mt c s d liu dng lu tr thng tin v nhng s thay i,


nhng la chn, nhng cu hnh t ngi s dng Windows. Registry bao gm tt c
cc thng tin v phn cng, phn mm, ngi s dng. Registry lun c cp nht
khi ngi s dng tin hnh s thay i Control Panel, File Associations, v mt s
thay i trong Menu Options ca mt s ng dng, ...
2.5.3.2. Cc lp .Net Registry.
lp trnh Registry trong C# ta cn s dng lp Microsoft.Win32 cho php
thc hin c, vit vi Registry mt cch d dng. Sau y l cc namespace ny.
Registry : Mt tru tng ha cao cp v bn thn Registry, vi tt c cc lp
c gn lin.
RegistryKey : y l lp ct li cho php bn g thm vo, xa b thng tin,
sa thng tin c lu tr trong Registry.
RegistryHive: y ch l mi khun t ong (hive) trn Registry.
Registry c cu trc hnh cy, tng t nh cu trc cy th mc vi rt nhiu
nhnh ta ra ty theo cu trc ng dng. Thng thng th Registry ca Windows c 5
nhnh chnh nh sau.
HKEY_CLASSIES_ROOT (HKCR): cha nhng chi tit v cc loi tp tin
(.txt,.doc,) v nhng ng dng no c kh nng m cc tp tin loi no. Ngoi ra,
n cn cha nhng thng tin ng k i vi tt c cc cu kin Com.
HKEY_CURRENT_USER (HKCU): cha nhng chi tit lin quan n
nhng s thch ca ngi s dng hin c ng nhp trn my tnh.
HKEY_LOCAL_MACHINE (HKLM): l mt hive s cha nhng chi tit
ca tt c cc phn mm v phn cng c ci t trn my. N cng bao gm
HKCR hive: HKCR hin tht s khng phi l 1 hive c lp t thn, nhng n gin
l mt nh x tin li trn Registry key.
HKEY_USERS (HKUSR): cha nhng chi tit lin quan n s thch ca tt
c cc ngi s dng. Nh bn c th ch i, n cng cha hive HKCU, n gin l
1 nh x ln 1 trong nhng key trn HKEY_USERS
HKEY_CURRENT_CONFIG: cha nhng chi tit lin quan n phn cng
trn my tnh.
Tn thuc tnh

M t

Name

Tn ca key (Read - Only).

SubKeyCount()

S lng sub key.

ValueCount()

Cc gi tr trn key.

Tn phng thc

M t

Close()

ng li key.
Page | 51

CreateSubKey()

To mt SubKey mi.

DeleteSubKey()

Xa b mt key c ch nh.

DeleteSubKeyTree()

G b mt cch quy mt SubKey.

GetValue()

Hm tm li gi tr c khai bo.

GetValueName()

Hm ny cho tm li 1 bn dy chui ch cha tt c cc tn tr


(value name).

OpenSubKey()

Hm tr v mt gi tr SubKey.

SetValue()

Hm t mt gi tr c ch nh khng phn bit hoa


thng.

V d ghi key phn mm khi ng cng h thng s dng Registry.


RegistryKey
rkApp
=
Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersi
on\\Run", true);
if (rkApp != null)
rkApp.SetValue(Application.ProductName,
Application.ExecutablePath.ToString());

Bng 2. 11. Cc thnh phn chnh ca Registry.


2.7. Kt lun chng.
Trong chng ny chng em a ra nhng kin thc c bn cn thit trong lp
trnh mng vi C# ni ring v cc ngn ng khc ni chung. V mt s cc k thut
nh lp trnh x l nh, lp trnh a nhim, lp trnh nng cao vi Windows. V mt s
cc k thut truyn ti thng tin trong mng Lan ni ring v mng Internet ni chung.
Qua chng ny chng ta c th hiu c nhng kin thc quan trng v cn thit
xy dng ln phn mm Lp hc o trong mng Lan.

Page | 52

CHNG 3. NG DNG PHN MM QUN L LP HC O


3.1. Phn tch thit k h thng.
3.1.1.Kho st hin trng v lp d n.
3.1.1.1. Kho st h thng hin ti.
Vi s pht trin khng ngng ngh ca khoa hc vo i sng x hi. Vic s
dng cc cng ngh thng tin vo trong cc trng i Hc, Cao ng v cc trung
tm khng cn l xa l vi chng ta. Vic ng dng cng ngh mng Lan vo trong
ging dy ngy cng ph bin v c nhiu pht trin vt bn. Tuy vy nhng vic qu
l cc phng hc trong mng Lan vn cn rt nhiu vn bt cp cn c gii
quyt.
Tn km trong khu u t my chiu, bng vit cc.
Vic s dng bng vit, bi phn c th gy nh hng ti sc khe ca
ging vin.
Kh khn trong vic chia s ti liu hc tp cho cc hc vin.
Khng c nhiu s tng tc gia ging vin v hc sinh.
Hc sinh gp kh khn trong vic hc, v thc hnh nh.
Do vy nhm chng em xut xy dng phn mm lp hc o trong mng
Lan nhm gii quyt phn no cc vn trn v gp phn a cc ng dng cng
ngh thn tin vo trong thc t.
3.1.1.2. xut tng xy dng h thng mi.
Do vic ging dy cn nhiu bt cp c nu trn. Nhm chng em
a ra cc xut v tng gii quyt tng vn trn.
Vic s dng cng ngh chia s mn hnh s tit kim c h thng
bng, my chiu v cn trnh c bi phn lm nh hng ti sc khe
ging vin.
Vi phn mm ny vic chia s ti liu ca ging vin cho hc sinh gi
y tr ln rt d dng v thun tin v gip ch rt nhiu cho vic
hc tp ti nh ca cc hc vin.
Gio vin c th gii p thc mc ca hc sinh m khng tn nhiu thi
gian, v bng cng ngh iu khin t xa. y thc s l mt cng ngh
tuyt vi bi n cn cho php ging vin c th theo di cc hot ng
ca hc vin mt cch d dng.
Vic s dng phn mm cng trnh c cc gian ln trong qu trnh
hc tp, bng cng ngh kha USB.
3.1.1.3. M t hot ng ca h thng.
Page | 53

H thng s lu tr thng tin v cc my trong mng Lan gm tn my, a ch


Ip ca cc my trong phng hc, trng thi hin ti ca cc my.
a. Giai on bt u bui hc.
Ging vin s dng phn mm t bn pha Server t chc lp hc v
cho php my cc hc vin (my Client) ng nhp vo.
Sau khi hc vin ng nhp vo h thng th Server s tin hnh lu li
cc thng tin ca my hc vin gip ta d dng trong vic qun l.
b. Cc hot ng trong bui hc.
Ging vin bt u bi ging bng tnh nng chia s mn hnh. Mn hnh
ca my ging vin s xut hin trn ton b my ca cc hc vin, vic
theo di tr ln d dng hn.
Ging vin c th disable/ enable chut & bn phm, usb, c th tt, khi
ng li, log off, hoc c th kha mn hnh ca mt hc vin bt k.
Ging vin c th trc tip gii p thc mc cho hc vin ngay trn my
tnh ca mnh qua chc nng iu khin my tnh t xa.
Trong sut qu trnh hc ging vin c th theo di v kim sot hot
ng ca cc hc vin.
c. Kt thc bui hc.
Ging vin c th chia s video bi ging ca mnh v gi ti ng lot
cc my hc vin (c th gi ti liu hc tp khc : sch in t, video,
cc m ngun ...).
Cho php hc vin c s dng Usb copy ti liu gip cho vic
hc ti nh ca hc vin d dng hn.
3.1.2. Phn tch cc chc nng ca h thng.
3.1.2.1. M hnh phn cp chc nng.

Page | 54

Hnh 3. 1. M hnh phn cp chc nng.


3.1.2.2. Gii thch r tng chc nng ca h thng.
Qua kho st quy trnh hot ng ca qun l phng my ca trng i Hc,
v Cao ng ta c th nhn thy h thng bao gm cc chc nng.
Chia s mn hnh.
Chia s ti liu.
Chat message.
Remote desktop (iu khin my tnh t xa).
Disable/Enable usb.
Disable/Enable mouse v keyboard.
Lock/Unlock computer.
Turn off computer.
3.1.2.2.1. Chc nng Chia s mn hnh.

Page | 55

Hnh 3. 2. Hnh minh ha chc nng chia s mn hnh.


Khi ging vin ging bi trn lp. Nhng thao tc trn mn hnh my tnh ca
ging vin s hin th trn ton b cc my tnh ca hc vin trong phng hc. Vic
ny c th gip hc vin d dng quan st hn.

Hnh 3. 3. Cc ni dung ging dy c trn mn hnh cc my hc vin.


Ging vin cng c th chia s mn hnh ca mt hc vin cho ton b cc hc
vin khc. Vic ny phc v cho mc ch gii p thc cho hc vin.

Page | 56

Hnh 3. 4. Minh ha chia s mn hnh cho ton b hc vin.


Ngoi ra tnh nng chia s mn hnh c thm chc nng ghi li mn hnh ca
ging vin. N gip cho ging vin c th chia s cho hc vin thm ti liu hc nh
nu cn thit.
3.1.2.2.2. Chc nng chia s ti liu.

Hnh 3. 5. Minh ha cc ti liu c chia s.


Ti liu chia s c th bao gm:
Sch in t.
Video bi ging.
Cc bi vit.

Ti liu lu tr cc bui tho lun.

Ti liu c chia s trn my ch Server ca gio vin. Gio vin c th chia


s bt k ti liu no cho hc vin.
3.1.2.2.3. Chc nng Chat message.
Trong qu trnh hc tp ging vin c th gii p nhng thc mc hoc nhng
vn mun a ra. M khng mun chia s ti liu, chc nng chat message c
sinh ra gii quyt vn ny.
Ngoi ra chc nng ny cn gip cho hc vin gi yu cu gii p thc mc
ti ging vin khi c vng mc trong qu trnh hc tp. iu ny gip tng cht
lng dy v hc trong lp.
3.1.2.2.4. Chc nng Remote desktop.
Page | 57

Hnh 3. 6. Minh ha chc nng chia s mn hnh.


Tnh nng iu khin my tnh t xa, nhm gip gio vin c th gii p thc
mc ca cc hc vin mt cch d dng v thun tin.
3.1.2.2.5. Chc nng Disable/Enable usb.
Nhm mc ch chng gian ln trong qu trnh thi c, hoc nghim cm hc
vin s dng Usb c th gy truyn nhim virus trong my tnh. Hoc c th cho php
hc vin s dng Usb copy ti liu phc v cho vic hc tp ti nh.
3.1.2.2.6. Chc nng Disable/Enable mouse v keyboard.
Chc nng disable/enable cho php ging vin c th kha thit b chut, bn
phm ca mt hay nhiu my hc vin bt k. N s c th gip vic qun l phng
my, hoc qun l th c trong phng my.
3.1.2.2.7. Chc nng Lock/Unlock computer.
Khi mun kha my tnh y thc s l mt chc nng tuyt vi, n cho php
ging vin c th kha my ca hc vin bt k nu pht hin thy vi phm ni quy
ca phng hc.
3.1.2.2.7. Chc nng Turn off computer.
Chc nng ny cho php ging vin c th thc hin tt my, khi ng li, Log
off mt hay nhiu my bt k. Vic ny s rt thun tin cho qu trnh tt my, thay v
ging vin phi n tng my thc hin thao tc. Ging vin c th ngi trc tip trn
my tnh ca mnh thc hin iu ny.
3.1.2.3. M hnh lung d liu.

Page | 58

Hnh 3. 7. M hnh lung d liu.


3.2. Xy dng cc lp x l chnh.
3.2.1. Cc lp bn pha Server.
3.2.1.1. Lp ServerReceiver.
C nhim v l nhn cc gi tin t bn my cc Client gi cho Server v tr ra
thng bo.
M hnh

M ngun Class ServerReceiver


public class ServerReceiver
{
public Socket client;// client da duoc accept
public int clientIndex;// chi so client trong listClient

Page | 59

public
deleReceive;// --- Top

DelegateControlMessageServerReceiveFromClient

public Thread threadReceive;// thread de nhan du lieu dong bo


// Khoi tao
public ServerReceiver(Socket client, int clientIndex,
DelegateControlMessageServerReceiveFromClient
deleReceive)
{
this.client = client; this.clientIndex = clientIndex;
this.deleReceive = deleReceive;
}
// Bat dau nhan du lieu
public void StartReceive()
{
threadReceive = new Thread(OnReceive);
threadReceive.Start();
}
// Thuc hien nhan du lieu kem kich thuoc cua du lieu
public void OnReceive()
{
while (true)
{
try
{
int total = 0;
int receve;
byte[] dataSize = new byte[4];
receve = client.Receive(dataSize, 0, 4, SocketFlags.None);
int size = BitConverter.ToInt32(dataSize, 0);
int dataLeft = size;
byte[] message = new byte[size];
while (total < size)
{
receve = client.Receive(message, total, dataLeft,
SocketFlags.None);
if (receve == 0)
{
message = null;

Page | 60

return;
}
total += receve;
dataLeft -= receve;
}
deleReceive(message, clientIndex);
}
catch (Exception ex)
{
StopReceive();
MessageBox.Show(ex.Message, String.Format("LAN Virtual
Class v1.0 - ServerReceiver - OnReceive() - listClient[{0}]", clientIndex),
MessageBoxButtons.OK, MessageBoxIcon.Error);
break;
}
}
}
// Dung viec nhan du lieu
public void StopReceive()
{
try
{
if (client != null)
{
client.Close(); client = null;
}
threadReceive.Abort();
threadReceive.Join();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "LAN Virtual Class v1.0 ServerReceiver
StopReceive()",
MessageBoxButtons.OK,
MessageBoxIcon.Error);
}
}
}

3.2.1.2. Lp ServerSender.
Page | 61

C Chc nng l gi cc gi tin t Server cho cc my Client.


M hnh

M ngun.
public class ServerSender
{
public Socket client;// client da duoc ket noi den server
public int clientIndex;// chi so cua client trong listClient cua server
public byte[] message;// tin nhan can gui di
public DelegateControlMessageServerSendToClient deleSend;// --- Xem phan
Delegate ben tren
public Thread threadSend;// --- thread de thuc hien viec send dong bo
// Khoi tao
public ServerSender(Socket client, int clientIndex,
DelegateControlMessageServerSendToClient deleSend)
{
this.client = client; this.clientIndex = clientIndex;
this.deleSend = deleSend;
}
// Bat dau send du lieu
public void StartSend()
{
while (threadSend == null || threadSend.ThreadState ==
ThreadState.Stopped)
threadSend = new Thread(OnSend);
threadSend.Start();
}
// Thuc hien send du lieu kem kich thuoc cua du lieu

Page | 62

public void OnSend()


{
try
{
int total = 0;
int size = message.Length;
int dataLeft = size;
int sent;
byte[] dataSize = new byte[4];
dataSize = BitConverter.GetBytes(size);
sent = client.Send(dataSize);
while (total < size)
{
sent = client.Send(message, total, dataLeft, SocketFlags.None);
total += sent;
dataLeft -= sent;
}
deleSend(message, clientIndex);
}
catch (ThreadAbortException)
{
}
catch (Exception ex)
{
StopSend();
threadSend.Abort();
MessageBox.Show(ex.Message, "LAN Virtual Class v1.0 - ServerSender
- OnSend()", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
// Dung viec send du lieu
public void StopSend()
{
try
{
if (client != null)
{

Page | 63

client.Close(); client = null;


}
threadSend.Abort();
threadSend.Join();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "LAN Virtual Class v1.0 - ServerSender
- StopSend()", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}

3.2.1.3. Lp ServerTCP.
Khi to mt i tng Server v i din cho Server.
M hnh

M ngun.
public class ServerTcp
{
public Socket server;// socket server
public List<Socket> listClient;// danh sach cac client ket noi den server
public List<ServerSender> listSender;// danh sach cac sender cho cac client
public List<ServerReceiver> listReceiver;// danh sach cac receiver cho cac
client

Page | 64

public DelegateControlMessageServerReceiveFromClient deleReceive;// --Top


public DelegateControlMessageServerSendToClient deleSendToClient;// --Top
public
deleSendToListClient;// --- Top

DelegateControlMessageServerSendToListClient

public DelegateSetControlServer deleSetControl;// --- Top


public DelegateUpdateListClient deleUpdateListClient;// --- Top
// Bat dau server, chap nahn cac client ket noi den, voi backlog la so luong
toi da client ket noi duoc chap nhan
public void StartServer(IPEndPoint localIPEP, int backlog)
{
try
{
listClient = new List<Socket>(0);
listSender = new List<ServerSender>(0);
listReceiver = new List<ServerReceiver>(0);
EndPoint localEP = (EndPoint)localIPEP;
server = new Socket(AddressFamily.InterNetwork, SocketType.Stream,
ProtocolType.Tcp);
server.Bind(localEP);
server.Listen(backlog);
deleSetControl(true);
server.BeginAccept(new AsyncCallback(AcceptCallBack), null);
}
catch (Exception ex)
{
StopServer();
MessageBox.Show(ex.Message, "LAN Virtual Class v1.0 - ServerTcp StartServer()", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
// Thuc hien chap nhan cac client ket noi
public void AcceptCallBack(IAsyncResult iAR)
{
try
{
Socket client = server.EndAccept(iAR);
listClient.Add(client);

Page | 65

// ---> Can kiem tra xem client da ton tai hay chua? Neu ton tai roi thi
thay the cai cu = cai moi
// Neu khong thi add --> thuc hien = IndexClient(Socket client)// Chua
giai quyet duoc
listReceiver.Add(new ServerReceiver(listClient[listClient.Count - 1],
listClient.Count - 1, deleReceive));
listReceiver[listClient.Count - 1].StartReceive();
listSender.Add(new ServerSender(listClient[listClient.Count - 1],
listClient.Count - 1, deleSendToClient));
// Gui thong tin server cho client
for (int i = 0; i < 5; i++)
SendMessageToClient(listClient.Count - 1,
BufferData.CreateMessage(TypeMessage.Command,
Command.ServerInfo,
BufferData.CreateInforMes
sage()));
// Gui clientIndex cho client
SendMessageToClient(listClient.Count - 1,
BufferData.CreateMessage(TypeMessage.Command,Command.ClientIndex,BitCon
verter.GetBytes(listClient.Count - 1)));
deleUpdateListClient();
server.BeginAccept(new AsyncCallback(AcceptCallBack), null);
}
catch// (Exception ex)
{
// Loi do dong server
//MessageBox.Show(ex.Message, "LAN Virtual Class v1.0 - ServerTcp AcceptCallBack()", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
// Phuong thuc tin kiem client trong listClient va tra ve vi tri dau tien ma
client xuat hien trong listClient
public int IndexClient(Socket client)
{
int i = 0;
while (i < listClient.Count && listClient[i].Equals(client) == false)
i++;
return (i < listClient.Count) ? i : -1;

Page | 66

}
// Thuc hien send mot tin nhan toi tat ca cac client trong listClient ket noi
den server
public void SendMessageToAllClient(byte[] message)
{
for (int i = 0; i < listClient.Count; i++)
SendMessageToClient(i, message);
deleSendToListClient(message);
}
// Thuc hien gui tin nhan den mot client co chi so la clientIndex trong
listClient ket noi
public void SendMessageToClient(int clientIndex, byte[] message)
{
if (listClient[clientIndex] != null)
{
listSender[clientIndex].message = message;
listSender[clientIndex].StartSend();
listSender[clientIndex].threadSend.Join();
}
}
// Thuc hien gui tin nhan den mot list cac client duoc quy dinh trong
listClientIndex
public void SendDataToListClient(byte[] message, List<int> listClientIndex)
{
foreach (int clientIndex in listClientIndex)
SendMessageToClient(clientIndex, message);
deleSendToListClient(message);
}
// Ngat ket noi cua mot client co chi so la clientIndex trong listClient
public void DisAcceptClient(int clientIndex)
{
if (listClient[clientIndex] != null)
{
// Gui tin nhan offline client de client update lai tinh trang ket noi
if (listReceiver[clientIndex] != null)
{
listReceiver[clientIndex].StopReceive();
listReceiver[clientIndex] = null;

Page | 67

}
SendMessageToClient(clientIndex,
BufferData.CreateMessage(TypeMessage.Command,
Command.OffLineClient,
null));
if (listSender[clientIndex] != null)
{
listSender[clientIndex].StopSend();
listSender[clientIndex] = null;
}
listClient[clientIndex].Close();
listClient[clientIndex] = null;
}
}
// Ngat ket noi cua moi client va dung server
public void StopServer()
{
try
{
if (listClient != null)
{
for (int i = 0; i < listClient.Count; i++)
{
DisAcceptClient(i);
}
listClient = null;
}
if (server != null)
{
server.Close();
server = null;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "LAN Virtual Class v1.0 - ServerTcp StopServer()", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
finally

Page | 68

{
deleSetControl(false);
}
}
}

3.2.1.4. Lp BuffData.
C nhim v ly cc thng tin ca my Server gi cc gi tin Broadcast cho tt
c cc my trong mng Lan bao gm thng tin v Server v a ch IP ca Server.
M hnh.

M ngun.
// Tao ra du lieu quoang ba la su ket hop cua dia chi IP local va chuoi tin quang ba
public static byte[] CreateDataBroadCast(string messageBroadcast)
{
List<byte> result = new List<byte>(0);
string localIPAddress = GetLocalIPAddress().ToString();
result.AddRange(BitConverter.GetBytes(localIPAddress.Length));
result.AddRange(Encoding.UTF8.GetBytes(localIPAddress));
result.AddRange(Encoding.UTF8.GetBytes(messageBroadcast));
return result.ToArray();
}
// Lay ra dia chi IP cua Server
public static string GetRemoteIPAddress(byte[] dataBroadCast)

Page | 69

{
byte[] dataSizeRemoteIPAddressString = new byte[4];
try
{
Array.Copy(dataBroadCast, 0, dataSizeRemoteIPAddressString, 0, 4);
int sizeRemoteIPAddressString
BitConverter.ToInt32(dataSizeRemoteIPAddressString, 0);
byte[]

dataRemoteIPAddressString

=
new

byte[sizeRemoteIPAddressString];
Array.Copy(dataBroadCast, 4, dataRemoteIPAddressString, 0,
sizeRemoteIPAddressString);
return Encoding.UTF8.GetString(dataRemoteIPAddressString);
}
catch
{
return "";
}
}
// Lay chuoi tin quang ba tu du lieu cua tin quang ba
public static string GetMessageBroadCast(byte[] dataBroadCast)
{
byte[] dataSizeRemoteIPAddressString = new byte[4];
try
{
Array.Copy(dataBroadCast, 0, dataSizeRemoteIPAddressString, 0, 4);
int sizeRemoteIPAddressString
BitConverter.ToInt32(dataSizeRemoteIPAddressString, 0);

byte[] dataMessageBroadCast = new byte[dataBroadCast.Length - 4 sizeRemoteIPAddressString];


Array.Copy(dataBroadCast, 4 + sizeRemoteIPAddressString,
dataMessageBroadCast,
0, dataMessageBroadCast.Length);
return Encoding.UTF8.GetString(dataMessageBroadCast);
}
catch
{
return "";
}
}

Page | 70

3.2.2. Cc lp bn pha Client.


3.2.2.1. Lp ClientReceiver.
Lp ny thc hin vic nhn cc gi tin t bn pha Server gi cho Client.
M hnh

M ngun
public class ClientReceiver
{
public Socket server;// server da duoc connect
public DelegateControlMessageClientReceiveFromServer deleReceive;// --Top
public Thread threadReceive;// thread de nhan du lieu
// Khoi tao
public
ClientReceiver(Socket
DelegateControlMessageClientReceiveFromServer deleReceive)

server,

{
this.server = server; this.deleReceive = deleReceive;
}
// Bat dau receive
public void StartReceive()
{
threadReceive = new Thread(OnReceive);
threadReceive.Start();
}
// Trong qua trinh nhan du lieu
public void OnReceive()
{
while (true)
{

Page | 71

try
{
int total = 0;
int receve;
byte[] dataSize = new byte[4];
receve = server.Receive(dataSize, 0, 4, SocketFlags.None);
int size = BitConverter.ToInt32(dataSize, 0);
int dataLeft = size;
byte[] message = new byte[size];
while (total < size)
{
receve = server.Receive(message, total, dataLeft,
SocketFlags.None);
if (receve == 0)
{
message = null;
return;
}
total += receve;
dataLeft -= receve;
}
deleReceive(message);
}
catch (Exception ex)
{
StopReceive();
MessageBox.Show(ex.Message, "LAN Virtual Class v1.0 ClientReceiver - OnReceive()", MessageBoxButtons.OK, MessageBoxIcon.Error);
break;
}
}
}
// Dung viec nhan du lieu
public void StopReceive()
{
try
{
if (server != null)

Page | 72

{
server.Close();
server = null;
}
threadReceive.Abort();
threadReceive.Join();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "LAN Virtual Class v1.0 - ClientReceiver
- StopReceive()", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}

3.2.2.2. Lp ClientSender.
C nhim v gi cc gi tin t bn pha Client cho bn Server.
M hnh

M ngun
public class ClientSender
{
public Socket server;// socket server da connect
public byte[] message;// tin nhan can gui
public DelegateControlMessageClientSendToServer deleSend;// --- Top
public Thread threadSend;// thread de send
// Khoi tao
public
ClientSender(Socket
DelegateControlMessageClientSendToServer deleSend)

server,

{
this.server = server; this.deleSend = deleSend;

Page | 73

}
// Bat dau send du lieu
public void StartSend()
{
threadSend = new Thread(OnSend);
threadSend.Start();
}
// Thuc hien send du lieu dong bo
public void OnSend()
{
try
{
int total = 0;
int size = message.Length;
int dataLeft = size;
int sent;
byte[] dataSize = new byte[4];
dataSize = BitConverter.GetBytes(size);
sent = server.Send(dataSize);
while (total < size)
{
sent = server.Send(message, total, dataLeft, SocketFlags.None);
total += sent;
dataLeft -= sent;
}
deleSend(message);
}
catch (Exception ex)
{
StopSend();
MessageBox.Show(ex.Message, "LAN Virtual Class v1.0 - ClientSender OnSend()", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
// Dung viec send du lieu
public void StopSend()
{
try

Page | 74

{
if (server != null)
{
server.Close(); server = null;
}
threadSend.Abort();
threadSend.Join();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "LAN Virtual Class v1.0 - ClientSender StopSend()", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}

3.2.2.3. Lp ClientTCP.
Khi to mt i tng Client v i din cho Client.
M hnh

M ngun.
public class ClientTcp
{
public Socket server;// socket server ma client ket noi den
public ClientSender sender;// sender cua client
public ClientReceiver receiver;// receiver cua client
public DelegateControlMessageClientReceiveFromServer deleReceive;// --Top

Page | 75

public DelegateControlMessageClientSendToServer deleSend;// --- Top


public DelegateSetControlClient deleSetControl;// --- Top
public int clientIndex;
// Connect den server
public void Connect(IPEndPoint remoteIPEP)
{
try
{
server = new Socket(AddressFamily.InterNetwork, SocketType.Stream,
ProtocolType.Tcp);
server.BeginConnect(remoteIPEP,

new

AsyncCallback(ConnectCallBack), server);
}
catch (Exception ex)
{
DisConnect();
MessageBox.Show(ex.Message, "LAN Virtual Class v1.0 - ClientTcp Connect()", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
// Thuc hien ket noi
public void ConnectCallBack(IAsyncResult iAR)
{
try
{
server = (Socket)iAR.AsyncState;
server.EndConnect(iAR);
receiver = new ClientReceiver(server, deleReceive);
receiver.StartReceive();
sender = new ClientSender(server, deleSend);
// Gui thong tin client cho server
for (int i = 0; i < 5; i++)
Send(BufferData.CreateMessage(TypeMessage.Command,
Command.ClientInfo, BufferData.CreateInforMessage()));
deleSetControl(true);
}

Page | 76

catch// (Exception ex)


{
// Loi do dong client
//MessageBox.Show(ex.Message, "LAN Virtual Class v1.0 - ClientTcp ConnectCallBack()", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
// gui message toi server da ket noi
public void Send(byte[] message)
{
if (sender != null)
{
sender.message = message;
sender.StartSend();
}
}
// Ngat ket noi
public void DisConnect()
{
try
{
if (server != null)
{
// Gui tin offline den cho server de server cap nhat lai listClient
Send(BufferData.CreateMessage(TypeMessage.Command,
Command.OffLineClient, BitConverter.GetBytes(clientIndex)));
if (receiver != null)
{
receiver.StopReceive();
receiver = null;
}
if (sender != null)
{
sender.StopSend();
sender = null;
}
server.Close();
server = null;

Page | 77

}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "LAN Virtual Class v1.0 - ClientTcp DisConnect()", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
finally
{
deleSetControl(false);
}
}
}

3.3. Thit k giao din.

CHNG 5. KT LUN
Page | 78

5.1. Nhng kt qu t c.
Sau qu trnh nghin cu v trin khai ti Xy dng phn mm lp hc o
trong mng Lan thu c nhng kt qu sau y.
Tm hiu c cc cch thc lp trnh Socket v lp trnh .Net Remoting
trong C#.
Nghin cu cc kin thc lp trnh Windows nng cao nh lp trnh vi
cc hm API, lp trnh trn nn tng Registry.
Ngoi ra cn c kin thc nng cao v s l nh, lp trnh a lung, lp
trnh s kin Delegate.
Xy dng c hon chnh cc module chia s mn hnh, remote
desktop, v mt s chc nng khc.
5.2. Hng pht trin.
V c bn phn mm t c nhng vn t ra. Tuy nhin trong giai
on thc tp xy dng ln phn mm ny cn nhiu vn cn phi pht trin thm.
Xy dng mt phn mm LanVc hon chnh v hon ton min ph c
th thay th c phn mm Farstone Virtual Class c gi rt t v
thiu i chc nng quay phim mn hnh v VoIP.
Xy dng mt modul tch bit Remote desktop thnh mt sn phm
remote control over Internet c thm cc chc nng nh VoIP v chat
thoi c sc cnh tranh tt c th thay th phn mm thng dng hin
nay Teamviewer.
Xy dng thm c cc module Screen record ring bit m khng cn
phi ph thuc vo s dng cng c Windows Media Encorder s gip
vic quay video tr ln cht lng hn v c thm c chc nng ghi m
c ging ni trong video.
Hng pht trin tch hp thm vo phn mm thi trc nghim trong
mng Lan c cc chc nng thi, chm bi thi.
Hoc c th pht trin ln phn mm thnh mt phn mm dy hc trc
tuyn vi y cc chc nng nh ca phn mm Lp hc o trong
mng Lan.

TI LIU THAM KHO


[1]. Ingo Rammer, Advanced .Net Remoting (C# Edition), Impressions Book and
Journal Services, Inc (2002).
Page | 79

[2]. Andrew Krowczyk, Vinod Kumar, Nauman Laghari, Tim Parker, Srinivasa
Sivakumar, Professional_.NET_Network_Programming, Wrox Press Ltd.
[3]. Brent Rector, Introduction to .NET Remoting, Wise Owl Consulting, Inc
(2004).
[4]. Fiach Reid, Network programming in .NET with C# and VB.NET (Digital
Press), Elseviers Science & Technology Rights Department in Oxford (2004).
[5]. Richard Blum, Sybex_-_Csharp_Network_Programming, Sybex 2003.
[6]. Joe Mayo, C# 3.0 UNLEASHED , Copyright 2008 by Pearson Education,
Inc.
[7]. Simon Robinson, Christian Nagel, Jay Glynn, Morgan Skinner, Karli Watson,
Bill Evjen, Professional C# Third Edition, Wiley Publishing, Inc (2004).
[8]. Wei-Meng Lee , C# 2008 Programmers Reference , Wiley Publishing, Inc
(2009).
[9]. Joseph Albahari and Ben Albahari, C# 4.0 IN A NUTSHELL, OReilly Media,
Inc.
[10].o Lu Duy, Bi ging lp trnh mng vi C#, Sch in t.
[11].Ng B Hng, Nguyn Cng Huy, Gio trnh lp trnh mng vi Java, Khoa
Cng Ngh Thng Tin trng i hc Cn Th.
[12].Nguyn Cao t, Bi ging lp trnh mng, Trng i hc Bch Khoa TP.
H Ch Minh.
[13].Nhm tc gi, Gio trnh lp trnh mng vi Java, Tng hp din n i hc.
[14].Nhm tc gi, Gio trnh lp trnh mng vi C#, Trng i hc Lt.
[15].Vn Thin Hong, Gio trnh lp trnh mng, Trng i hc Cng Ngh i
hc Quc Gia TP.H Ch Minh.
[16].Nguyn Quang Hoan, Gio trnh x l nh, Hc vin cng ngh Bu Chnh
Vin Thng.
[17].Nguyn Hng Cng, Bi thc hnh x l nh vi C#, Trng i hc Cng
Nghip H Ni.
[18].Nhm tc gi, Cn bn XML, Trung tm cng ngh phn mm Tha Thin
Hu.
[19].Nguyn H Giang, Lp trnh Windows C#, Trng i hc Khoa hc t nhin
i hc Quc Gia H Ni.
[20].Nguyn Ngc Bnh Phng, Thi Thanh Phong, Cc gii php lp trnh C#,
Nh xut bn giao thng vn ti.
[21].Nguyn Tn Thun, Lp trnh ng dng Windows From trong C#, Hc vin
cng ngh thng tin NIT.
[22].Bi Duy Hng, Phn mm Free Virtual Class, Gii thng phn mm sng to
trng i hc Cng Nghip H Ni.
[23]. Nguyn Thnh Trung, Phn mm qun l phng Lab, n tt nghip.
[24].Nguyn Huy Khnh, M ngun phn mm chat trong mng Lan, n mn
hc lp trnh mng.
[25]. David Robinson, M ngun Remote Desktop.
[26].http://diendan.congdongcviet.com/showthread.php?t=31306
snh hai nh bitmap) truy cp ln cui cng ngy 20/04/2012.

(thut ton so

Page | 80

[27]. http://45th.the-up.com/t91-topic (Cc thut ton so snh nh) truy cp ln


cui 20/04/2012.
[28].http://www.pinvoke.net/default.aspx/user32.enablewindow th vin cc hm
API.
[29].http://hedieuhanh.forumvi.net/t3686-topic th vin cc hm API.
[30].http://thanhcuong.wordpress.com/2011/01/19/d%E1%BB%8Dc-v-ghi-voregistry-read-and-write-to-registry/ Cc thao tc vi Registry.
[31].http://csharp.net-informations.com/ Kin thc lp trnh mng vi C#.
[32].http://www.codeproject.com/Articles/19836/Palantir-Remote-DesktopManager Remote desktop.

Page | 81

You might also like