Professional Documents
Culture Documents
BO CO THC TP TT NGHIP
ti:
HONG VN VANG
NGUYN MNH DNG
Lp : H- KHMT1K3
Ging vin hng dn:
H Ni, 05/2012
PHIU GIAO TI
Page | 2
nm 2012
Ging vin
Th.S Nguyn Tin Li
Page | 3
LI NI U
Cng ngh thng tin l ngnh cng nghip mi nhn ca th gii ni chung v
ca Vit Nam ni ring, n pht trin mnh m khng ngng trong nhng nm gn
y. S lng cc trng hc c o to nghnh CNTT ngy mt tng cao, cng vi
l cc trung tm tin hc m ra ngy mt nhiu. V l t nhin khi cc trng, cc
trung tm mun c cc phng my cht lng th h cng s c nhu cu s dng cc
h thng qun l phng my a nng, tin dng v thn thin ngi s dng. Ti cc
phng my cc ging vin c th d dng truyn t kin thc mt cch sinh ng,
trc quan cho cc hc vin bng cch s dng chc nng chia s mn hnh ca phn
mm qun l phng my, hoc ging vin c th ch dn cho hc vin trc tip trn
mn hnh ca hc vin ch bng thao tc n gin ging nh trc tip ging vin ngi
ti my ca hc vin
Do vic xy dng mt phn mm lp hc o trong mng Lan l mt vic rt
cn thit, nhm h tr cc ging vin cng nh h tr cc hc vin c th tip cn
c vi cch hc tp trc quan d hiu. Nhn thc c tm quan trng cng nh
cp thit phi c mt h thng qun l cc my tnh trong phng hc mng Lan. Nhm
chng em ng k ti Xy dng phn mm lp hc o trong mng Lan. Vi hi
vng phn mm s gii quyt c phn no trong qu trnh dy v hc trong phng
my s dng mng Lan. V tin xa hn l mt phn mm o to thng qua mng
Internet, c hc vin v ging vin c th truy cp t bt k my tnh no c
ci t phn mm vic hc tp v ging dy s cng tr ln d dng hn.
hon thnh bo co thc tp tt nghip ny, chng em c s gip
tn tnh ca ging vin hng dn - Th.S Nguyn Tin Li - Ging vin khoa CNTT
trng i Hc Cng Nghip H Ni, Thy tn tnh hng dn, gp chnh sa rt
chi tit cho bi bo co ca chng em. Chng em xin chn thnh gi li cm n su
sc ti Thy. Xin chc Thy v gia nh lun mnh khe v thnh phc.
Page | 4
Page | 5
Page | 6
Page | 7
Ngha ca t
LanVC
IP
Internet Protocol.
TCP
UDP
TCP/IP
FPT
SMTP
HTTP
DNS
Doname System.
RGB
API
DLL
XML
HTML
MC LC
PHIU GIAO TI..............................................................................................................2
NHN XT CA GIO VIN HNG DN.....................................................................3
Page | 8
LI NI U...........................................................................................................................4
TM TT NI DUNG BO CO THC TP TT NGHIP.........................................5
DANH SCH HNH NH.......................................................................................................6
DANH MC BNG BIU.......................................................................................................7
DANH MC CC THUT NG VIT TT.......................................................................8
MC LC..................................................................................................................................9
CHNG 1. TNG QUAN V TI..............................................................................12
1.1. L do chn ti..........................................................................................................12
1.2. Tnh hnh nghin cu trn thc t..............................................................................12
1.3. Vn t ra ca ti...............................................................................................13
1.3.1. Mt s vn v cu hnh ca h thng.................................................................13
1.3.2. xut cc module.................................................................................................13
1.4. Mc tiu ca ti.......................................................................................................14
1.5. i tng v phng php nghin cu.....................................................................14
1.5.1. i tng nghin cu.............................................................................................14
1.5.2. Phng php nghin cu........................................................................................14
1.6. D kin cc kt qu nghin cu..................................................................................15
1.7. Kt lun.........................................................................................................................15
CHNG 2. L THUYT C S.......................................................................................16
2.1. Lp trnh Socket C#.....................................................................................................16
2.1.1. Socket l g?............................................................................................................16
2.1.2. Chc nng ca Socket.............................................................................................16
2.1.3. Phn loi Socket......................................................................................................16
2.1.4. Thnh phn ca mt Socket....................................................................................17
2.1.4.1. S hiu cng (port number).............................................................................17
2.1.4.2. a ch IP.........................................................................................................17
2.1.5. Cc ch giao tip................................................................................................18
2.1.6. Xy dng ng dng Client-Server vi Socket:.......................................................18
2.1.6.1. M hnh Client-Server s dng Socket ch c kt ni (TCP).................19
2.1.6.2. M hnh Client-Server s dng Socket ch khng kt ni (UDP)..........20
2.1.7. S dng C# Stream vi TCP...................................................................................22
2.1.7.1. Lp NetworkStream.........................................................................................22
2.1.7.2. Lp StreamReader v StreamWriter................................................................23
2.1.8. S dng cc lp Helper Socket...............................................................................24
2.1.8.1.TCPClient.........................................................................................................24
2.1.8.2. TCPListener.....................................................................................................25
2.1.8.3. UDPClient........................................................................................................26
2.1.9. Lp trnh Socket bt ng b..................................................................................27
2.1.9.1. Thnh lp kt ni.............................................................................................28
2.1.9.2. Trao i d liu................................................................................................28
2.2. Lp trnh .Net Remoting.............................................................................................29
2.2.1. Cc khi nim.........................................................................................................29
2.2.2. Remote Objects trong .NET Remoting...................................................................29
2.2.3.Domain.....................................................................................................................30
2.2.4.Channel....................................................................................................................30
2.2.5. Object Activation....................................................................................................31
2.2.6. Client Activated Objects.........................................................................................31
2.2.7. To mt Remotable Object.....................................................................................32
2.3. Lp trnh s kin trong Windows...............................................................................33
2.3.1. S dng Event v Delegate.....................................................................................33
Page | 9
Software
Client
Ram 512 MB
Ram 256 MB
LAN network
LAN network
Window XP
Windows XP.
Ram 2.0 GB
Client
Ram 512 MB
Page | 13
Software
LAN network
LAN network
Windows XP.
Page | 15
CHNG 2. L THUYT C S
2.1. Lp trnh Socket C#.
2.1.1. Socket l g?.
Socket l mt phng php thit lp kt ni truyn thng gia mt chng
trnh yu cu dch v ( client) v mt chng trnh cung cp dch v (server) trn
mng LAN, WAN hay Internet v i lc l gia nhng tin trnh ngay trong mt my
tnh. Mi socket c th c xem nh mt im cui (EndPoint) trong mt kt ni.
Mt socket trn my yu cu dch v c a ch mng c cp sn gi
mt socket trn my cung cp dch v. Mt khi socket c thit lp ph hp, hai
my tnh c th trao i dch v v d liu.
Socket c gii thiu ln u tin trong n bn UNIX - BSD 4.2 di dng
cc hm h thng theo c php ngn ng C (socket(), bind(), connect(), send(),
receive(), read(), write(), close() ,..). Ngy nay, Socket c h tr trong hu ht cc
h iu hnh nh MS Windows (WinSock), Linux v c s dng trong nhiu ngn
ng lp trnh khc nhau: nh C, C++, C#, Java, Visual Basic, Visual C++ . . .
D liu gi v nhn bng Socket bt buc phi l mng cc byte.
2.1.2. Chc nng ca Socket
Socket cho php thit lp cc knh giao tip m hai u knh c xc nh bi
hai cng (port). Thng qua cc cng ny mt tin trnh c th nhn v gi d liu vi
cc tin trnh khc.
Socket kiu AF_INTET cho php giao tip gia cc tin trnh trn nhng
my tnh khc nhau trn mng.
Phn loi theo kiu kt ni:
Socket hng kt ni (TCP Socket)
Socket khng hng kt ni (UDP Socket)
2.1.4. Thnh phn ca mt Socket
2.1.4.1. S hiu cng (port number)
c th thc hin cc cuc giao tip, mt trong hai tin trnh phi cho bit s
hiu cng ca socket m mnh s dng. Mi cng giao tip th hin mt a ch xc
nh trong mt h thng. Khi tin trnh c gn mt s hiu cng (Server), n c th
nhn d liu gi n cng ny t tin trnh khc (Client). Tin trnh cn li cng 8 yu
cu to ra mt socket.
2.1.4.2. a ch IP
Ngoi s hiu cng, hai bn giao tip cn phi bit a ch IP ca nhau. Trong
khi s hiu cng dng phn bit cc qu trnh khc nhau trn cng mt my tnh th
IP dng phn bit cc my tnh khc nhau trn cng mt mng TCP/IP.
Ch khng ni kt
- Khng tn ti knh giao tip o gia hai
bn.
- D liu c gi i khng m bo:
Khng kim tra li, khng pht hin v
truyn li gi tin b li hay mt, khng
m bo th t n ca cc gi tin.
- D liu khng chnh xc, tc truyn
nhanh.
Page | 18
Page | 19
Page | 21
Socket(AddressFamily.InterNetwork,
M t
true nu NetworkStream h tr c
CanSeek()
CanWrite()
DataAvailable()
true nu c d liu c
Phng thc
M t
BeginRead()
Bt u c NetworkStream bt ng b
BeingWrite()
Bt u ghi NetworkStream bt ng b
EndRead()
Kt thc c NetworkStream bt ng b
Page | 22
EndWrite()
Kt ghi c NetworkStream bt ng b
Flush()
y ton b d liu i
Read()
c d liu t NetworkStream
Write()
Equals()
GetHashCode()
Close()
ng i tng NetworkStream
Bng 2. 1. Mt s phng thc ca lp NetworkStream
M t
Read()
Peek()
ReadLine()
c d liu bt u t i tng
StreamRead tr ln cho ti khi bt gp k t
xung dng u tin.
ReadToEnd()
ToString()
Equals()
Close()
ng i tng StreamRead
Bng 2. 2. Mt s phng thc lp StreamRead
M t
Flush()
Gi tt c d liu trong b m
StreamWriter ra Stream.
Writer()
WriterLine()
TcpClient(IPEndPoint)
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
Client
Connected
Cc hm thnh phn
M t
Close()
Connect(RemoteHost,
RemotePort)
GetStream()
M t
TcpListener ( Int32)
TcpListener (IPEndPoint)
TcpListener(IPAddress,Int32)
Phng thc
M t
AcceptSocket( )
AcceptTcpClient()
Pending()
Start()
Stop()
2.1.8.3. UDPClient.
Giao thc UDP (User Datagram Protocol hay User Define Protocol) l mt giao
thc phi kt ni (connectionless) c ngha l mt bn c th gi d liu cho bn kia m
khng cn bit l bn sn sng hay cha? (Ni cch khc l khng cn thit lp
kt ni gia hai bn khi tin hnh trao i thng tin). Giao thc ny khng tin cy
bng giao thc TCP nhng tc li nhanh v d ci t. Ngoi ra, vi giao thc UDP
ta cn c th gi cc gi tin qung b (Broadcast) cho ng thi nhiu my.
Trong .NET, lp UDPClient (nm trong namesapce System.Net.Sockets) ng
gi cc chc nng ca giao thc UDP.
Bng cc thnh vin ca lp UDPClient
Phng thc khi to
M t
UdpClient ()
UdpClient (AddressFamily)
UdpClient (Int32)
UdpClient (IPEndPoint)
To mt UdpClient
AddressFamily
gn
hiu
cng,
UdpClient(String, Int32)
Phng thc
M t
BeginReceive()
BeginSend()
Gi khng ng b d liu ti my xa
Close()
ng kt ni.
Connect()
EndReceive()
EndSend()
Send()
M t
BeginAccept()
Chp nhn kt ni
EndAccept()
BeginConnect()
Kt ni n thit b xa
EndConnect()
BeginReceive()
EndReceive()
BeginReceiveFrom()
EndReceiveFrom()
BeginSend()
Gi d liu t Socket
EndSend ()
BeginSendTo()
Gi d liu n thit b xa
EndSendTo()
"tcp://localhost:1002/Test");
...
Page | 31
RemotingConfiguration.RegisterActivatedClientType(typeof(RemoteObjectC
AO), "tcp://localhost:1002/TestCAO");
obj = new RemoteObjectCAO();
...
Page | 32
c nh ngha bi Delegate. Sau khi phng thc hon tt, hn thng Windows s
x l s kin tip theo xy ra cho ti khi s kin kt thc chng trnh c pht ra.
2.4. Lp trnh a lung.
2.4.1. Khi nim a lung (Thread).
Mt lung (Thread) l mt chui lin tip nhng s thc thi trong chng
trnh. Trong mt chng trnh C#, vic thc thi bt u bng phng thc main() v
tip tc cho n khi kt thc hm main(). Cu trc ny rt hay cho nhng chng trnh
c mt chui xc nh nhng nhim v lin tip. Nhng thng th mt chng trnh
cn lm nhiu cng vic hn vo cng mt lc. V d trong Internet Explorer khi ta
ang ti mt trang web th ta nhn nt back hay mt link no , lm vic ny
Internet Explorer s phi lm t nht l 3 vic:
Ly d liu c tr v t Internet cng vi cc tp tin i km.
Th hin trang Web.
Xem ngi dng c nhp lm th g khc khng.
n gin vn ny ta gi s Internet Explorer ch lm hai cng vic:
Trnh by trang Web.
Xem ngi dng c nhp g khng.
thc hnh vic ny ta s vit mt phng thc dng ly v th hin trang
Web. Gi s rng vic trnh by trang Web mt nhiu thi gian (do phi thi hnh cc
on javascript hay cc hiu ng no ). V vy sau mt khong thi gian ngn
khong 1/12 giy, phng thc s kim tra xem ngi dng c nhp g khng. Nu c
th n s uc x l, nu khng th vic trnh by trang s c tip tc. V sau 1/12
giy vic kim tra s c lp li. Tuy nhin vit phng thc ny th rt phc tp do
ta s dng kin trc event trong Window ngha l khi vic nhp xy ra h thng s
thng bo cho ng dng bng cch a ra mt event. Ta s cp nht phng thc
cho php dng cc event:
Ta s vit mt b x l event p ng i vi vic nhp ca ngi
dng.
Ta s vit mt phng thc ly v trnh by d liu. Phng thc ny
c thc thi khi ta khng lm bt c iu g khc.
Ta hy xem cch phng thc ly v trnh by trang web lm vic: u tin n
s t nh thi gian. Trong khi n ang chy, my tnh khng th p ng vic nhp
ca ngi dng . Do n phi ch n vic nh thi gian gi phng thc kim
tra vic nhp ca ngi dng, ngha l phng thc va chy va quan st thi gian.
Bn cnh n cn phi quan tm n vic lu tr trng thi trc khi n gi phng
thc khc sau khi phng thc khc thc hin xong n s tr v ng ch n
Page | 34
dng. Vo thi Window 3.1 y thc s l nhng g phi lm x l tnh hung ny.
Tuy nhin NT3.1 v sau l Windows 95 tr i c vic x l a lung iu ny
lm vic gii quyt vn tin li hn. Di y chng ta s tm hiu mt vi lp c
bn trong ngn ng lp trnh C# v vn ng b ha (Synchronization) trong lp
trnh a lung.
2.4.2. Tham kho th vin System.Thread.
Namespace System.Threading cung cp mt s kiu d liu cho php bn thc
hin lp trnh a lung. Ngoi vic cung cp nhng kiu d liu tng trng cho mt
lung c th no , namespace ny cn nh ngha nhng lp c th qun l mt
collection cc lung (ThreadPool), mt lp Timer n gin (khng da vo GUI) v
cc lp cung cp truy cp c ng b vo d liu c chia s s dng.
Cc lp thnh vin
M t
Interlocked
Moniter
Mutex
Thread
ThreadPool
Timer
WaitHandle
ThreadStart
TimerCallBack
Delegate i vi Timer.
WaitCallBack
thc thi (c static ln shared) cho php bn to mi nhng lung t lung hin hnh,
cng nh cho Sleep, Stop hay Kill mt lung no .
Cc thnh phn Static
M t
CurrentThread
GetData()
SetData()
GetDomain()
GetDomainID()
Sleep()
M t
IsAlive
IsBackground
Name
Priority
ThreadState
Interrup()
Join()
Resume()
Start()
Suspend()
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();
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();
Page | 39
t2.IsBackground = true;
t2.Name = "Thread Two";
t2.Start();
Console.WriteLine("Start thread {0}", t2.Name);
t1.Join();
t2.Join();
Console.WriteLine("All my threads are done.");
}
public void Incrementer()
{
try
{
while (counter < 1000)
{
int temp = counter;
temp++;
Thread.Sleep(1);
counter = temp;
Console.WriteLine("Thread {0}. Incrementer: {1}",
Thread.CurrentThread.Name, counter);
}
}
catch (ThreadInterruptedException)
{
Console.WriteLine("Thread {0} interrupted! Cleaning up...",
Thread.CurrentThread.Name);
}
finally
{
Console.WriteLine("Thread {0} Existing.",
Thread.CurrentThread.Name);
}
}
}
}
Kt qu t c l:
Page | 40
Kt qu t c l:
Page | 41
Page | 43
ProcessObject(next);
nh nh phn (1 bit).
nh a mc xm (8 bit).
nh mu (16, 24 bit).
nh c biu din di dng ma trn cc im nh c gi l nh bitmap.
nh c chp mn hnh thng thu li nm trong h mu RGB, c c
trng bi ba mu : mu ( Red - R ),mu xanh l cy (Green - G ), mu xanh nc
bin (Blue - B) to ln khng gian mu c trng cho im nh v to ln mu sc ti
im nh .
Page | 45
Page | 46
Chng ta s thc hin vic chp mn hnh desktop lin tc, v tin hnh so snh
gia hai nh vi nhau, nu c s khc bit gia hai nh th tin hnh khoanh vng
khc bit v ct nhng im khc bit (s dng thut ton ct nh).
u vo : Ta s a vo 2 nh chp mn hnh so snh.
u ra : Vng nh thay i.
T tng thut ton.
Chia mi nh thnh ma trn 10x10 vi Rectangle.
Sau ct tng Rectangle hai nh ra em so snh vi nhau.
Thc hin vic so snh tng pixel ca hai Rectangle vi nhau nu mt
trong cc pixel thay i th Rectangle b thay i.
Ta s ly ra Rectangle b thay i .
2.6. Mt s k thut khc.
2.5.1. Cc hm API.
2.5.1.1. Khi nim API.
API l vit tt ca Application Programming Interface (Giao din lp trnh ng
dng). API cung cp hu ht cc tnh nng thng dng cho tt c cc chng trnh
chy trn nn Window. Hu ht cc hm API thng c cha trong file DLL trong
th mc ca h thng Window (thng l C:\Windows\System).
2.5.1.2. Cc thnh phn ca Windows API.
C 4 thnh phn to ln Windows API.
Cc hm (Function) l thnh phn chnh ca Windows API, chng c
cha trong cc file DLL v c th c truy xut mt cch d dng bi
cc chng trnh trn nn Windows.
Cc cu trc (Structure) nhiu hm API i hi mt cu trc phi c
truyn cho chng c th vn chuyn mt lng ln thng tin m m
khng cn phi dng qu nhiu i s. Cc cu trc ny c dng trong
hm API nhng chng ta phi t nh ngha.
Cc hng c t tn (name constant) cng nh cu trc, cc hng phi
c nh ngha r rng trong chng trnh.
Cc hm Callback (Callback Function) v mt khi nim, cc hm
Callback ngc vi cc hm API. Mt hm Callback c nh ngha
hon ton trong chng trnh ca bn. Sau hm ny s c mt hm
API khc gi n khi thc hin mt tc v no . Cc hm Callback
cung cp mt cch thc chng trnh ca bn c th can thip trc
tip vo mt tc v no .
Page | 47
extern
IntPtr
FindWindow(string
lpClassName,
string
Page | 48
IntPtr
EnableMenuItem(IntPtr
hMenu,
IntPtr
Page | 49
M t
Name
SubKeyCount()
ValueCount()
Cc gi tr trn key.
Tn phng thc
M t
Close()
ng li key.
Page | 51
CreateSubKey()
To mt SubKey mi.
DeleteSubKey()
Xa b mt key c ch nh.
DeleteSubKeyTree()
GetValue()
Hm tm li gi tr c khai bo.
GetValueName()
OpenSubKey()
Hm tr v mt gi tr SubKey.
SetValue()
Page | 52
Page | 54
Page | 55
Page | 56
Page | 58
Page | 59
public
deleReceive;// --- Top
DelegateControlMessageServerReceiveFromClient
Page | 60
return;
}
total += receve;
dataLeft -= receve;
}
deleReceive(message, clientIndex);
}
catch (Exception ex)
{
StopReceive();
MessageBox.Show(ex.Message, String.Format("LAN Virtual
Class v1.0 - ServerReceiver - OnReceive() - listClient[{0}]", clientIndex),
MessageBoxButtons.OK, MessageBoxIcon.Error);
break;
}
}
}
// Dung viec nhan du lieu
public void StopReceive()
{
try
{
if (client != null)
{
client.Close(); client = null;
}
threadReceive.Abort();
threadReceive.Join();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "LAN Virtual Class v1.0 ServerReceiver
StopReceive()",
MessageBoxButtons.OK,
MessageBoxIcon.Error);
}
}
}
3.2.1.2. Lp ServerSender.
Page | 61
M ngun.
public class ServerSender
{
public Socket client;// client da duoc ket noi den server
public int clientIndex;// chi so cua client trong listClient cua server
public byte[] message;// tin nhan can gui di
public DelegateControlMessageServerSendToClient deleSend;// --- Xem phan
Delegate ben tren
public Thread threadSend;// --- thread de thuc hien viec send dong bo
// Khoi tao
public ServerSender(Socket client, int clientIndex,
DelegateControlMessageServerSendToClient deleSend)
{
this.client = client; this.clientIndex = clientIndex;
this.deleSend = deleSend;
}
// Bat dau send du lieu
public void StartSend()
{
while (threadSend == null || threadSend.ThreadState ==
ThreadState.Stopped)
threadSend = new Thread(OnSend);
threadSend.Start();
}
// Thuc hien send du lieu kem kich thuoc cua du lieu
Page | 62
Page | 63
3.2.1.3. Lp ServerTCP.
Khi to mt i tng Server v i din cho Server.
M hnh
M ngun.
public class ServerTcp
{
public Socket server;// socket server
public List<Socket> listClient;// danh sach cac client ket noi den server
public List<ServerSender> listSender;// danh sach cac sender cho cac client
public List<ServerReceiver> listReceiver;// danh sach cac receiver cho cac
client
Page | 64
DelegateControlMessageServerSendToListClient
Page | 65
// ---> Can kiem tra xem client da ton tai hay chua? Neu ton tai roi thi
thay the cai cu = cai moi
// Neu khong thi add --> thuc hien = IndexClient(Socket client)// Chua
giai quyet duoc
listReceiver.Add(new ServerReceiver(listClient[listClient.Count - 1],
listClient.Count - 1, deleReceive));
listReceiver[listClient.Count - 1].StartReceive();
listSender.Add(new ServerSender(listClient[listClient.Count - 1],
listClient.Count - 1, deleSendToClient));
// Gui thong tin server cho client
for (int i = 0; i < 5; i++)
SendMessageToClient(listClient.Count - 1,
BufferData.CreateMessage(TypeMessage.Command,
Command.ServerInfo,
BufferData.CreateInforMes
sage()));
// Gui clientIndex cho client
SendMessageToClient(listClient.Count - 1,
BufferData.CreateMessage(TypeMessage.Command,Command.ClientIndex,BitCon
verter.GetBytes(listClient.Count - 1)));
deleUpdateListClient();
server.BeginAccept(new AsyncCallback(AcceptCallBack), null);
}
catch// (Exception ex)
{
// Loi do dong server
//MessageBox.Show(ex.Message, "LAN Virtual Class v1.0 - ServerTcp AcceptCallBack()", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
// Phuong thuc tin kiem client trong listClient va tra ve vi tri dau tien ma
client xuat hien trong listClient
public int IndexClient(Socket client)
{
int i = 0;
while (i < listClient.Count && listClient[i].Equals(client) == false)
i++;
return (i < listClient.Count) ? i : -1;
Page | 66
}
// Thuc hien send mot tin nhan toi tat ca cac client trong listClient ket noi
den server
public void SendMessageToAllClient(byte[] message)
{
for (int i = 0; i < listClient.Count; i++)
SendMessageToClient(i, message);
deleSendToListClient(message);
}
// Thuc hien gui tin nhan den mot client co chi so la clientIndex trong
listClient ket noi
public void SendMessageToClient(int clientIndex, byte[] message)
{
if (listClient[clientIndex] != null)
{
listSender[clientIndex].message = message;
listSender[clientIndex].StartSend();
listSender[clientIndex].threadSend.Join();
}
}
// Thuc hien gui tin nhan den mot list cac client duoc quy dinh trong
listClientIndex
public void SendDataToListClient(byte[] message, List<int> listClientIndex)
{
foreach (int clientIndex in listClientIndex)
SendMessageToClient(clientIndex, message);
deleSendToListClient(message);
}
// Ngat ket noi cua mot client co chi so la clientIndex trong listClient
public void DisAcceptClient(int clientIndex)
{
if (listClient[clientIndex] != null)
{
// Gui tin nhan offline client de client update lai tinh trang ket noi
if (listReceiver[clientIndex] != null)
{
listReceiver[clientIndex].StopReceive();
listReceiver[clientIndex] = null;
Page | 67
}
SendMessageToClient(clientIndex,
BufferData.CreateMessage(TypeMessage.Command,
Command.OffLineClient,
null));
if (listSender[clientIndex] != null)
{
listSender[clientIndex].StopSend();
listSender[clientIndex] = null;
}
listClient[clientIndex].Close();
listClient[clientIndex] = null;
}
}
// Ngat ket noi cua moi client va dung server
public void StopServer()
{
try
{
if (listClient != null)
{
for (int i = 0; i < listClient.Count; i++)
{
DisAcceptClient(i);
}
listClient = null;
}
if (server != null)
{
server.Close();
server = null;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "LAN Virtual Class v1.0 - ServerTcp StopServer()", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
finally
Page | 68
{
deleSetControl(false);
}
}
}
3.2.1.4. Lp BuffData.
C nhim v ly cc thng tin ca my Server gi cc gi tin Broadcast cho tt
c cc my trong mng Lan bao gm thng tin v Server v a ch IP ca Server.
M hnh.
M ngun.
// Tao ra du lieu quoang ba la su ket hop cua dia chi IP local va chuoi tin quang ba
public static byte[] CreateDataBroadCast(string messageBroadcast)
{
List<byte> result = new List<byte>(0);
string localIPAddress = GetLocalIPAddress().ToString();
result.AddRange(BitConverter.GetBytes(localIPAddress.Length));
result.AddRange(Encoding.UTF8.GetBytes(localIPAddress));
result.AddRange(Encoding.UTF8.GetBytes(messageBroadcast));
return result.ToArray();
}
// Lay ra dia chi IP cua Server
public static string GetRemoteIPAddress(byte[] dataBroadCast)
Page | 69
{
byte[] dataSizeRemoteIPAddressString = new byte[4];
try
{
Array.Copy(dataBroadCast, 0, dataSizeRemoteIPAddressString, 0, 4);
int sizeRemoteIPAddressString
BitConverter.ToInt32(dataSizeRemoteIPAddressString, 0);
byte[]
dataRemoteIPAddressString
=
new
byte[sizeRemoteIPAddressString];
Array.Copy(dataBroadCast, 4, dataRemoteIPAddressString, 0,
sizeRemoteIPAddressString);
return Encoding.UTF8.GetString(dataRemoteIPAddressString);
}
catch
{
return "";
}
}
// Lay chuoi tin quang ba tu du lieu cua tin quang ba
public static string GetMessageBroadCast(byte[] dataBroadCast)
{
byte[] dataSizeRemoteIPAddressString = new byte[4];
try
{
Array.Copy(dataBroadCast, 0, dataSizeRemoteIPAddressString, 0, 4);
int sizeRemoteIPAddressString
BitConverter.ToInt32(dataSizeRemoteIPAddressString, 0);
Page | 70
M ngun
public class ClientReceiver
{
public Socket server;// server da duoc connect
public DelegateControlMessageClientReceiveFromServer deleReceive;// --Top
public Thread threadReceive;// thread de nhan du lieu
// Khoi tao
public
ClientReceiver(Socket
DelegateControlMessageClientReceiveFromServer deleReceive)
server,
{
this.server = server; this.deleReceive = deleReceive;
}
// Bat dau receive
public void StartReceive()
{
threadReceive = new Thread(OnReceive);
threadReceive.Start();
}
// Trong qua trinh nhan du lieu
public void OnReceive()
{
while (true)
{
Page | 71
try
{
int total = 0;
int receve;
byte[] dataSize = new byte[4];
receve = server.Receive(dataSize, 0, 4, SocketFlags.None);
int size = BitConverter.ToInt32(dataSize, 0);
int dataLeft = size;
byte[] message = new byte[size];
while (total < size)
{
receve = server.Receive(message, total, dataLeft,
SocketFlags.None);
if (receve == 0)
{
message = null;
return;
}
total += receve;
dataLeft -= receve;
}
deleReceive(message);
}
catch (Exception ex)
{
StopReceive();
MessageBox.Show(ex.Message, "LAN Virtual Class v1.0 ClientReceiver - OnReceive()", MessageBoxButtons.OK, MessageBoxIcon.Error);
break;
}
}
}
// Dung viec nhan du lieu
public void StopReceive()
{
try
{
if (server != null)
Page | 72
{
server.Close();
server = null;
}
threadReceive.Abort();
threadReceive.Join();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "LAN Virtual Class v1.0 - ClientReceiver
- StopReceive()", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
3.2.2.2. Lp ClientSender.
C nhim v gi cc gi tin t bn pha Client cho bn Server.
M hnh
M ngun
public class ClientSender
{
public Socket server;// socket server da connect
public byte[] message;// tin nhan can gui
public DelegateControlMessageClientSendToServer deleSend;// --- Top
public Thread threadSend;// thread de send
// Khoi tao
public
ClientSender(Socket
DelegateControlMessageClientSendToServer deleSend)
server,
{
this.server = server; this.deleSend = deleSend;
Page | 73
}
// Bat dau send du lieu
public void StartSend()
{
threadSend = new Thread(OnSend);
threadSend.Start();
}
// Thuc hien send du lieu dong bo
public void OnSend()
{
try
{
int total = 0;
int size = message.Length;
int dataLeft = size;
int sent;
byte[] dataSize = new byte[4];
dataSize = BitConverter.GetBytes(size);
sent = server.Send(dataSize);
while (total < size)
{
sent = server.Send(message, total, dataLeft, SocketFlags.None);
total += sent;
dataLeft -= sent;
}
deleSend(message);
}
catch (Exception ex)
{
StopSend();
MessageBox.Show(ex.Message, "LAN Virtual Class v1.0 - ClientSender OnSend()", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
// Dung viec send du lieu
public void StopSend()
{
try
Page | 74
{
if (server != null)
{
server.Close(); server = null;
}
threadSend.Abort();
threadSend.Join();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "LAN Virtual Class v1.0 - ClientSender StopSend()", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
3.2.2.3. Lp ClientTCP.
Khi to mt i tng Client v i din cho Client.
M hnh
M ngun.
public class ClientTcp
{
public Socket server;// socket server ma client ket noi den
public ClientSender sender;// sender cua client
public ClientReceiver receiver;// receiver cua client
public DelegateControlMessageClientReceiveFromServer deleReceive;// --Top
Page | 75
new
AsyncCallback(ConnectCallBack), server);
}
catch (Exception ex)
{
DisConnect();
MessageBox.Show(ex.Message, "LAN Virtual Class v1.0 - ClientTcp Connect()", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
// Thuc hien ket noi
public void ConnectCallBack(IAsyncResult iAR)
{
try
{
server = (Socket)iAR.AsyncState;
server.EndConnect(iAR);
receiver = new ClientReceiver(server, deleReceive);
receiver.StartReceive();
sender = new ClientSender(server, deleSend);
// Gui thong tin client cho server
for (int i = 0; i < 5; i++)
Send(BufferData.CreateMessage(TypeMessage.Command,
Command.ClientInfo, BufferData.CreateInforMessage()));
deleSetControl(true);
}
Page | 76
Page | 77
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "LAN Virtual Class v1.0 - ClientTcp DisConnect()", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
finally
{
deleSetControl(false);
}
}
}
CHNG 5. KT LUN
Page | 78
5.1. Nhng kt qu t c.
Sau qu trnh nghin cu v trin khai ti Xy dng phn mm lp hc o
trong mng Lan thu c nhng kt qu sau y.
Tm hiu c cc cch thc lp trnh Socket v lp trnh .Net Remoting
trong C#.
Nghin cu cc kin thc lp trnh Windows nng cao nh lp trnh vi
cc hm API, lp trnh trn nn tng Registry.
Ngoi ra cn c kin thc nng cao v s l nh, lp trnh a lung, lp
trnh s kin Delegate.
Xy dng c hon chnh cc module chia s mn hnh, remote
desktop, v mt s chc nng khc.
5.2. Hng pht trin.
V c bn phn mm t c nhng vn t ra. Tuy nhin trong giai
on thc tp xy dng ln phn mm ny cn nhiu vn cn phi pht trin thm.
Xy dng mt phn mm LanVc hon chnh v hon ton min ph c
th thay th c phn mm Farstone Virtual Class c gi rt t v
thiu i chc nng quay phim mn hnh v VoIP.
Xy dng mt modul tch bit Remote desktop thnh mt sn phm
remote control over Internet c thm cc chc nng nh VoIP v chat
thoi c sc cnh tranh tt c th thay th phn mm thng dng hin
nay Teamviewer.
Xy dng thm c cc module Screen record ring bit m khng cn
phi ph thuc vo s dng cng c Windows Media Encorder s gip
vic quay video tr ln cht lng hn v c thm c chc nng ghi m
c ging ni trong video.
Hng pht trin tch hp thm vo phn mm thi trc nghim trong
mng Lan c cc chc nng thi, chm bi thi.
Hoc c th pht trin ln phn mm thnh mt phn mm dy hc trc
tuyn vi y cc chc nng nh ca phn mm Lp hc o trong
mng Lan.
[2]. Andrew Krowczyk, Vinod Kumar, Nauman Laghari, Tim Parker, Srinivasa
Sivakumar, Professional_.NET_Network_Programming, Wrox Press Ltd.
[3]. Brent Rector, Introduction to .NET Remoting, Wise Owl Consulting, Inc
(2004).
[4]. Fiach Reid, Network programming in .NET with C# and VB.NET (Digital
Press), Elseviers Science & Technology Rights Department in Oxford (2004).
[5]. Richard Blum, Sybex_-_Csharp_Network_Programming, Sybex 2003.
[6]. Joe Mayo, C# 3.0 UNLEASHED , Copyright 2008 by Pearson Education,
Inc.
[7]. Simon Robinson, Christian Nagel, Jay Glynn, Morgan Skinner, Karli Watson,
Bill Evjen, Professional C# Third Edition, Wiley Publishing, Inc (2004).
[8]. Wei-Meng Lee , C# 2008 Programmers Reference , Wiley Publishing, Inc
(2009).
[9]. Joseph Albahari and Ben Albahari, C# 4.0 IN A NUTSHELL, OReilly Media,
Inc.
[10].o Lu Duy, Bi ging lp trnh mng vi C#, Sch in t.
[11].Ng B Hng, Nguyn Cng Huy, Gio trnh lp trnh mng vi Java, Khoa
Cng Ngh Thng Tin trng i hc Cn Th.
[12].Nguyn Cao t, Bi ging lp trnh mng, Trng i hc Bch Khoa TP.
H Ch Minh.
[13].Nhm tc gi, Gio trnh lp trnh mng vi Java, Tng hp din n i hc.
[14].Nhm tc gi, Gio trnh lp trnh mng vi C#, Trng i hc Lt.
[15].Vn Thin Hong, Gio trnh lp trnh mng, Trng i hc Cng Ngh i
hc Quc Gia TP.H Ch Minh.
[16].Nguyn Quang Hoan, Gio trnh x l nh, Hc vin cng ngh Bu Chnh
Vin Thng.
[17].Nguyn Hng Cng, Bi thc hnh x l nh vi C#, Trng i hc Cng
Nghip H Ni.
[18].Nhm tc gi, Cn bn XML, Trung tm cng ngh phn mm Tha Thin
Hu.
[19].Nguyn H Giang, Lp trnh Windows C#, Trng i hc Khoa hc t nhin
i hc Quc Gia H Ni.
[20].Nguyn Ngc Bnh Phng, Thi Thanh Phong, Cc gii php lp trnh C#,
Nh xut bn giao thng vn ti.
[21].Nguyn Tn Thun, Lp trnh ng dng Windows From trong C#, Hc vin
cng ngh thng tin NIT.
[22].Bi Duy Hng, Phn mm Free Virtual Class, Gii thng phn mm sng to
trng i hc Cng Nghip H Ni.
[23]. Nguyn Thnh Trung, Phn mm qun l phng Lab, n tt nghip.
[24].Nguyn Huy Khnh, M ngun phn mm chat trong mng Lan, n mn
hc lp trnh mng.
[25]. David Robinson, M ngun Remote Desktop.
[26].http://diendan.congdongcviet.com/showthread.php?t=31306
snh hai nh bitmap) truy cp ln cui cng ngy 20/04/2012.
(thut ton so
Page | 80
Page | 81