77
Trang 1 Lời cảm ơn Em xin chân thành cảm ơn đến thầy Trần Phước Tuấn đã tận tình hướng dẫn em trong thời gian thực hiện đồ án này. Em xin chân thành cảm ơn Khoa Toán – Tin học đã tạo điều kiện cho em thực hiện tốt đồ án này. Xin chân thành cảm ơn các bạn đã tận tình giúp đỡ để mình có thể thực hiện tốt đồ án này. TpHCM, ngày 7 tháng 5 năm 2009 Sinh viên Nguyễn Ngọc Duy Tuệ

Baocaodoan_2008 - Lap Trinh Mang.doc

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

    Email

    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

    Email

    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