Upload
cao-hong-minh
View
3
Download
0
Embed Size (px)
DESCRIPTION
lap trinh mang
Citation preview
Trang 1
Li cm n
Em xin chn thnh cm n n thy Trn Phc Tun tn tnh hng dn
em trong thi gian thc hin n ny.
Em xin chn thnh cm n Khoa Ton Tin hc to iu kin cho em
thc hin tt n ny.
Xin chn thnh cm n cc bn tn tnh gip mnh c th thc hin
tt n ny.
TpHCM, ngy 7 thng 5 nm 2009
Sinh vin
Nguyn Ngc Duy Tu
Trang 2
MC LC
Li cm n ..............................................................................................................1
MC LC...............................................................................................................2
DANH SCH CC HNH V................................................................................5
DANH SCH CC BNG BIU...........................................................................6
Chng 1: M u .............................................................................................7
1.1 L do chn ti:.......................................................................................7
1.2 Mc ch ca ti: ...................................................................................7
1.3 i tng v phm vi nghin cu...............................................................7
1.3.1 i tng nghin cu ..........................................................................7
1.3.2 Phm vi nghin cu .............................................................................7
Chng 2: KIN THC NG DNG ..............................................................8
2.1 S lc v lp trnh Socket:........................................................................8
2.1.1 Khi nim a ch v cng (Address & Port) .......................................8
2.1.2 Lp IPAddress .....................................................................................8
2.1.3 Lp IPEndpoint .................................................................................11
2.1.4 Lp UDP ...........................................................................................12
2.1.5 Lp TCP (TCPClient) ........................................................................14
2.1.6 Lp TcpListener ................................................................................16
2.2 S lc v lp trnh a lung:...................................................................17
2.2.1 Khi nim Lung (Thread).................................................................17
2.2.2 Kho st namespace System.Threading..............................................18
2.2.2.1 Lp Thread..................................................................................19
2.2.2.2 Thao tc vi lung.......................................................................21
2.2.3 ng b ha (Synchronization) trong lp trnh a lung: ...................23
2.2.3.1 ng b ha................................................................................23
2.2.3.2 Deadlock .....................................................................................29
2.2.3.3 Race condition.............................................................................31
Chng 3: PHN TCH THIT K CHNG TRNH..................................34
Trang 3
3.1 Phn tch ..................................................................................................34
3.1.1 Phn tch nhu cu thc tin: ...............................................................34
3.1.2 Yu cu ra: ....................................................................................34
3.1.3 M hnh d liu mc quan nim: ....................................................35
3.1.4 Phn tch cc thnh phn x l:..........................................................36
3.1.4.1 M hnh lung x l ng nhp...................................................36
3.1.4.2 M hnh lung x l gi tin nhn ................................................38
3.1.4.3 M hnh lung x l FriendList...................................................40
3.1.4.4 M hnh lung x l Group Chat.................................................42
3.2 Thit k cc lp x l ...............................................................................47
3.2.1 Lp DataLayer:..................................................................................47
3.2.2 Lp MyDatabase: ..............................................................................48
3.2.3 Lp ImageListBoxItem......................................................................49
3.2.4 Lp ImageListBox: ............................................................................50
3.2.5 Lp Settings:......................................................................................51
3.2.6 Lp MultilineListBoxItem: ................................................................52
3.2.7 Lp MultilineListBox: .......................................................................52
3.2.8 Lp TabControlEx: ............................................................................53
3.2.9 LpMyDataPack:...............................................................................54
3.2.10 Lp ClientHandler:.........................................................................55
3.3 Mt s qui tc v hm x l c bn ..........................................................56
3.3.1 Qui tc gi d liu trong mng:..........................................................56
3.3.2 Mt s hm x l c bn:...................................................................57
3.3.2.1 Hm PackData.............................................................................57
3.3.2.2 Hm UnPackData........................................................................58
3.3.2.3 Hm SaveSettings v LoadSettings .............................................60
3.3.2.4 Hm theadListen .........................................................................61
3.4 Thit k d liu ........................................................................................62
3.4.1 Chun ha d liu: .............................................................................62
Trang 4
3.4.2 M hnh d liu mc vt l:............................................................62
3.4.3 Thit k d liu:.................................................................................62
3.4.4 M t cc rng buc ton vn:............................................................65
3.5 Thit k giao din.....................................................................................65
3.5.1 Mn hnh ng nhp ..........................................................................65
3.5.2 Mn hnh chnh..................................................................................66
3.5.3 Mn hnh thm Friend........................................................................66
3.5.4 Mn hnh xa Friend..........................................................................67
3.5.5 Mn hnh Chat With ..........................................................................67
3.5.6 Mn hnh Invite Group.......................................................................68
3.5.7 Mn hnh Invite Another....................................................................68
3.5.8 Mn hnh Settings ..............................................................................69
Chng 4: CI T TH NGHIM ...........................................................70
4.1 Ci t chng trnh .................................................................................70
4.1.1 Ci t Server ....................................................................................70
4.1.2 Ci t Client .....................................................................................73
4.2 Hng dn s dng ..................................................................................75
Chng 5: KT LUN....................................................................................76
5.1 Kt qu t c ......................................................................................76
5.2 Hng pht trin ......................................................................................76
TI LIU THAM KHO .....................................................................................77
Trang 5
DANH SCH CC HNH V
Hnh 2-1: Kt qu chng trnh khng s dng ng b ha .................................27 Hnh 2-2: Kt qu chng trnh s dng ng b ha............................................29 Hnh 3-1: M hnh d liu mc quan nim .........................................................35 Hnh 3-2: M hnh x l ng nhp.......................................................................36 Hnh 3-3: M hnh x l ng xut........................................................................37 Hnh 3-4: M hnh x l gi tin nhn Online.........................................................38 Hnh 3-5: M hnh x l gi tin nhn Offline ........................................................39 Hnh 3-6: M hnh x l thm Friend ....................................................................40 Hnh 3-7: M hnh x l xa Friend ......................................................................41 Hnh 3-8: M hnh x l to Group .......................................................................42 Hnh 3-9: M hnh x l ng gia nhp Group ...................................................43 Hnh 3-10: M hnh x l thot khi Group...........................................................44 Hnh 3-11: M hnh x l hy Group ....................................................................45 Hnh 3-12: M hnh x l gi tin nhn trong Group ..............................................46 Hnh 3-13: M hnh lp DataLayer........................................................................47 Hnh 3-14: M hnh lp MyDatabase ....................................................................48 Hnh 3-15: M hnh lp ImageListBoxItem...........................................................49 Hnh 3-16: M hnh lp ImageListBox..................................................................50 Hnh 3-17: M hnh lp Settings............................................................................51 Hnh 3-18: M hnh lp MultilineListBoxItem ......................................................52 Hnh 3-19: M hnh lp TabControlEx..................................................................53 Hnh 3-20: M hnh lp MyDataPack....................................................................54 Hnh 3-21: M hnh ClientHandler ........................................................................55 Hnh 3-22: M hnh d liu mc vt l...............................................................62 Hnh 3-23: Mn hnh ng nhp ............................................................................65 Hnh 3-24: Mn hnh chnh....................................................................................66 Hnh 3-25: Mn hnh thm Friend..........................................................................66 Hnh 3-26: Mn hnh xa Friend............................................................................67 Hnh 3-27: Mn hnh Chat With ............................................................................67 Hnh 3-28: Mn hnh Invite Group .......................................................................68 Hnh 3-29: Mn hnh Invite Another......................................................................68 Hnh 3-30: Mn hnh Invite Another......................................................................69 Hnh 4-1: Ci t Microsoft SQL Destop Engine...................................................70 Hnh 4-2: Ci t Server Mn hnh Customer Information..................................71 Hnh 4-3: Ci t Server Mn hnh Destination Folder .......................................72 Hnh 4-4: Ci t Server Mn hnh SQL Login...................................................73 Hnh 4-5: Ci t Server Mn hnh Finish...........................................................73 Hnh 4-6: Ci t Client Mn hnh Customer Information ..................................74 Hnh 4-7: Ci t Client Mn hnh Destination Folder ........................................74 Hnh 4-8: Ci t Client Mn hnh Finish ...........................................................75
Trang 6
DANH SCH CC BNG BIU
Bng 2-1: Cc thnh phn ca lp IpAddress 9
Bng 2-2: Cc thnh vin ca lp IpEndPoint 11
Bng 2-3: Cc thnh vin ca lp UDPClient 13
Bng 2-4: Cc thnh phn ca lp TcpClient 15
Bng 2-5: Cc thnh phn ca lp TcpListener 16
Bng 2-6: Mt s lp ca namespace System.Threading 19
Bng 2-7: Cc thnh phn static ca lp Thread 20
Bng 2-8: Cc thnh vin cp i tng ca lp Thread 20
Bng 3-1: M ngun hm PackData 57
Bng 3-2: M ngun hm UnPackData 58
Bng 3-3: M ngun hm SaveSettings v LoadSettings 60
Bng 3-4: M ngun hm theadListen 61
Bng 3-5: Table Users 63
Bng 3-6: Table FriendList 63
Bng 3-7: Table OfflineMessage 64
Bng 3-8: Table GroupChat 64
Bng 3-9: Table GroupDetail 64
Trang 7
Chng 1: M u
1.1 L do chn ti:
Hin nay, mng Lan c nhng tin b vt bc v ngy cng ph bin
hn trong i sng sinh hoat. iu ny lm cho nhu cu lin lc v trao i thng
tin thng qua mng Lan ngy cng ln hn. Chnh v vy, chng trnh Chat trn
mng Lan c xy dng p ng phn no nhng nhu cu cp thit .
1.2 Mc ch ca ti:
Xy dng chng trnh Chat hot ng trong mng Lan vi cc chc nng
c bn nh: gi tin nhn, to mt nhm Chat v lu thng tin bn b.
1.3 i tng v phm vi nghin cu
1.3.1 i tng nghin cu
Tm hiu c c ch hot ng ca Socket v Thread trong .NET
Framwork t vit ng dng Chat trong mng Lan.
1.3.2 Phm vi nghin cu
Chng trnh Chat c xy dng vi kh nng Chat bng vn bn
gia cc User, thnh lp cc nhm Chat thng qua s iu khin ca mt
Server trong mng Lan.
Trang 8
Chng 2: KIN THC NG DNG
2.1 S lc v lp trnh Socket:
2.1.1 Khi nim a ch v cng (Address & Port)
Nguyn l:
Trong mt my c rt nhiu ng dng mun trao i vi cc ng dng
khc thng qua mng (v d trn c 2 ng dng trong my A mun trao
i vi vi 2 ng dng trn my B).
Mi my tnh ch c duy nht mt ng truyn d liu ( gi v nhn).
Vn : Rt c th xy ra "nhm ln" khi d liu t my A gi n my
B th khng bit l d liu gi cho ng dng no trn my B?
Gii quyt: Mi ng dng trn my B s c gn mt s hiu (m ta
vn quen gi l cng Port), s hiu cng ny t 1..65535. Khi ng dng trn
my A mun gi cho ng dng no trn my B th ch vic in thm s hiu
cng (vo trng RemotePort) vo gi tin cn gi. Trn my B, cc ng
dng s vic kim tra gi tr cng trn mi gi tin xem c trng vi s hiu
cng ca mnh ( c gn chnh l gi tr Localport) hay khng? Nu
bng th x l, cn tri li th khng lm g.
Nh vy: Khi cn trao i d liu cho nhau th hai ng dng cn phi bit
thng tin ti thiu l a ch (Address) v s hiu cng (Port) ca ng dng
kia.
2.1.2 Lp IPAddress
Trn Internet mi mt trm (c th l my tnh, my in, thit b ) u c
mt nh danh duy nht, nh danh thng c gi l mt a ch (Address).
a ch trn Internet l mt tp hp gm 4 con s c gi tr t 0-255 v cch nhau
bi du chm.
th hin a ch ny, ngi ta c th vit di cc dng sau:
Tn : V d May01, Server, .
Trang 9
a ch IP nhng t trong mt xu: "192.168.1.1", "127.0.0.1"
t trong mt mng 4 byte, mi byte cha mt s t 0-255. V d biu
din a ch 192.168.1.1 vi khai bo byte[] DiaChi = new byte[4];, ta c
th vit:
DiaChi(0) = 192;
DiaChi(1) = 168;
DiaChi(2) = 1;
DiaChi(3) = 1;
Hoc cng c th l mt s (long), c di 4 byte. V d, vi a ch
192.168.1.1 trn th gi tr s l: 16885952 (y l s h thp phn khi
xp lin 4 byte trn li vi nhau 00000001 00000001 10101000 11000000
Nh vy, i mt a ch chun ra dng s ta ch vic tnh ton cho
tng thnh phn. V d: i a ch 192.168.1.2 ra s, ta tnh nh sau :
2 * 256 ^ 3 + 1* 256 ^ 2 + 168 * 256 ^ 1 + 192 * 256 ^ 0
Trong .NET, IPAddress l mt lp dng m t a ch ny. y l lp rt
c bn c s dng khi chng ta thao tc (truyn) vo cc lp nh IPEndpoint,
UDP, TCP, Socket
Bng 2-1: Cc thnh phn ca lp IpAddress
Thnh vin Static M t
Any Cung cp mt a ch IP (thng l 0.0.0.0) ch ra
rng Server phi lng nghe cc hot ng ca Client
trn tt c cc Card mng (s dng khi xy dng
Server). Thuc tnh ny ch c.
Broadcast Cung cp mt a ch IP qung b (Broadcast, thng
l 255.255.255.255), dng s long.
Loopback Tr v mt a ch IP lp (IP Loopback, v d
127.0.0.1).
AddressFamily Tr v h a ch ca a ch IP hin hnh. Nu a ch
1 (Byte 0) 1 168 192 (Byte 3)
Trang 10
dng IPv4 th kt qu l Internetwork, v
InternetworkV6 nu l a ch IPv6.
Phng thc M t
IPAddress(Int64) To a ch IP t mt s long.
IPAddress(Byte[]) To a ch IP t mt mng Byte.
GetAddressByte () Chuyn a ch thnh mng Byte.
HostToNetworkOrder() o th t Byte ca mt s cho ng vi th t Byte
trong a ch IPAddress.
IsLoopback() Cho bit a ch c phi l a ch lp hay khng?
V d 1: Kim tra xem 192.168.1.300 c phi l a ch IP hp l khng
private void KiemTra()
{
String Ip1 = "127.0.0.1";
String Ip2 = "999.0.0.1";
MessageBox.Show(IPAddress.TryParse(Ip1, new IPAddress(0)));
MessageBox.Show (IPAddress.TryParse(Ip2, new IPAddress(1)));
}
V d 2: Chuyn a ch hin hnh ra mng byte v hin th tng thnh
sphn trong mng
private void KiemTra()
{
IpAddress Ip3 = new IPAddress(16885952);
Byte[] b;
b = Ip3.GetAddressBytes();
MessageBox.Show("Address: " & b(0) &"." & b(1) &"." & b(2) & "." &
b(3));
}
Trang 11
2.1.3 Lp IPEndpoint
Trong mng, hai trm c th trao i thng tin c vi nhau th chng
cn phi bit c a ch (IP) ca nhau v s hiu cng m hai bn dng trao
i thng tin. Lp IPAddress mi ch cung cp cho ta mt v l a ch IP
(IPAddress), nh vy vn cn thiu v th hai l s hiu cng (Port number). Nh
vy, lp IPEndpoint chnh l lp cha ng c IPAddress v Port number.
i tng IPEndpoint s c dng sau ny truyn trc tip cho cc i
tng UDP, TCP
Bng 2-2: Cc thnh vin ca lp IpEndPoint
Phng thc khi to M t
IPEndPoint(Int64, Int32) To mt i tng mi ca lp IPEndPoint,
tham s truyn vo l a ch IP ( dng s) v
cng s dng giao tip.
IPEndPoint(IPAddress,
Int32)
To mt i tng mi ca lp IPEndPoint,
Tham s truyn vo l mt a ch IPAddress v
s hiu cng dng giao tip.
Thuc tnh M t
Address Tr v hoc thit lp a ch IP cho Endpoint (tr
v mt i tng IPAddress).
AddressFamily Ly v loi giao thc m Endpoint ny ang s
dng.
Port Ly hoc gn s hiu cng ca Endpoint.
Phng thc M t
Create() To mt Endpoint t mt a ch socket (socket
address).
ToString() Tr v a ch IP v s hiu cng theo khun
dng a ch: cng. V d: 192.168.1.1:8080
Trang 12
2.1.4 Lp UDP
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.
Trang 13
Bng 2-3: 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) To mt UdpClient v gn (bind) mt cng cho
n.
UdpClient (IPEndPoint) To mt UdpClient v gn (bind) mt IPEndpoint
(gn a ch IP v cng) cho n.
UdpClient(Int32,
AddressFamily)
To mt UdpClient v gn s hiu cng,
AddressFamily
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.
Trang 14
2.1.5 Lp TCP (TCPClient)
Mc ch ca lp UDPClient trn l dng cho lp trnh vi giao thc UDP,
vi giao thc ny th hai bn khng cn phi thit lp kt ni trc khi gi do vy
mc tin cy khng cao. m bo tin cy trong cc ng dng mng, ngi
ta cn dng mt giao thc khc, gi l giao thc c kt ni : TCP (Transport
Control Protocol). Trn Internet ch yu l dng loi giao thc ny, v d nh
Telnet, HTTP, SMTP, POP3 lp trnh theo giao thc TCP, MS.NET cung cp
hai lp c tn l TCPClient v TCPListener.
Trang 15
Bng 2-4: Cc thnh phn 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.
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.
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:
Trang 16
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 cpPClient.
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.6 Lp 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 2-5: Cc thnh phn ca lp TcpListener
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.
Trang 17
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.
2.2 S lc v lp trnh a lung:
2.2.1 Khi nim 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
Trang 18
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 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.2.2 Kho st namespace System.Threading
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.
Trang 19
Bng 2-6: Mt s lp ca namespace System.Threading
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.
2.2.2.1 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
Trang 20
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 .
Bng 2-7: Cc thnh phn static ca lp Thread
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()
GetDomainID()
i ly mt qui chiu v AppDomain hin hnh
(hoc m nhn din ID ca domain ny) m lung
hin ang chy trn .
Sleep() Cho ngng lung hin hnh trong mt thi gian nht
nh c khai bo.
Ngoi ra lp Thread cng h tr cc thnh vin cp i tng.
Bng 2-8: Cc thnh vin cp i tng ca lp Thread
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).
Trang 21
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.
2.2.2.2 Thao tc vi lung
Lung c thao tc bng cch dng lp Thread nm trong Namespace
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
ChangeColorDepth():
void ChangeColorDepth()
Trang 22
{
// 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 rng bi v im t nhp vo lung (trong v d ny l
ChangeColorDepth() ) 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 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();
Trang 23
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 1 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 1 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 gi l Sleep(), n gin t lung
ang chy ng mt khong thi gian, sau n s tip tc.
2.2.3 ng b ha (Synchronization) trong lp trnh a lung:
2.2.3.1 ng b ha
i khim 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
Trang 24
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.
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 nh 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();
Trang 25
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));
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;
Trang 26
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);
}
}
}
}
Trang 27
Kt qu t c l:
Hnh 2-1: 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:
Trang 28
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
Trang 29
Kt qu thu c s l:
Hnh 2-2: 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.2.3.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:
Trang 30
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 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.
Trang 31
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.2.3.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;
Trang 32
Console.WriteLine(Object to be processed next is +
NextIndex);
++ArrayController.ObjectsProcessed;
object next = ArrayController.GetObject();
}
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
Trang 33
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.
Trang 34
Chng 3: PHN TCH THIT K CHNG TRNH
3.1 Phn tch
3.1.1 Phn tch nhu cu thc tin:
Hin nay, mng Lan pht trin rt mnh c trong trng hc, cc c quan t
chc v c cc h gia nh. Chnh iu ko theo nhu cu lin lc trao i thng
tin trong mng Lan cng pht trin theo. Chnh v vy, mt chng trnh Chat phc
v cho nhu cu lin lc, trao i thng tin trong mng Lan l rt cn thit.
3.1.2 Yu cu ra:
Yu cu t ra l xy dng chng trnh Chat hot ng trong mng
Lan s dng Socket v Multithreading i hi cc chc nng nghip v sau:
Chat gia hai ngi vi nhau: Hai ngi gi thng ip qua li
cho nhau.
Chat gia mt nhm ngi: Mt ngi ng ra to mt nhm
Chat v mi cc thnh vin khc tham gia tho lun.
Mt User c kh nng thm v xa mt ngi vo Friend List
ca mnh c th lin lc mt cch d dng.
Trang 35
3.1.3 M hnh d liu mc quan nim:
Relationship
0,n
0,n
0,n
0,n
0,n
0,n GroupDetai l
Users
ID
Username
Password
State
Fullname
Address
Integer
Variable characters (20)
Variable characters (15)
Short integer
Variable characters (50)
Variable characters (50)
Variable characters (50)
ID
GroupChat
GroupID
GroupName
CreateTime
Integer
Variable characters (30)
Date & Time
GroupID
FriendList
Offl ineMessage
SendTime
Message...
Date & Time
Variable characters (500)
Hnh 3-1: M hnh d liu mc quan nim
Trang 36
3.1.4 Phn tch cc thnh phn x l:
3.1.4.1 M hnh lung x l ng nhp
X l ng nhp:
M hnh x l: ng nhp thnh cng
Hin th mn hnh chnh
Thng bo ng nhp thnh cngGi danh sch Friend v OfflineMessage
Gi Username v Password
Tp hp cc Offline Message
Tp hp OfflineMessage ca ngi dng
Tp cc Friend ang Online v Offline
Danh sch cc Friend
Danh sch cc Friend
Cp nht trng thi ng nhp
Username v Password hp l
Kim tra Username v Password
Thng bo cho cc Friend ang Online ca ngi dng ny
Kim tra trng thi ng nhp
User cha ng nhp
Kim tra trng thi ng nhp
Kim tra Username v PasswordYu cu ng nhp
Nhp Username v Password
Ngi dng
Mn hnh ng nhp Server Table UsersMn hnh chnh FriendList
Friend
Table OfflineMessage
Hin th mn hnh chnh
Thng bo ng nhp thnh cngGi danh sch Friend v OfflineMessage
Gi Username v Password
Tp hp cc Offline Message
Tp hp OfflineMessage ca ngi dng
Tp cc Friend ang Online v Offline
Danh sch cc Friend
Danh sch cc Friend
Cp nht trng thi ng nhp
Username v Password hp l
Kim tra Username v Password
Thng bo cho cc Friend ang Online ca ngi dng ny
Kim tra trng thi ng nhp
User cha ng nhp
Kim tra trng thi ng nhp
Kim tra Username v PasswordYu cu ng nhp
Nhp Username v Password
Hnh 3-2: M hnh x l ng nhp
M t qui trnh x l:
Khi mt User yu cu ng nhp h thng, Client s gi
Username v Password cho Server. Server s kim tra xem Username
v Password c hp l hay khng. Sau , Server s kim tra
Username ny ng nhp cha. Nu ng nhp thnh cng, Server
s ly danh sch cc Friend ang Offline v Online ca User km theo
danh sch cc tin nhn Offline (nu c) v gi cho User v cp nht
Trang 37
li trng thi ng nhp ca User. ng thi cng gi thng bo n
cc Users khc c Friend l User ny mi Online.
X l ng xut:
M hnh x l: Ngi dng ng xut khi chng trnh
Thng bo cho Server l ngi dng ng xut
Cp nht li trng thi ng nhp
Cp nht li cc Group m User tham gia
Ly danh sch cc Users c trong cc Group m User ny tham gia
Danh sch cc Users
Ly danh sch cc Users c Friend l User ny
Thng bo cho cc Users c l in quan l User ny ng xut
Ly danh sch cc Users c Friend l Users ny ang OnlineHin th mn hnh ng nhp
Chn chc nng ng xut
Ngi dng
Mn hnh chnh Server Table FriendList Table GroupDetailMn hnh ng nhp
Users
Table Users
Thng bo cho Server l ngi dng ng xut
Cp nht li trng thi ng nhp
Cp nht li cc Group m User tham gia
Ly danh sch cc Users c trong cc Group m User ny tham gia
Danh sch cc Users
Ly danh sch cc Users c Friend l User ny
Thng bo cho cc Users c l in quan l User ny ng xut
Ly danh sch cc Users c Friend l Users ny ang OnlineHin th mn hnh ng nhp
Chn chc nng ng xut
Hnh 3-3: M hnh x l ng xut
M t qui trnh x l:
Khi mt User yu cu ng xut li h thng, Client s hin th
li mn hnh ng nhp v ng thi gi thng bo ang xut n
Server. Server s gi thng bo ng xut ti cc Users c Friend l
User ny. Bn cnh , Server kim tra tt c cc Groups m User ny
ang tham gia. Server s gi thng bo hy n cc Group m User
ny l ngi khi to v s gi thng bo ng xut n cc Group
m User ny ch tham gia vi t cch l thnh vin. Cui cng, Server
s cp nht li trng thi ng nhp ca User.
Trang 38
3.1.4.2 M hnh lung x l gi tin nhn
Gi tin nhn Online:
M hnh x l: Gi tin nhn Online
Gi tin nhn v tn ngi gi
Gi tin nhn v tn ngi nhn
Ngi nhn Online
Kim tra Online
Kim tra ngi nhn Online
Hin th tin nhn
Yu cu gi tin nhn
Nhp tin nhn
Ngi gi Ngi nhn
Mn hnh chnh Server Table Users
Gi tin nhn v tn ngi gi
Gi tin nhn v tn ngi nhn
Ngi nhn Online
Kim tra Online
Kim tra ngi nhn Online
Hin th tin nhn
Yu cu gi tin nhn
Nhp tin nhn
Hnh 3-4: M hnh x l gi tin nhn Online
M t qui trnh x l:
Khi ngi dng nhp tin nhn v nhn phm Enter (hoc button
Send), Client s hin th tin nhn trn Tab Chat ng thi gi tin nhn
v tn ngi nhn ln cho Server. Server s kim tra xem ngi nhn
c phi ang Online hay khng. Nu ngi nhn ang Online, Server
s gi tin nhn v tn ngi gi. Khi nhn c tin nhn, Client s
hin th tin nhn thng qua mt Tab Chat (Tab ny s c m nu n
cha c trc ).
Trang 39
Gi tin nhn Offline:
M hnh x l: Gi tin nhn Offl ine
Lu tin nhn
Ngi nhn khng Online
Kim tra ngi nhn Online
Gi tin nhn v tn ngi nhn
Hin th tin nhn
Kim tra Online
Yu cu gi tin nhn
Nhp tin nhn
Ngi gi
Mn hnh chnh Server Table Users Table Offl ineMessage
Lu tin nhn
Ngi nhn khng Online
Kim tra ngi nhn Online
Gi tin nhn v tn ngi nhn
Hin th tin nhn
Kim tra Online
Yu cu gi tin nhn
Nhp tin nhn
Hnh 3-5: M hnh x l gi tin nhn Offline
M t qui trnh x l:
Khi ngi dng nhp tin nhn v nhn phm Enter (hoc button
Send), Client s hin th tin nhn trn Tab Chat ng thi gi tin nhn
v tn ngi nhn ln cho Server. Server s kim tra xem ngi nhn
c phi ang Online hay khng. Nu ngi nhn ang Offline, Server
s lu tin nhn cng tn ngi gi vo bng OfflineMessage gi
cho ngi nhn ln ng nhp tip theo.
Trang 40
3.1.4.3 M hnh lung x l FriendList
Thm mt Friend vo FriendList:
M hnh x l: Thm Friend vo FriendList
Hin th mn hnh thm FriendYu cu thm Friend
Thm Friend vo FriendList
Cha tn ti
Kim tra Friend tn ti trong FriendList
Kim tra tn ti
Gi tn Friend
Yu cu thm Friend
Cp nht mn hnh chnh
Thng bo thm Friend thnh cngThm Friend thnh cng
Friend tn ti
Kim tra tn ti
Kim tra tn ti
Nhp tn Friend
Yu cu nhp tn Friend cn thm
Ngi dng
Mn hnh chnh Server Table Users Table FriendListMn hnh thm Friend
Hin th mn hnh thm FriendYu cu thm Friend
Thm Friend vo FriendList
Cha tn ti
Kim tra Friend tn ti trong FriendList
Kim tra tn ti
Gi tn Friend
Yu cu thm Friend
Cp nht mn hnh chnh
Thng bo thm Friend thnh cngThm Friend thnh cng
Friend tn ti
Kim tra tn ti
Kim tra tn ti
Nhp tn Friend
Yu cu nhp tn Friend cn thm
Hnh 3-6: M hnh x l thm Friend
M t qui trnh x l:
Khi ngi dng chn chc nng thm mt Friend vo
FriendList, mn hnh thm FriendList s c m ra. Ngi dng s
nhp tn ca Friend v sau Client s gi tn Friend ny ln cho
Server. Trc tin, Server s kim tra Friend ny c tn ti hay
khng. Tip theo, s kim tra Friend ny c thm vo FriendList
trc hay cha. Nu Friend ny cha c trong FriendList, Server
s thm Friend ny vo FriendList ca ngi dng. Cui cng, Server
s gi kt qu ca cng vic v cho Client. Da vo kt qu nhn
c, Client s thng bo cho ngi dng bit l vic thm thnh
Trang 41
cng hay tht bi (c hai nguyn nhn tht bi l Friend khng tn ti
v Friend c trong FriendList ri).
Xa mt Friend ra khi FriendList:
M hnh x l: Xa Friend ra khi FriendList
Cp nht mn hnh chnh
Thng bo xa thnh cng
Xa thnh cng
Xa Friend ra khi FriendList
Friend tn ti trong FriendList
Kim tra tn ti
Kim tra Friend tn ti trong FriendList
Kim tra tn ti
Friend tn ti
Tn Friend
Kim tra tn ti
Yu cu xa Friend ra khi FriendListNhp tn Friend
Yu cu nhp tn Friend cn xa
Hin th mn hnh xa FriendYu cu xa Friend
Ngi dng
Mn hnh chnh ServerMn hnh xa Friend Table FriendListTable Users
Cp nht mn hnh chnh
Thng bo xa thnh cng
Xa thnh cng
Xa Friend ra khi FriendList
Friend tn ti trong FriendList
Kim tra tn ti
Kim tra Friend tn ti trong FriendList
Kim tra tn ti
Friend tn ti
Tn Friend
Kim tra tn ti
Yu cu xa Friend ra khi FriendListNhp tn Friend
Yu cu nhp tn Friend cn xa
Hin th mn hnh xa FriendYu cu xa Friend
Hnh 3-7: M hnh x l xa Friend
M t qui trnh x l:
Khi ngi dng chn chc nng xa mt Friend vo
FriendList, mn hnh thm FriendList s c m ra. Ngi dng s
nhp tn ca Friend v sau Client s gi tn Friend ny ln cho
Server. Trc tin, Server s kim tra Friend ny c tn ti hay
khng. Tip theo, s kim tra Friend ny c thm vo FriendList
trc hay cha. Nu Friend ny c trong FriendList, Server s
xa Friend ny ra khi FriendList ca ngi dng. Cui cng, Server
s gi kt qu ca cng vic v cho Client. Da vo kt qu nhn
Trang 42
c, Client s thng bo cho ngi dng bit l vic Xa thnh cng
hay tht bi (c hai nguyn nhn tht bi l Friend khng tn ti v
Friend cha c trong FriendList) ng thi cp nht li mn hnh
chnh nu cn.
Ghi ch: Chc nng ny c th c gi khi ngi dng nhn
phm Delete trong Listbox FriendList.
3.1.4.4 M hnh lung x l Group Chat
Khi User to Group:
M hnh x l: To Group
Tp hp cc User tn ti
Kim tra tn ti
Gi thng bo mi cho cc User
M Tab Group Chat
Gi tn cc Users v tn Group
Yu cu to Group
Nhp tn cc User cn mi vo Group
Yu cu chn cc User c mi vo Group
Hin th mn hnh to GroupYu cu to Group
Ngi to group
Mn hnh chnh Mn hnh to group Table Users
Ngi c mi
Server
Tp hp cc User tn ti
Kim tra tn ti
Gi thng bo mi cho cc User
M Tab Group Chat
Gi tn cc Users v tn Group
Yu cu to Group
Nhp tn cc User cn mi vo Group
Yu cu chn cc User c mi vo Group
Hin th mn hnh to GroupYu cu to Group
Hnh 3-8: M hnh x l to Group
M t qui trnh x l:
Khi ngi dng chn chc nng Invite Group th mn hnh to
Group s xut hin. Ngi dng nhp danh sch cc Users mun mi
v c th nhp thm Invite Message ri nhn Invite. Client s t pht
Trang 43
sinh ra tn Group v s gi km n vi danh sch cc Users mun mi
ng thi cng m thm mt Tab Group Chat. Server s lc ra cc
Users ang Online trong danh sch cc Users c mi. Sau ,
Server s gi li mi km theo tn ngi mi n cc Users c
mi.
Khi User ng gia nhp Group:
M hnh x l: ng gia nhp Group
Thng bo cho cc User tham gia trc cp nht li Tab Group Chat
Thm ngi dng ny vo Group ChatCp nht Tab Group Chat
ng tham gia Group
Tp hp cc User tham gia Group
Thm Group
Kim tra Group
Tp hp cc User tham gia Group
Cc User tham gia Group
Group cha tn ti
M Tab GroupChatng gia nhp Group
Mn hnh chnh Server Table GroupChat Table GroupDetai l
Ngi dng User tham gia Group
Thng bo cho cc User tham gia trc cp nht li Tab Group Chat
Thm ngi dng ny vo Group ChatCp nht Tab Group Chat
ng tham gia Group
Tp hp cc User tham gia Group
Thm Group
Kim tra Group
Tp hp cc User tham gia Group
Cc User tham gia Group
Group cha tn ti
M Tab GroupChatng gia nhp Group
Hnh 3-9: M hnh x l ng gia nhp Group
M t qui trnh x l:
Khi ngi dng ng li mi gia nhp nhm, Client s gi
thng bo ng cho Server. Server s kim tra xem Group ny
c lu hay cha (Group cha c lu nu cha c ngi dng no
ng tham gia). Sau , Server s lu ngi dng ny vo
GroupDetail. Cui cng, Server s gi tn tt c cc Users tham
gia Group cho ngi dng, ng thi cng gi thng bo n cho cc
Users trong Group l ngi dng ny ng gia nhp nhm.
Trang 44
Khi User thot khi Group:
M hnh x l:
Ri khi Group
Gi thng bo thot khi Group km theo tn GroupLy danh sch cc Users c trong Group
Cp nht li Group
Thng bo n cc Users trong Group
Danh sch cc User c trong Group
Cp nht li mn hnh chnh
ng Tab Group Chat
Ngi dng
Mn hnh chnh Server Table GroupDetail
Users
Gi thng bo thot khi Group km theo tn GroupLy danh sch cc Users c trong Group
Cp nht li Group
Thng bo n cc Users trong Group
Danh sch cc User c trong Group
Cp nht li mn hnh chnh
ng Tab Group Chat
Hnh 3-10: M hnh x l thot khi Group
M t qui trnh x l:
Khi mt ngi dng tt Tab Group Chat, Client s gi thng
bo thot khi Group cho Server. Server trc tin kim tra ngi
dng ny c phi l ngi to Group hay khng. Nu khng phi,
Server s gi thng bo ti cc Users khc trong Group. Cui cng,
Server s cp nht li GroupDetail.
Trang 45
Khi User hy Group:
M hnh x l:
Hy Group
Gi thng bo thot khi Group
Xa Group
Xa GroupDetail
Thng bo hy Group
Danh sch cc Users c trong Group
Ly danh sch cc Users c trong Group
Kim tra ng
Kim tra ngi to group
Kim tra ngi dng c to ra group ny hay khng
ng Tab Group Chat Cp nht mn hnh chnh
Ngi dng
Mn hnh chnh Server Table GroupChat Table GroupDetail
Users
Gi thng bo thot khi Group
Xa Group
Xa GroupDetail
Thng bo hy Group
Danh sch cc Users c trong Group
Ly danh sch cc Users c trong Group
Kim tra ng
Kim tra ngi to group
Kim tra ngi dng c to ra group ny hay khng
ng Tab Group Chat Cp nht mn hnh chnh
Hnh 3-11: M hnh x l hy Group
M t:
Khi mt ngi dng tt Tab Group Chat, Client s gi thng
bo thot khi Group cho Server. Server trc tin kim tra ngi
dng ny c phi l ngi to Group hay khng. Nu ng, Server
s gi thng bo hy Group ti cc Users khc trong Group. Cui
cng, Server s xa Group ny khi GroupDetail v GroupChat.
Ghi ch: Khi nhn c thng bo hy Group t Users, Client
s tt Tab Group Chat tng ng ng thi thng bo cho ngi
dng.
Trang 46
Khi User gi tin nhn ti cc thnh vin trong Group:
M hnh x l:
Gi tin nhn trong Group
Danh sch cc Users trong Group
Ly danh sch cc Users trong Group
Hin th tin nhn
Gi tin nhn km theo tn ngi gi n cc Users trong Group
Gi tin nhn km theo tn Group
Chn Tab Group Chat v yu cu chc nng gi tin nhn
Nhp tin nhn
Ngi gi
Mn hnh chnh Server Table GroupDetail
Cc Users trong Group
Danh sch cc Users trong Group
Ly danh sch cc Users trong Group
Hin th tin nhn
Gi tin nhn km theo tn ngi gi n cc Users trong Group
Gi tin nhn km theo tn Group
Chn Tab Group Chat v yu cu chc nng gi tin nhn
Nhp tin nhn
Hnh 3-12: M hnh x l gi tin nhn trong Group
M t qui trnh x l:
Khi ngi dng nhp tin nhn v nhn button Send trong Tab
Group Chat, Client s gi tin nhn v tn Group cho Server. Da vo
tn Group nhn c, Server s tm tt c cc Users tham gia
Group v gi tin nhn km theo tn ngi gi n cc Users ny.
Trang 47
3.2 Thit k cc lp x l
3.2.1 Lp DataLayer:
M hnh:
Hnh 3-13: M hnh lp DataLayer
Chc nng: X l cc cu lnh v c s d liu tng qut, kim tra v
thay i kt ni n c s d liu.
Trang 48
3.2.2 Lp MyDatabase:
M hnh:
Hnh 3-14: M hnh lp MyDatabase
Trang 49
Chc nng: Thc hin cc cu lnh Sql cn thit v thc thi cc Store
Procedure c sn trong c s d liu.
3.2.3 Lp ImageListBoxItem
M hnh:
Class
Fields
_myImageIndex : int
_myText : string
_myTextColor : Color
Properties
ImageIndex { get; set; } : int
Text { get; set; } : string
TextColor { get; set; } : Color
Methods
ImageListBoxItem()
ImageListBoxItem(string text)
ImageListBoxItem(string text, int index, Color color)
ToString() : string
Hnh 3-15: M hnh lp ImageListBoxItem
Chc nng: Thao tc vi Item ca mt ImageListBox.
Trang 50
3.2.4 Lp ImageListBox:
M hnh:
ListBox
Class
Fields
_myImageList : ImageList
Properties
ImageList { get; set; } : ImageList
Methods
ImageListBox()
ImageListBox(ImageList imgList)
OnDrawItem(DrawItemEventArgs e) : void
SetImageIndex(int index, int imgIndex) : void
SetTextColor(int index, Color color) : void
Hnh 3-16: M hnh lp ImageListBox
Chc nng: To ra mt loi ListBox mi vi Item c th cha c
text v hnh nh.
Trang 51
3.2.5 Lp Settings:
M hnh:
Class
Fields
authencation : int
databasename : string
password : string
servername : string
username : string
Properties
Authencation { get; set; } : int
DatabaseName { get; set; } : string
Password { get; set; } : string
ServerName { get; set; } : string
Username { get; set; } : string
Methods
LoadSettings() : void
SaveSettings() : void
SetConnection(ref string connStr) : void
Settings()
Hnh 3-17: M hnh lp Settings
Chc nng: Chnh sa v sao lu thng tin ng nhp vo c s d
liu.
Trang 52
3.2.6 Lp MultilineListBoxItem:
M hnh:
Hnh 3-18: M hnh lp MultilineListBoxItem
Chc nng: Thao tc vi Item ca mt MultilineListBox
3.2.7 Lp MultilineListBox:
M hnh:
ListBox
Class
Fields
tbox : TextBox
Methods
MultilineListBox()
OnDrawItem(DrawItemEventArgs e) : void
OnMeasureItem(MeasureItemEventArgs e) : void
Hnh 3-1: M hnh lp MultilineListBox
Chc nng: K tha lp ListBox to ra mt loi ListBox mi c
th thm mt Item lu d liu trn nhiu dng.
Trang 53
3.2.8 Lp TabControlEx:
M hnh:
TabControl
Class
Fields
PreRemoveTabPage : PreRemoveTab
Methods
CloseTab(int i) : void
OnDrawItem(DrawItemEventArgs e) : void
OnMouseDown(MouseEventArgs e) : void
OnMouseLeave(EventArgs e) : void
OnMouseMove(MouseEventArgs e) : void
TabControlEx()
Hnh 3-19: M hnh lp TabControlEx
Chc nng: K tha t mt TabControl to ra mt loi TabControl
mi c th ng, m trc tip.
Trang 54
3.2.9 LpMyDataPack:
M hnh:
Class
Fields
array : int[]
groupName : string
message : string
name : string
Properties
Arr { get; } : int[]
GroupName { get; } : string
Message { get; } : string
Name { get; } : string
Methods
MyDataPack()
PackData(int[] arr, string _name, string _mess, string _groupName) : byt
UnPackData(byte[] data) : void
Hnh 3-20: M hnh lp MyDataPack
Chc nng: Lp MyDataPack c 2 nhim v. Nhim v th nht l
chuyn mt mng lu cc chc nng, chui tn, tn nhm, tin nhn thnh
mt dy byte truyn i. Nhim v th hai l chuyn chui byte nhn
c thnh mng lu cc chc nng, chui tn, tn nhm v tin nhn
a cho chng trnh x l.
Trang 55
3.2.10 Lp ClientHandler:
M hnh:
Class
Fields
dp : MyDataPack
error : string
mainFrm : frmServer
myClient : TcpClient
myData : MyDatabase
myPort : string
UserID : int
Username : string
Methods
AddRemoveUserInGroup(string leader, string groupName, bool removeUser) : void
ClientHandler(TcpClient client, string port, frmServer MainFrm)
CheckConnect(string Name, string Pass) : int
CheckUserExist(string user) : bool
CheckUserOnline(string user) : int
DestroyAGroup(string groupName) : void
DestroyAllGroup() : void
GetGroupUser(string groupName) : void
NewGroupChat(string fname, string groupName) : void
ReceiveData() : void
SendFriendList(string user) : string
SendGroupInvite(string fname, string mess, string groupname) : void
SendMessToGroup(string groupMess, string groupName) : void
SendOfflineMessage() : string
SendUserState(bool state) : void
SignOut1Group(int groupID) : void
SignOutAllGroup() : void
Hnh 3-21: M hnh ClientHandler
Chc nng: Qun l mt kt ni ca Client.
Trang 56
3.3 Mt s qui tc v hm x l c bn
3.3.1 Qui tc gi d liu trong mng:
Gi d liu c gi qua li trong mng l mt khi bytes c di
ln nht l 2048 bytes. Khi bytes ny c cu trc nh sau:
2 bytes u tin: nh du cc chc nng ca chng trnh.
2 bytes tip theo: nh du cc chc nng con thuc chc nng
chnh.
2 bytes tip theo: Lu cc gi tr c gi km theo nu c.
4 bytes k tip: nh du ln ca khi bytes lu tn ngi
nhn.
4 bytes tip theo: nh du ln ca khi bytes lu tin nhn.
4 bytes tip theo: nh du ln ca khi bytes lu tn
nhm.
Cc bytes cn li: Ln lt lu khi bytes cha tn, tin nhn v
tn nhm.
Ghi ch: Cc chui tn, tin nhn v tn nhm s c m ha UTF8
trc khi c ng gi vo khi bytes.
Trang 57
3.3.2 Mt s hm x l c bn:
3.3.2.1 Hm PackData
M ngun:
Bng 3-1: M ngun hm PackData
public byte[] PackData(int[] arr, String _name, String _mess, String _groupName)
{
byte[] nameByte = Encoding.UTF8.GetBytes(_name);
byte[] messByte = Encoding.UTF8.GetBytes(_mess);
byte[] groupByte = Encoding.UTF8.GetBytes(_groupName);
int len = arr.Length * 2 + 12 + nameByte.Length + messByte.Length +
groupByte.Length;
byte[] data = new byte[len];
int offset = 0;
for (int i = 0; i < arr.Length; i++)
{
Buffer.BlockCopy(BitConverter.GetBytes(arr[i]), 0, data, offset, 2);
offset += 2;
}
offset = 6;
Buffer.BlockCopy(BitConverter.GetBytes(nameByte.Length), 0,
data, offset, 4);
offset += 4;
Buffer.BlockCopy(BitConverter.GetBytes(messByte.Length), 0,
data, offset, 4);
offset += 4;
Buffer.BlockCopy(BitConverter.GetBytes(groupByte.Length), 0,
data, offset, 4);
offset += 4;
Trang 58
Buffer.BlockCopy(nameByte, 0, data, offset, nameByte.Length);
offset += nameByte.Length;
Buffer.BlockCopy(messByte, 0, data, offset, messByte.Length);
offset += messByte.Length;
Buffer.BlockCopy(groupByte, 0, data, offset, groupByte.Length);
return data;
}
Input: Mng lu cha gi tr cc chc nng, tn ngi nhn, tin nhn,
tn nhm.
Output: Khi bytes c c ng gi.
Chc nng: ng gi khi bytes trc khi gi i.
3.3.2.2 Hm UnPackData
M ngun:
Bng 3-2: M ngun hm UnPackData
public void UnPackData(byte[] data)
{
int offset = 0;
for (int i = 0; i < 3; i++ )
{
byte[] tbytes = new byte[4];
Buffer.BlockCopy(data, offset, tbytes, 0, 2);
array[i] = BitConverter.ToInt32(tbytes, 0);
offset += 2;
}
int len;
byte[] bytes = new byte[4];
Buffer.BlockCopy(data, 6, bytes, 0, 4);
len = BitConverter.ToInt32(bytes, 0);
Trang 59
offset = 18;
if (len != 0)
{
byte[] nameByte = new byte[len];
Buffer.BlockCopy(data, offset, nameByte, 0, len);
name = Encoding.UTF8.GetString(nameByte, 0, len);
}
offset += len;
Buffer.BlockCopy(data, 10, bytes, 0, 4);
len = BitConverter.ToInt32(bytes, 0);
if (len != 0)
{
byte[] messByte = new byte[len];
Buffer.BlockCopy(data, offset, messByte, 0, len);
message = Encoding.UTF8.GetString(messByte, 0, len);
}
offset += len;
Buffer.BlockCopy(data, 14, bytes, 0, 4);
len = BitConverter.ToInt32(bytes, 0);
if (len != 0) {
byte[] groupByte = new byte[len];
Buffer.BlockCopy(data, offset, groupByte, 0, len);
groupName = Encoding.UTF8.GetString(groupByte, 0, len);
}
}
Input: Khi bytes c nh du.
Chc nng: Gii ng gi khi bytes nhn c. Kt qu nhn c
l mng cha cc chc nng, chui tn ngi nhn, tin nhn v tn nhm
c lu trong lp DataPack.
Trang 60
3.3.2.3 Hm SaveSettings v LoadSettings
M ngun:
Bng 3-3: M ngun hm SaveSettings v LoadSettings
public void SaveSettings()
{
FileStream fs = File.Open("Settings.ini", FileMode.OpenOrCreate,
FileAccess.Write);
BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(fs, this);
fs.Close();
}
public void LoadSettings()
{
BinaryFormatter bf = new BinaryFormatter();
FileStream fs = File.Open("Settings.ini", FileMode.Open, FileAccess.Read);
Settings sett = (Settings)bf.Deserialize(fs);
servername = sett.ServerName;
authencation = sett.Authencation;
username = sett.Username;
password = sett.Password;
databasename = sett.DatabaseName;
fs.Close();
}
Chc nng: Hai hm ny c chc nng lu v ly thng tin trong tp
tin Settings.ini thip lp kt ni n c s d liu.
Trang 61
3.3.2.4 Hm theadListen
M ngun:
Bng 3-4: M ngun hm theadListen
private void threadListen()
{
myTcpListener = new TcpListener(IPAddress.Any,Convert.ToInt16(port));
myTcpListener.Start();
while (true)
{
try
{
myClient = myTcpListener.AcceptTcpClient();
allClient.Add(myClient);
ClientHandler clientHandler = new ClientHandler(myClient, port, this);
thdHandler = new Thread(new
ThreadStart(clientHandler.ReceiveData));
thdHandler.Start();
}
catch
{
myTcpListener.Stop();
}
}
}
Chc nng: Gip Server tip nhn cc kt ni t Client, vi mi
Client tip nhn c th m mt i tng ClientHandler qun l v
to mt Thread thao tc.
Trang 62
3.4 Thit k d liu
3.4.1 Chun ha d liu:
Users (ID, Username, Password, State, Fullname, Email, Address)
FriendList(UserID, FriendID)
OfflineMessage(UserID, SenderID, SendTime, Message)
GroupChat(GroupID, UserID, GroupName, CreateTime)
GroupDetail(FriendID, GroupID)
3.4.2 M hnh d liu mc vt l:
FK_GROUPCHA_RELATIONS_USERS
FK_GROUPDET_GROUPDETA_USERS
FK_GROUPDET_GROUPDETA_GROUPCHA
FK_FRIENDLI_FRIENDLIS_USERS
FK_FRIENDLI_FRIENDLIS_USERS
FK_OFFLINEM_OFFLINEME_USERS
FK_OFFLINEM_OFFLINEME_USERS
GroupDetail
FriendID
GroupID
int
int
Users
ID
Username
Password
State
Fullname
Address
int
varchar(20)
varchar(15)
bit
nvarchar(50)
varchar(50)
nvarchar(50)
GroupChat
GroupID
UserID
GroupName
CreateTime
int
int
varchar(30)
datetime
FriendList
UserID
FriendID
int
int
Offl ineMessage
UserID
SenderID
SendTime
Message
int
int
datetime
nvarchar(500)
Hnh 3-22: M hnh d liu mc vt l
3.4.3 Thit k d liu:
Gm c cc bng Users, FriendList, OfflineMessage, GroupChat, GroupDetail
lu tr cc thng tin v user ng nhp, quan h gia cc user, lu tin nhn
offline ca cc user v lu tm thi thng tin cc nhm Chat.
Trang 63
Table Users
Chc nng: Lu thng tin v User
Danh sch cc thuc tnh:
Bng 3-5: Table Users
STT Tn thuc tnh Kiu d liu Din gii
1 ID int (4) T ng tng, Kha chnh
2 Username varchar (20) Tn ng nhp
3 Password varchar (15) Mt khu ng nhp
4 State bit (1) Trng thi ca User
5 Fullname nvarchar (50) Tn y ca User
6 Email varchar (30) Email ca User
7 Address nvarchar (50) a ch ca User
Table FriendList
Chc nng: Lu thng tin v quan h gia cc User
Danh sch cc thuc tnh:
Bng 3-6: Table FriendList
STT Tn thuc tnh Kiu d liu Din gii
1 UserID int (4) ID ca User, Kha chnh
2 FriendID int (4) ID ca Friend, Kha chnh
Trang 64
Table OfflineMessage
Chc nng: Lu cc tin nhn offline ca User
Danh sch cc thuc tnh:
Bng 3-7: Table OfflineMessage
STT Tn thuc tnh Kiu d liu Din gii
1 UserID int (4) ID ca ngi nhn, Kha chnh
2 SenderID int (4) ID ca ngi gi, Kha chnh
3 SendTime datetime (8) Thi im gi tin nhn, Kha
chnh
4 Message nvarchar (500) Ni dung tin nhn
Table GroupChat
Chc nng: Lu tm thi thng tin ca cc nhm Chat
Danh sch cc thuc tnh:
Bng 3-8: Table GroupChat
STT Tn thuc tnh Kiu d liu Din gii
1 GroupID int (4) T ng tng, Kha chnh
2 UserID int (4) ID ca User to nhm
3 GroupName varchar (20) Tn ca nhm
4 CreateTime datetime (8) Thi im to nhm
Table GroupDetail
Chc nng: Lu thng tin chi tit ca cc nhm Chat
Danh sch cc thuc tnh:
Bng 3-9: Table GroupDetail
STT Tn thuc tnh Kiu d liu Din gii
1 GroupID int (4) ID ca Group, Kha chnh
2 FriendID int (4) ID ca ca User thnh vin trong
Group, Kha chnh
Trang 65
3.4.4 M t cc rng buc ton vn:
Rng buc 1: Username trong Table Users khng c trng nhau.
Rng buc 2: UserID v FriendID trong Table FriendList phi tn ti
trong Table Users.
Rng buc 3: UsersID trong Table GroupChat phi tn ti trong Table
Users.
Rng buc 4: GroupID trong Table GroupDetail phi tn ti trong
Table GroupChat.
Rng buc 5: FriendID trong Table GroupDetail phi tn ti trong
Table Users.
Rng buc 6: SenderID v UserID trong Table OfflineMessage phi
tn ti trong Table Users.
3.5 Thit k giao din
3.5.1 Mn hnh ng nhp
Hnh 3-23: Mn hnh ng nhp
Chc nng: Dng ng nhp vo chng trnh.
Trang 66
3.5.2 Mn hnh chnh
Hnh 3-24: Mn hnh chnh
Chc nng: Cha tt c cc chc nng chnh ca chng trnh.
3.5.3 Mn hnh thm Friend
Hnh 3-25: Mn hnh thm Friend
Chc nng: Xut hin khi ngi dng cn thm mt Friend.
Trang 67
3.5.4 Mn hnh xa Friend
Hnh 3-26: Mn hnh xa Friend
Chc nng: Khi ngi dng chn chc nng xa Friend th mn hnh
ny xut hin v cho php ngi dng nhp vo tn Friend cn xa.
3.5.5 Mn hnh Chat With
Hnh 3-27: Mn hnh Chat With
Chc nng: Khi ngi dng chn chc nng Chat With, mn hnh ny
s xut hin v cho php ngi dng nhp tn User cn Chat.
Trang 68
3.5.6 Mn hnh Invite Group
Hnh 3-28: Mn hnh Invite Group
Chc nng: Mn hnh ny s xut hin khi ngi dng chn chc
nng Invite Group v cho php ngi dng mi nhng Users c trong
danh sch bn b v nhng Users khc (thng qua chc nng Invite
Another). Ngoi ra, ngi dng c th nhp vo li mi nhm.
3.5.7 Mn hnh Invite Another
Hnh 3-29: Mn hnh Invite Another
Trang 69
Chc nng: Hin th khi ngi dng click chn button Invite Another
trong mn hnh Invite Group. Mn hnh ny cho php ngi dng ty
chn tn User mun mi vo nhm.
3.5.8 Mn hnh Settings
Hnh 3-30: Mn hnh Invite Another
Chc nng: Dng hiu chnh li kt ni n c s d liu.
Trang 70
Chng 4: CI T TH NGHIM
4.1 Ci t chng trnh
4.1.1 Ci t Server
Yu cu h thng:
My tnh phi ci t .Net Framework 2.0 tr ln.
My tnh phi c ci t Microsoft SQL Server 2000 tr ln
hoc Microsoft SQL Server Desktop Engine 2000 (MSDE).
Hng dn ci t:
Ci t MSDE:
i vi nhng my cha ci Microsoft SQL Server, ngi dng c
th ci t MSDE thay th. Cch ci t MSDE nh sau:
Bc 1: Vo Start -> Run, g cmd.
Bc 2: Sau khi m cmd, ta thc hin thao tc nh trn hnh
(vi C:\MSDE l ng dn ca th mc ci t MSDE, duytue l
Password ca Login name Sa.
Hnh 4-1: Ci t Microsoft SQL Destop Engine
Ci t Server:
Trang 71
Thc hin ln lt cc bc sau:
Bc 1: Nhp p tp tin Server.msi tin hnh ci t
chng trnh. Mn hnh Wellcome hin ra, nhn Next tip tc tin
trnh ci t.
Bc 2: Khi Mn hnh Customer Information hin ra, trong
Username ta nhp tn ngi dng; trong Organization, ta nhp tn
t chc s dng chng trnh. Sau nhn Next tip tc.
Hnh 4-2: Ci t Server Mn hnh Customer Information
Bc 3: Khi mn hnh Destination Folder hin ra, ta c th
nhp nt Change thay i th mc ci t. Sau , nhn nt
Next tip tc.
Trang 72
Hnh 4-3: Ci t Server Mn hnh Destination Folder
Bc 4: Khi mn hnh SQL Login hin ra, ta nhn nt
Browse chn Server Name. C th chn mt trong hai cch kt ni
ti c s d liu l Windows Authencation v Sql Server
Authencation. Sau khi thit nh xong kt ni, nhn nt Next
chng trnh tin hnh ci t.
Trang 73
Hnh 4-4: Ci t Server Mn hnh SQL Login
Bc 5: Khi chng trnh ci t xong, nhn nt Finish
kt thc (c th m chng trnh ngay sau khi ci t bng cch tc
chn nt Launch Server).
Hnh 4-5: Ci t Server Mn hnh Finish
4.1.2 Ci t Client
Yu cu h thng: My tnh phi c ci t .NET Framework 2.0
Thc hin ln lt cc bc sau:
Bc 1: Nhp p tp tin Lan Chat.msi tin hnh ci t
chng trnh. Mn hnh Wellcome hin ra, nhn Next tip tc tin
trnh ci t.
Bc 2: Khi Mn hnh Customer Information hin ra, trong
Username ta nhp tn ngi dng; trong Organization, ta nhp tn
t chc s dng chng trnh. Sau nhn Next tip tc.
Trang 74
Hnh 4-6: Ci t Client Mn hnh Customer Information
Bc 3: Khi mn hnh Destination Folder hin ra, ta c th
nhp nt Change thay i th mc ci t. Sau , nhn nt
Next chng trnh thc hin vic ci t.
Hnh 4-7: Ci t Client Mn hnh Destination Folder
Trang 75
Bc 4: Khi chng trnh ci t xong, nhn nt Finish
kt thc (c th m chng trnh ngay sau khi ci t bng cch tc
chn nt Launch Lan Chat).
Hnh 4-8: Ci t Client Mn hnh Finish
4.2 Hng dn s dng
S dng d liu sn c:
Sau khi chng trnh Server c m, ngi dng c th dng Client
tin hnh ng nhp v s dng chng trnh.
Chng trnh c 3 User sn c:
Username Password
duytue 123
tester 123
xeko 123
Thm d liu mi: Do chc nng ng k Users cha c xy dng nn
ngi s dng Server c th dng chn chc nng Show All Users trong
menu chnh thm hoc xa Users.
Trang 76
Chng 5: KT LUN
5.1 Kt qu t c
ti Chng trnh Chat thc hin c cc ni dung sau:
Tm hiu c cch thc lp trnh Socket v lp trnh a lung trn
mi trng .NET
Tm hiu c cch thc hot ng ca mt chng trnh Chat n
gin.
Xy dng c mt chng trnh Chat n gin ci t trn mng
Lan vi mt s tnh nng nh: gi tin nhn trc tip gia cc Users, gi
tin nhn Offline, lu danh sch bn b, to mt nhm Chat.
5.2 Hng pht trin
V c bn, nghin cu t c nhng yu cu t ra. Tuy nhn
nu c iu kin, n s c gng pht trin thm cc chc nng sau:
Cho php ngi dng c th to mt ti khon mi v c th ty
chnh li cc thng tin cc thng tin c nhn.
Cho php ngi dng qun tr c th Back up d liu.
Hon thin cc chc nng trong Group Chat.
H tr gi hnh nh khi Chat.
H tr chc nng gi file.
H tr chc nng Voice Chat v Webcam.
Trang 77
TI LIU THAM KHO
Ti liu:
Ting Vit
[1] Dng Quang Thin, 2005, .NET ton tp.
[2] Nguyn Ngc Bnh Phng, 2005, Cc gii php lp trnh C#.
Ting Anh
[3] Sybex, 2003, C-Sharp Network Programming.
[4] Fiach Reid, 2004, Network Programming in .NET.
Website:
[1] http://congdongcviet.com
[2] http://www.codeproject.com
[3] http://www.codeguru.com