You are on page 1of 78

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: Lp : H- KHMT1K3 Ging vin hng dn:

HONG VN VANG NGUYN MNH DNG 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 Ging vin Th.S Nguyn Tin Li
Page | 3

nm 2012

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

DANH MC BNG BIU

Page | 6

DANH MC CC THUT NG VIT TT


Danh sch t vit tt LanVC IP TCP UDP TCP/IP FPT SMTP HTTP DNS RGB API DLL XML HTML Ngha ca t Lan Virual Class (Phn mm lp hc o). Internet Protocol. Transmission Control Protocol. User Datagram Protocol. Internet Protocol Suite. File Transfer Protocol. Simple Mail Transfer Protocol. HyperText Transfer Protocol. Doname System. Khng gian mu gm ba mu Red - Blue - Green. Application programming interface. Dynamic Link Library. Extensible Markup Language. HyperText Markup Language.

Page | 7

MC LC
PHIU GIAO TI....................................................................................................................2 NHN XT CA GIO VIN HNG DN............................................................................3 LI NI U.................................................................................................................................4 TM TT NI DUNG BO CO THC TP TT NGHIP..................................................5 DANH SCH HNH NH.............................................................................................................6 DANH MC CC THUT NG VIT TT..............................................................................7 MC LC.......................................................................................................................................8 CHNG 1. TNG QUAN V TI......................................................................................9 CHNG 2. L THUYT C S.............................................................................................13 CHNG 3. NG DNG PHN MM QUN L LP HC O........................................50 TI LIU THAM KHO.............................................................................................................77

Page | 8

CHNG 1. TNG QUAN V TI 1.1. L do chn ti. 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.
Page | 9

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. 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. 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.

FreeVC.

Microsoft NetMeeting :

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 Ram 512 MB CPU P IV 3.0 GHz Client Ram 256 MB CPU Ce 1.8 GHz
Page | 10

LAN network Window XP Software SQL Server 2005 .Net framework 3.5

LAN network Windows XP. .Net framework 3.5

Bng 1. 1. Cu hnh ti thiu ca phng my. Server Ram 2.0 GB Hardware CPU Core 2 Duo 2.8 GHz LAN network Window Server 2003. Software SQL Server 2005 Client Ram 512 MB CPU P IV 2.4 GHz LAN network Windows XP. .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.

Page | 11

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. 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 | 12

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 | 13

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 | 14

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 | 15

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 | 16

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 | 17

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 | 18

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 Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); NetworkStream ns = new NetworkStream(newsock);

Mt s phng thc ca lp NetworkStream. Thuc tnh CanRead() CanSeek() CanWrite() DataAvailable() Phng thc BeginRead() BeingWrite() EndRead() M t true nu NetworkStream h tr c Lun lun false true nu NetworkStream h tr ghi true nu c d liu c M t Bt u c NetworkStream bt ng b Bt u ghi NetworkStream bt ng b Kt thc c NetworkStream bt ng b
Page | 19

EndWrite() Flush() Read() Write() Equals() GetHashCode() Close()

Kt ghi c NetworkStream bt ng b y ton b d liu i c d liu t NetworkStream Ghi d liu t NetworkStream So snh hai i tng NetworkStream Ly hash code cho NetworkStream. 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 Read() Peek() ReadLine() M t c mt hoc nhiu byte d liu t StreamReader. Tr v byte d liu hp l tip theo m Khng g b n khi Stream. 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 | 20

ToString() Equals() Close()

To ra mt chui m t i tng Stream. So snh hai i tng StreamRead. 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 Flush() Writer() WriterLine() M t Gi tt c d liu trong b m StreamWriter ra Stream. Gi mt hoc nhiu byte ra Stream. 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() TcpClient(IPEndPoint) To mt i tng TcpClient. Cha t thng s g. 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) 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. M t Cho bit s byte nhn v t mng v c sn c. Tr v Socket ng vi TCPClient hin hnh.
Page | 21

TcpClient(String,Int32)

Cc thuc tnh Available Client

Connected Cc hm thnh phn Close() Connect(RemoteHost, RemotePort) GetStream()

Trng thi cho bit kt ni c n Server hay cha? M t Gii phng i tng TcpClient nhng khng ng kt ni. Kt ni n mt my TCP khc c Tn v s hiu cng. 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. Phng thc khi to M t
Page | 22

TcpListener ( Int32) TcpListener (IPEndPoint) TcpListener(IPAddress,Int32) Phng thc AcceptSocket( ) AcceptTcpClient()

To mt TcpListener v lng nghe ti cng ch nh. To mt TcpListener vi gi tr Endpoint truyn vo. To mt TcpListener v lng nghe cc kt ni n ti a ch IP v cng ch nh. M t Chp nhn mt yu cu kt ni ang ch. 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). Cho bit liu c kt ni no ang ch i khng Bt u lng nghe cc yu cu kt ni. Dng vic nghe.

Pending() Start() Stop() 2.1.8.3. UDPClient.

Bng 2. 5. Cc phng thnh vin ca lp TCPListener. 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 UdpClient () UdpClient (AddressFamily) M t To mt i tng (th hin) mi ca lp UDPClient. 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 (gn a ch IP v cng) cho n.
Page | 23

UdpClient(Int32, AddressFamily) UdpClient(String, Int32) Phng thc BeginReceive() BeginSend() Close() Connect() EndReceive() EndSend() Receive (ref IPEndPoint)

To mt UdpClient AddressFamily

gn

hiu

cng,

To mt UdpClient v thit lp vi mt trm t xa mc nh. M t Nhn d liu Khng ng b t my xa. Gi khng ng b d liu ti my xa ng kt ni. Thit lp mt Default remote host. Kt thc nhn d liu khng ng b trn Kt thc vic gi d liu khng ng b trn 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)) Gi d liu (ng b) cho my xa.

Send()

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 BeginAccept() M t Chp nhn kt ni Phng thc kt thc EndAccept()
Page | 24

BeginConnect() BeginReceive() BeginReceiveFrom() BeginSend() BeginSendTo()

Kt ni n thit b xa Nhn d liu t Socket Nhn d liu t thit b xa Gi d liu t Socket Gi d liu n thit b xa

EndConnect() EndReceive() EndReceiveFrom() EndSend () 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, AsyncCallback(SendcmdMessage), _ServerSocket); Socket s = (Socket) ia.AsyncState; s.EndSend(ia); SocketFlags.None, new

Cc phng thc khc thc hin ging nh phng thc BeginSend() v EndSend(). 2.2. Lp trnh .Net Remoting. 2.2.1. Cc khi nim.
Page | 25

.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. n khi no process chy chng trnh Server kt thc th instance ny mi b trnh ht rc Garbage Collection ht i.
Page | 26

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. 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.
Page | 27

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(RemoteServerObjec t), "Test", WellKnownObjectMode.SingleCall); ... RemotingConfiguration.RegisterWellKnownServiceType( typeof(RemoteServerObjec t), "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(RemoteObjectCAO)); ... // On the Client RemotingConfiguration.RegisterActivatedClientType(typeof(RemoteObjectCAO), "tcp://localhost:1002/TestCAO"); obj = new RemoteObjectCAO(); ...

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


Page | 28

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. 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.

Page | 29

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 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.
Page | 30

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 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
Page | 31

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 Interlocked Moniter Mutex Thread M t Lp ny dng cung cp truy cp ng b ha vo d liu c chia s s dng (shared data). Lp ny cung cp vic ng b ha cc i tng lung s dng kha cht (lock) v tn hiu ch (wait signal). Lp ny cung cp vic ng b ha s ng c th c dng i vi inter process synchronization. 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. Lp ny qun l nhng lung c lin h vi nhau trong cng mt Process no . 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. Lp ny tng trng cho tt c cc i tng ng b ha (cho php multiple wait) vo lc chy. Lp ny l mt delegate ch v hm hnh s no phi c thi hnh u tin khi mt lung bt u. Delegate i vi Timer. Lp ny l mt delegate nh ngha hm hnh s ku gi li (callback) i vi ThreadPool user work item.

ThreadPool Timer WaitHandle ThreadStart TimerCallBack WaitCallBack

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 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 .
Page | 32

Cc thnh phn Static CurrentThread GetData() SetData() GetDomain() GetDomainID() Sleep()

M t Thuc tnh read-only ny tr v mt quy chiu v lung hin ang chy. i ly v tr t slot c khai bo trn lung hin hnh i vi domain hin hnh trong lung. Cho t tr ln slot c khai bo trn lung hin hnh i vi domain hin hnh trong lung i ly mt qui chiu v AppDomain hin hnh (hoc m nhn din ID ca domain ny) m lung hin ang chy trn . 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 IsAlive IsBackground Name Priority M t Thuc tnh ny tr v mt tr boolean cho bit liu xem lung khi ng hay cha. i ly hoc t gi tr cho bit liu xem lung l mt lung nn hay khng. Thuc tnh ny cho php bn thit lp mt tn vn bn mang tnh thn thin i vi lung. 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). i ly hoc t tnh trng ca lung. C th c gn t enumeration ThreadState (chng hn Unstarted, Running, WaitSleepJoin, Suspended, SuspendRequested, AbortRequested, Stopped). Cho ngng chy lung hin hnh. Yu cu lung ch i vi lung b ngng chy. Tip tc li i vi mt lung b ngng chy. Cho bt u thi hnh lung c khai bo bi delegate ThreadStart. Cho ngng chy mt lung. Nu lung b ngng ri, mt triu gi hm Suspend() s khng c tc dng.

ThreadState

Interrup() Join() Resume() Start() Suspend()

Bng 2. 10. Cc thnh vin cp i tng ca lp Thread. 2.4.3. Thao tc vi lung.

Page | 33

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 | 34

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 | 35

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 | 36

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 | 37

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 | 38

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 | 39

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 | 40

} 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.

Page | 41

Mt s nh thng c biu din nh mt ma trn cc im nh. Trong mi im nh c th c biu din bng. 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.

Page | 42

Hnh 2. 17. M t thut ton ct nh. 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 | 43

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 | 44

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 extern IntPtr FindWindow(string lpClassName, string lpWindowName);

Page | 45

//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 IntPtr EnableMenuItem(IntPtr hMenu, IntPtr wIDEnableItem, int wEnable);

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 | 46

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 | 47

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 Name SubKeyCount() ValueCount() Tn phng thc Close() M t Tn ca key (Read - Only). S lng sub key. Cc gi tr trn key. M t ng li key. Page | 48

CreateSubKey() DeleteSubKey() DeleteSubKeyTree() GetValue() GetValueName() OpenSubKey() SetValue()

To mt SubKey mi. Xa b mt key c ch nh. G b mt cch quy mt SubKey. Hm tm li gi tr c khai bo. Hm ny cho tm li 1 bn dy chui ch cha tt c cc tn tr (value name). Hm tr v mt gi tr SubKey. 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\\CurrentVersion\\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 | 49

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 | 50

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 | 51

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 | 52

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 | 53

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 | 54

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 | 55

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 | 56

public DelegateControlMessageServerReceiveFromClient deleReceive;// --- Top 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; return;

Page | 57

} 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. C Chc nng l gi cc gi tin t Server cho cc my Client.


Page | 58

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 public void OnSend()

Page | 59

{ 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 | 60

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 public DelegateControlMessageServerReceiveFromClient deleReceive;// --- Top

Page | 61

public DelegateControlMessageServerSendToClient deleSendToClient;// --- Top public DelegateControlMessageServerSendToListClient deleSendToListClient;// --- Top 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); // ---> Can kiem tra xem client da ton tai hay chua? Neu ton tai roi thi thay the cai cu = cai moi

Page | 62

// 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 BufferData.CreateMessage(TypeMessage.Command, Command.ServerInfo, BufferData.CreateInforMessag e())); // Gui clientIndex cho client SendMessageToClient(listClient.Count - 1, BufferData.CreateMessage(TypeMessage.Command,Command.ClientIndex,BitConverter.Get Bytes(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; } 1,

Page | 63

// 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; } SendMessageToClient(clientIndex, BufferData.CreateMessage(TypeMessage.Command, Command.OffLineClient, null));

Page | 64

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 { deleSetControl(false); }

Page | 65

} }

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) { byte[] dataSizeRemoteIPAddressString = new byte[4];

Page | 66

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 ""; } }

3.2.2. Cc lp bn pha Client.


Page | 67

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 server, DelegateControlMessageClientReceiveFromServer deleReceive) { 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) { try

Page | 68

{ 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 | 69

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 server, DelegateControlMessageClientSendToServer deleSend) { this.server = server; this.deleSend = deleSend;

Page | 70

} // 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() {

Page | 71

try { 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

Page | 72

public DelegateControlMessageClientReceiveFromServer deleReceive;// --- Top 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 | 73

} 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; }

Page | 74

server.Close(); server = null; } } 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.

Page | 75

CHNG 5. KT LUN 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.

Page | 76

TI LIU THAM KHO


[1]. Ingo Rammer, Advanced .Net Remoting (C# Edition), Impressions Book and

Journal Services, Inc (2002). [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. Page | 77

[26]. http://diendan.congdongcviet.com/showthread.php?t=31306 (thut ton so snh

hai nh bitmap) truy cp ln cui cng ngy 20/04/2012.


[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-vo-

registry-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-Desktop-Manager

Remote desktop.

Page | 78

You might also like