Giáo trình Lập trình mạng với C#

CHƯƠNGꢀ1:ꢀCÁCꢀKIꢁNꢀTHꢂCꢀCƠꢀBꢃNꢀVꢄꢀMꢅNGꢀMÁYꢀTÍNH.......................................3ꢀ  
1.1.ꢀMôꢀhìnhꢀthamꢀkhꢆoꢀ7ꢀtꢇngꢀOSI........................................................................................3ꢀ  
1.2.ꢀHꢈꢀgiaoꢀthꢉcꢀTCP/IP........................................................................................................5ꢀ  
1.3.ꢀSoꢀsánhꢀgiꢊaꢀhaiꢀgiaoꢀthꢉcꢀTCPꢀvàꢀUDP.........................................................................6ꢀ  
1.4.ꢀCꢋngꢀgiaoꢀthꢉc.................................................................................................................7ꢀ  
1.5.ꢀðꢌaꢀchꢍꢀIP,ꢀcácꢀñꢌaꢀchꢍꢀIPꢀdànhꢀriêng................................................................................7ꢀ  
1.6.ꢀðꢌaꢀchꢍꢀtênꢀmiꢎn:ꢀloꢏiꢀA,ꢀloꢏiꢀMX.. .................................................................................8ꢀ  
1.7.ꢀMꢐtꢀsꢑꢀgiaoꢀthꢉcꢀꢒꢀtꢇngꢀꢉngꢀdꢓng:ꢀHTTP,ꢀSMTP,ꢀPOP3,ꢀFTP... ...................................8ꢀ  
CHƯƠNGꢀ2:ꢀLꢔPꢀTRÌNHꢀMꢅNGꢀTRONGꢀ.NETꢀFRAMEWORK ........................................9ꢀ  
2.1.ꢀSocketꢀhưꢕngꢀkꢖtꢀnꢑiꢀ(TCPꢀSocket) ................................................................................9ꢀ  
2.1.1.ꢀGiꢕiꢀthiꢗuꢀvꢎꢀNameSpaceꢀSystem.NetꢀvàꢀSystem.Net.Sockets..............................10ꢀ  
2.1.2.ꢀViꢖtꢀchươngꢀtrìnhꢀchoꢀphíaꢀmáyꢀchꢘ.......................................................................11ꢀ  
2.1.3.ꢀViꢖtꢀchươngꢀtrìnhꢀchoꢀphíaꢀmáyꢀkhách...................................................................13ꢀ  
2.1.4.ꢀSꢙꢀdꢓngꢀcácꢀluꢚngꢀnhꢛpꢀxuꢜtꢀvꢕiꢀSocket................................................................14ꢀ  
2.2.ꢀSocketꢀkhôngꢀhưꢕngꢀkꢖtꢀnꢑiꢀ(UDPꢀSocket)...................................................................17ꢀ  
2.2.1.ꢀViꢖtꢀchươngꢀtrìnhꢀchoꢀphíaꢀmáyꢀchꢘ.......................................................................17ꢀ  
2.2.2.ꢀViꢖtꢀchươngꢀtrìnhꢀchoꢀphíaꢀmáyꢀkhách...................................................................18ꢀ  
2.2.3.ꢀSꢙꢀdꢓngꢀlꢕpꢀSystem.IO.MemoryStreamꢀñꢝꢀtꢏoꢀvùngꢀñꢗmꢀnhꢛpꢀxuꢜt.....................20ꢀ  
2.3.ꢀSꢙꢀdꢓngꢀcácꢀlꢕpꢀhꢞꢀtrꢟꢀñưꢟcꢀxâyꢀdꢠngꢀtꢡꢀlꢕpꢀSoket .....................................................20ꢀ  
2.3.1.ꢀLꢕpꢀTCPClient........................................................................................................21ꢀ  
2.3.2.ꢀLꢕpꢀTCPListener ....................................................................................................22ꢀ  
2.3.3.ꢀLꢕpꢀUDPClient .......................................................................................................24ꢀ  
2.4.ꢀSocketꢀkhôngꢀñꢚngꢀbꢐ....................................................................................................26ꢀ  
2.4.1.ꢀMôꢀhìnhꢀxꢙꢀlýꢀsꢠꢀkiꢗnꢀcꢘaꢀwindows.......................................................................26ꢀ  
2.4.2.ꢀSꢙꢀdꢓngꢀSocketꢀkhôngꢀñꢚngꢀbꢐ ..............................................................................27ꢀ  
2.4.3.ꢀVíꢀdꢓꢀvꢎꢀSocketꢀkhôngꢀñꢚngꢀbꢐ..............................................................................28ꢀ  
2.4.4.ꢀSꢙꢀdꢓngꢀcácꢀphươngꢀthꢉcꢀNonꢢblocking ................................................................35ꢀ  
2.5.ꢀSꢙꢀdꢓngꢀThreadꢀtrongꢀcácꢀꢉngꢀdꢓngꢀmꢏng....................................................................39ꢀ  
2.5.1.ꢀSꢙꢀdꢓngꢀThreadꢀtrongꢀchươngꢀtrìnhꢀ.Net................................................................40ꢀ  
2.5.2.ꢀSꢙꢀdꢓngꢀThreadꢀtrongꢀcácꢀchươngꢀtrìnhꢀServer......................................................41ꢀ  
2.5.3.ꢀSꢙꢀdꢓngꢀThreadꢀñꢝꢀgꢙi/nhꢛnꢀdꢊꢀliꢗu.......................................................................41ꢀ  
2.5.4.ꢀSꢙꢀdꢓngꢀThreadPoolꢀtrongꢀcácꢀchươngꢀtrìnhꢀ.Net ..................................................43ꢀ  
2.5.5.ꢀSꢙꢀdꢓngꢀThreadPoolꢀtrongꢀcácꢀchươngꢀtrìnhꢀServer...............................................47ꢀ  
2.6.ꢀKꢣꢀthuꢛtꢀIPꢀMulticasting................................................................................................48ꢀ  
2.6.1.ꢀBroadcastingꢀlàꢀgì?..................................................................................................48ꢀ  
2.6.2.ꢀSꢙꢀdꢓngꢀBroadcastingꢀñꢝꢀgꢙiꢀdꢊꢀliꢗuꢀñꢖnꢀnhiꢎuꢀmáyꢀtrongꢀmꢏngꢀcꢓcꢀbꢐ ..............48ꢀ  
2.6.3.ꢀMulticastingꢀlàꢀgì? ..................................................................................................49ꢀ  
2.6.4.ꢀSocketꢀMulticastingꢀtrongꢀ.Net ...............................................................................50ꢀ  
2.7ꢀBàiꢀtꢛpꢀápꢀdꢓng ...............................................................................................................53ꢀ  
CHƯƠNGꢀ3:ꢀXÂYꢀDꢤNGꢀꢂNGꢀDꢥNGꢀMꢅNG...................................................................55ꢀ  
3.1.ꢀGiaoꢀthꢉcꢀICMP.............................................................................................................55ꢀ  
3.1.1.ꢀSꢙꢀdꢓngꢀRawꢀSocket...............................................................................................55ꢀ  
3.1.2.ꢀSꢙꢀdꢓngꢀgiaoꢀthꢉcꢀICMPꢀvàꢀRawꢀSocketꢀñꢝꢀxâyꢀdꢠngꢀchươngꢀtrìnhꢀPing.............57ꢀ  
3.1.3.ꢀSꢙꢀdꢓngꢀgiaoꢀthꢉcꢀICMPꢀvàꢀRawꢀSocketꢀñꢝꢀxâyꢀdꢠngꢀchươngꢀtrìnhꢀTraceRoute .58ꢀ  
3.2.ꢀGiaoꢀthꢉcꢀSMTP,ꢀPOP3.................................................................................................60ꢀ  
3.2.1.ꢀCơꢀbꢆnꢀvꢎꢀhꢗꢀthꢑngꢀMailꢀvàꢀgiaoꢀthꢉcꢀSMTP,ꢀPOP3 .............................................60ꢀ  
3.2.2.ꢀCàiꢀñꢦtꢀSMTP,ꢀPOP3ꢀClient/Server........................................................................60ꢀ  
3.3.ꢀGiaoꢀthꢉcꢀHTTP.............................................................................................................67ꢀ  
3.3.1.ꢀCơꢀbꢆnꢀvꢎꢀgiaoꢀthꢉcꢀHTTP .....................................................................................67ꢀ  
3.3.2.ꢀCàiꢀñꢦtꢀHTTPꢀClient/Server....................................................................................68ꢀ  
3.4.ꢀGiaoꢀthꢉcꢀFTP................................................................................................................74ꢀ  
3.4.1.ꢀCơꢀbꢆnꢀvꢎꢀgiaoꢀthꢉcꢀFTP ........................................................................................74ꢀ  
3.4.2.ꢀCàiꢀñꢦtꢀFTPꢀClient/Server.......................................................................................84ꢀ  
ꢀ
1ꢀ  
3.5.ꢀDNSꢀ(DomainꢀNameꢀServer).........................................................................................88ꢀ  
3.5.1.ꢀVꢜnꢀñꢎꢀphânꢀgiꢆiꢀtênꢀmiꢎn ......................................................................................88ꢀ  
3.5.2.ꢀTriꢝnꢀkhaiꢀDNSꢀMXꢀ(MailꢀExchange) ...................................................................89ꢀ  
3.6ꢀThꢆoꢀluꢛnꢀvꢎꢀcácꢀꢉngꢀdꢓngꢀkhácꢀthưꢧngꢀgꢦp .................................................................93ꢀ  
3.7ꢀBàiꢀtꢛpꢀápꢀdꢓng ...............................................................................................................93ꢀ  
CHƯƠNGꢀ4:ꢀXÂYꢀDꢤNGꢀꢂNGꢀDꢥNGꢀNHIꢄUꢀLꢨP ..........................................................94ꢀ  
4.1.ꢀMôꢀhìnhꢀ2ꢀlꢕpꢀ(twoꢀtier),ꢀ3ꢀlꢕpꢀ(threeꢀtier)ꢀvàꢀnꢀlꢕp. .....................................................94ꢀ  
4.2.ꢀRemoting........................................................................................................................98ꢀ  
4.2.1.ꢀGiꢕiꢀthiꢗuꢀvꢎꢀRemoting.........................................................................................102ꢀ  
4.2.2.ꢀKhaiꢀbáo,ꢀcàiꢀñꢦtꢀvàꢀñăngꢀkýꢀgiaoꢀdiꢗnꢀtꢡꢀxa........................................................102ꢀ  
4.2.3.ꢀTriꢗuꢀgꢈiꢀphươngꢀthꢉcꢀtꢡꢀxa .................................................................................107ꢀ  
4.3.ꢀWebꢀSerive...................................................................................................................107ꢀ  
4.3.1.ꢀGiꢕiꢀthiꢗuꢀvꢎꢀWebꢀSerives ....................................................................................107ꢀ  
4.3.2.ꢀGiaoꢀthꢉcꢀSOAP ...................................................................................................109ꢀ  
4.3.3.ꢀXâyꢀdꢠngꢀWebꢀServices........................................................................................112ꢀ  
4.3.4.ꢀTriꢗuꢀgꢈiꢀWebꢀServicesꢀtꢡꢀꢉngꢀdꢓngꢀ.NET,ꢀJavaꢀvàꢀcácꢀngônꢀngꢊꢀkhác .............114ꢀ  
4.4ꢀThꢆoꢀluꢛnꢀvꢎꢀcácꢀꢉngꢀdꢓngꢀphânꢀtán ............................................................................116ꢀ  
4.5.ꢀBàiꢀtꢛpꢀápꢀdꢓng ............................................................................................................116ꢀ  
ꢀ
2ꢀ  
CHƯƠNGꢀ1:ꢀCÁCꢀKIꢁNꢀTHꢂCꢀCƠꢀBꢃNꢀVꢄꢀMꢅNGꢀMÁYꢀTÍNHꢀ  
1.1.ꢀMôꢀhìnhꢀthamꢀkhꢆoꢀ7ꢀtꢇngꢀOSIꢀ  
Môꢀhìnhꢀkꢖtꢀnꢑiꢀhꢗꢀthꢑngꢀ mꢒꢀñưꢟcꢀTꢋꢀchꢉcꢀquꢑcꢀtꢖꢀvꢎꢀtiêuꢀchuꢩnꢀhoáꢀISOꢀ  
(InternationalꢀOrganizaitonꢀforꢀStandardization)ꢀñưaꢀraꢀnhꢪmꢀcungꢀcꢜpꢀmꢐtꢀmôꢀhìnhꢀ  
chuꢩnꢀchoꢀcácꢀnhàꢀsꢆnꢀxuꢜtꢀvàꢀcungꢀcꢜpꢀꢀsꢆnꢀphꢩmꢀviꢫnꢀthôngꢀápꢀdꢓngꢀtheoꢀñꢝꢀphátꢀ  
triꢝnꢀcácꢀsꢆnꢀphꢩmꢀviꢫnꢀthông.ꢀÝꢀtưꢒngꢀmôꢀhìnhꢀhoáꢀñưꢟcꢀtꢏoꢀraꢀcònꢀnhꢪmꢀhꢞꢀtrꢟꢀchoꢀ  
viꢗcꢀkꢖtꢀnꢑiꢀgiꢊaꢀcácꢀhꢗꢀthꢑngꢀvàꢀmodunꢀhoáꢀcácꢀthànhꢀphꢇnꢀphꢓcꢀvꢓꢀmꢏngꢀviꢖnꢀthông.ꢀ  
a.ꢀChꢈcꢀnăngꢀcꢉaꢀmôꢀhìnhꢀOSI:ꢀ  
ꢢꢀCungꢀcꢜpꢀkiꢖnꢀthꢉcꢀvꢎꢀhoꢏtꢀñꢐngꢀcꢘaꢀkꢖtꢀnꢑiꢀliênꢀmꢏngꢀ  
ꢢꢀðưaꢀraꢀtrìnhꢀtꢠꢀcôngꢀviꢗcꢀñꢝꢀthiꢖtꢀlꢛpꢀvàꢀthꢠcꢀhiꢗnꢀmꢐtꢀgiaoꢀthꢉcꢀchoꢀkꢖtꢀnꢑiꢀcácꢀthiꢖtꢀ  
bꢌꢀtrênꢀmꢏng.ꢀ  
MôꢀhìnhꢀOSIꢀcònꢀcóꢀmꢐtꢀsꢑꢀthuꢛnꢀlꢟiꢀsauꢀ:ꢀ  
ꢢ
ꢢ
ꢢ
Chiaꢀnhꢬꢀcácꢀhoꢏtꢀñꢐngꢀphꢉcꢀtꢏpꢀcꢘaꢀmꢏngꢀthànhꢀcácꢀphꢇnꢀcôngꢀviꢗcꢀñơnꢀgiꢆn.ꢀ  
Choꢀphépꢀcácꢀnhàꢀthiꢖtꢀkꢖꢀcóꢀkhꢆꢀnăngꢀphátꢀtriꢝnꢀtrênꢀtꢡngꢀmodunꢀchꢉcꢀnăng.ꢀ  
Cungꢀcꢜpꢀcácꢀkhꢆꢀnăngꢀñꢌnhꢀnghĩaꢀcácꢀchuꢩnꢀgiaoꢀtiꢖpꢀcóꢀtínhꢀtươngꢀthíchꢀcaoꢀ  
“plugꢀandꢀplay”ꢀvàꢀtíchꢀhꢟpꢀnhiꢎuꢀnhàꢀcungꢀcꢜpꢀsꢆnꢀphꢩm.ꢀ  
b.ꢀCꢊuꢀtrúcꢀmôꢀhìnhꢀOSI:ꢀ  
MôꢀhìnhꢀOSIꢀgꢚmꢀ7ꢀlꢕpꢀ(level),ꢀmꢞiꢀlꢕpꢀthꢠcꢀhiꢗnꢀcácꢀchꢉcꢀnăngꢀriêngꢀchoꢀhoꢏtꢀñꢐngꢀ  
kꢖtꢀnꢑiꢀmꢏng.ꢀ  
Hìnhꢀ1ꢋ1ꢀMôꢀtꢆꢀbꢩyꢀlꢕpꢀOSI.ꢀ4ꢀlꢕpꢀñꢇuꢀñꢌnhꢀnghĩaꢀcáchꢀthꢉcꢀchoꢀñꢇuꢀcuꢑiꢀthiꢖtꢀlꢛpꢀkꢖtꢀ  
nꢑiꢀvꢕiꢀnhauꢀñꢝꢀtraoꢀñꢋiꢀdꢊꢀliꢗu.ꢀ3ꢀlꢕpꢀtrênꢀdùngꢀñꢝꢀphátꢀtriꢝnꢀcácꢀꢉngꢀdꢓngꢀñꢝꢀñꢇuꢀ  
cuꢑiꢀkꢖtꢀnꢑiꢀvꢕiꢀnhauꢀvàꢀngưꢧiꢀdùng.ꢀ  
ꢀ
Aplicationꢀ  
Presentationꢀ  
Sessionꢀ  
ꢀ
Applicationꢀ  
ꢀ
(UpperꢀLayer)ꢀ  
ꢀ
ꢀ
ꢀ
ꢀ
ꢀ
TransportꢀLayerꢀ  
NetworkꢀLayerꢀ  
DataꢀLinkꢀ  
ꢀ
DataꢀLowerꢀLayerꢀ  
Physicalꢀ  
Cácꢀlꢌpꢀtrênꢀ  
3ꢀlꢕpꢀtrênꢀcùngꢀcꢘaꢀmôꢀhìnhꢀOSIꢀthưꢧngꢀñưꢟcꢀgꢈiꢀlàꢀcácꢀlꢕpꢀꢉngꢀdꢓngꢀ(Applicationꢀ  
layers)ꢀhayꢀ cònꢀgꢈiꢀlàꢀcácꢀlꢕpꢀcao.ꢀCácꢀlꢕpꢀnàyꢀthưꢧngꢀliênꢀquanꢀtꢕiꢀgiaoꢀtiꢖpꢀvꢕiꢀ  
ngưꢧiꢀdùng,ꢀñꢌnhꢀdꢏngꢀcꢘaꢀdꢊꢀliꢗuꢀvàꢀphươngꢀthꢉcꢀtruyꢀnhꢛpꢀcácꢀꢉngꢀdꢓngꢀñó.ꢀ  
Hìnhꢀ1ꢋ2ꢀMôꢀtꢆꢀcácꢀlꢕpꢀtrênꢀvàꢀcungꢀcꢜpꢀthôngꢀtinꢀvꢕiꢀcácꢀchꢉcꢀnăngꢀcꢘaꢀnóꢀquaꢀꢀvíꢀ  
dꢓ:ꢀ  
ꢀ
ꢢꢀ Lꢕpꢀ ꢉngꢀ dꢓng:ꢀ chꢉcꢀ năngꢀ giaoꢀ Telnet,ꢀHTTPꢀ  
ꢀ
3ꢀ  
tiꢖpꢀ giꢊaꢀ ngưꢧiꢀ sꢙꢀ dꢓngꢀ vàꢀ cácꢀ  
chươngꢀtrìnhꢀꢉngꢀdꢓngꢀ  
Applicationꢀ  
ꢀ
ꢀ
ꢢꢀ Lꢕpꢀ trìnhꢀ bày:ꢀ cáchꢀ thꢉcꢀ chuꢩnꢀ ASSCIIꢀ  
hoáꢀdꢊꢀliꢗuꢀvàꢀtrìnhꢀbàyꢀsꢑꢀliꢗuꢀ  
EBCDICꢀ  
Presentationꢀ  
ꢢꢀCóꢀchꢉcꢀnăngꢀñꢦcꢀbiꢗtꢀlàꢀꢀmãꢀhoáꢀ  
JPECꢀ  
dꢊꢀliꢗuꢀngưꢧiꢀsꢙꢀdungꢀ  
ꢀ
ꢢꢀ Lꢕpꢀ phiên:ꢀ thiꢖtꢀ lꢛp,ꢀ duyꢀ trìꢀ vàꢀ NFS,ꢀSQLꢀ  
huꢭꢀbꢬꢀmꢐtꢀphiênꢀlàmꢀviꢗcꢀ  
Sessionꢀ  
TransportꢀLayerꢀ  
NetworkꢀLayerꢀ  
DataꢀLinkꢀ  
Physicalꢀ  
ꢀ
ꢀ
ꢀ
ꢀ
ꢀ
ꢀ
ꢀ
ꢀ
ꢢ
Applicationꢀlayerꢀ:ꢀñâyꢀlàꢀlꢕpꢀcaoꢀnhꢜtꢀtrongꢀmôꢀhình.ꢀNóꢀlàꢀnơiꢀmàꢀngưꢧiꢀsꢙꢀ  
dꢓngꢀhoꢦcꢀkꢖtꢀnꢑiꢀcácꢀchươngꢀtrìnhꢀꢉngꢀdꢓngꢀvꢕiꢀcácꢀthꢘꢀtꢓcꢀchoꢀphépꢀtruyꢀnhꢛpꢀvàoꢀ  
mꢏng.ꢀꢀꢀ  
ꢢ
Presentationꢀlayerꢀ:ꢀLꢕpꢀpresentationꢀcungꢀcꢜpꢀcácꢀmãꢀvàꢀchꢉcꢀnăngꢀñꢝꢀchuyꢝnꢀ  
ñꢋiꢀꢀmàꢀñưꢟcꢀcungꢀcꢜpꢀbꢒiꢀlꢕpꢀꢉngꢀdꢓng.ꢀCácꢀchꢉcꢀnăngꢀñóꢀñꢆmꢀbꢆoꢀrꢪngꢀdꢊꢀliꢗuꢀtꢡꢀ  
lꢕpꢀꢉngꢀdꢓngꢀtrongꢀmꢐtꢀhꢗꢀthꢑngꢀcóꢀthꢝꢀñưꢟcꢀñꢈcꢀbꢒiꢀlꢕpꢀꢉngꢀdꢓngꢀcꢘaꢀꢀmꢐtꢀhꢗꢀthꢑngꢀ  
khác.ꢀVDꢀ:ꢀdùngꢀñꢝꢀmãꢀhoáꢀdꢊꢀliꢗuꢀtꢡꢀlꢕpꢀꢉngꢀdꢓngꢀ:ꢀnhưꢀmãꢀhoáꢀꢆnhꢀjpegꢀ,ꢀgif.ꢀMãꢀñóꢀ  
choꢀphépꢀtaꢀcóꢀthꢝꢀhiꢗnꢀlênꢀtrangꢀwebꢀ.ꢀꢀ  
ꢢ
Sessionꢀlayerꢀ:ꢀꢀñưꢟcꢀsꢙꢀdꢓngꢀñꢝꢀthiꢖtꢀlꢛp,ꢀduyꢀtrìꢀvàꢀkꢖtꢀthúcꢀphiênꢀlàmꢀviꢗcꢀ  
giꢊaꢀcácꢀlꢕpꢀpresentation.ꢀViꢗcꢀtraoꢀñꢋiꢀthôngꢀtinꢀꢒꢀlꢕpꢀnàyꢀbaoꢀgꢚmꢀyêuꢀcꢇuꢀdꢌchꢀvꢓꢀ  
vàꢀñápꢀꢉngꢀyêuꢀcꢇuꢀcꢘaꢀcácꢀꢉngꢀdꢓngꢀtrênꢀthiꢖtꢀbꢌꢀkhác.ꢀ  
Cácꢀlꢌpꢀdưꢌi.ꢀ  
4ꢀlꢕpꢀdưꢕiꢀcꢘaꢀmôꢀhìnhꢀOSIꢀsꢙꢀdꢓngꢀñꢝꢀñꢌnhꢀnghĩaꢀlàmꢀthꢖꢀnàoꢀñꢝꢀdꢊꢀliꢗuꢀñưꢟcꢀ  
truyꢎnꢀñiꢀtrongꢀcácꢀdâyꢀnꢑiꢀvꢛtꢀlý,ꢀcácꢀthiꢖtꢀbꢌꢀmꢏngꢀvàꢀñiꢀñꢖnꢀtrꢏmꢀñꢇuꢀcuꢑiꢀcuꢑiꢀcùngꢀ  
làꢀñꢖnꢀcácꢀlꢕpꢀꢉngꢀdꢓng.ꢀQuꢜnꢀsáchꢀnàyꢀtaꢀchꢍꢀquanꢀtâmꢀñꢖnꢀ4ꢀlꢕpꢀcuꢑi.ꢀVàꢀsꢮꢀxemꢀxétꢀ  
tꢡngꢀlꢕpꢀmꢐtꢀcáchꢀchiꢀtiꢖtꢀgiaoꢀthiꢖpꢀgiꢊaꢀcácꢀlꢕpꢀtrongꢀmôꢀhìnhꢀOSI:ꢀ  
Sꢙꢀdꢓngꢀphươngꢀphápꢀprotocalꢀstackꢀñꢝꢀkꢖtꢀnꢑiꢀgiꢊaꢀhaiꢀthiꢖtꢀbꢌꢀtrongꢀmꢏng.ꢀProtocalꢀ  
stackꢀlàꢀmꢐtꢀtꢛpꢀhꢟpꢀcácꢀquyꢀñꢌnhꢀdùngꢀñꢝꢀñꢌnhꢀnghĩaꢀlàmꢀthꢖꢀnàoꢀñꢝꢀdꢊꢀliꢗuꢀtruyꢎnꢀ  
quaꢀmꢏng.ꢀꢀ  
Víꢀdꢓꢀvꢕiꢀ:ꢀTCP/IPꢀmꢞiꢀLayerꢀchoꢀphépꢀdꢊꢀliꢗuꢀtruyꢎnꢀqua.ꢀCácꢀlꢕpꢀñóꢀtraoꢀñꢋiꢀcácꢀ  
thôngꢀtinꢀñꢝꢀcungꢀcꢜpꢀcuꢐcꢀliênꢀlꢏcꢀgiꢊaꢀhaiꢀthiꢖtꢀbꢌꢀtrongꢀmꢏng.ꢀCácꢀlꢕpꢀgiaoꢀtiꢖpꢀvꢕiꢀ  
nhauꢀsꢙꢀdꢓngꢀProtocalꢀDataꢀUnitꢀ(PDU).ꢀThôngꢀtinꢀñiꢝuꢀkhiꢝnꢀcꢘaꢀPDUꢀñưꢟcꢀthêmꢀ  
ꢀ
4ꢀ  
vàoꢀvꢕiꢀdꢊꢀliꢗuꢀꢒꢀlꢕpꢀtrên.ꢀVàꢀthôngꢀtinꢀñiꢎuꢀkhiꢝnꢀnàyꢀnꢪmꢀtrongꢀtrưꢧngꢀgꢈiꢀlàꢀtrưꢧngꢀ  
headerꢀvàꢀtrailer.ꢀ  
Hìnhꢀ1ꢢ3ꢀꢀDataꢀꢀencapsulationꢀ  
ꢀ
ꢀ
ꢀ
Applicationꢀ  
ꢀ
ꢀ
ꢀ
ꢀ
Presentationꢀ  
ꢀ
ꢀ
UpperꢀLayerꢀDataꢀ  
ꢀ
Sessionꢀ  
ꢀ
TCPꢀHeaderꢀ  
UpperꢀLayerꢀDataꢀ  
ꢀ
Transportꢀ  
Segmentꢀ  
ꢀ
ꢀ
ꢀ
ꢀ
ꢀ
IPꢀHeaderꢀ  
Dataꢀ  
ꢀ
Networkꢀ  
Packetꢀ  
ꢀ
ꢀ
ꢀ
ꢀ
ꢀ
LLCꢀHeaderꢀ  
Dataꢀ  
ꢀ
FCSꢀ  
DataꢀLinkꢀ  
Frameꢀ  
ꢀ
ꢀ
ꢀ
ꢀ
MACꢀHeaderꢀ  
Dataꢀ  
FCSꢀ  
ꢀ
Physicalꢀ  
ꢀ
Bitsꢀ  
ꢀ
0101110101001000010ꢀ  
1.2.ꢀHꢍꢀgiaoꢀthꢈcꢀTCP/IPꢀ  
CácꢀtꢇngꢀcꢘaꢀgiaoꢀthꢉcꢀTCP/IPꢀsoꢀvꢕiꢀcꢜcꢀtꢇngꢀcꢘaꢀmôꢀhìnhꢀOSIꢀ  
ꢀ
Application:ꢀXácꢀnhꢛnꢀquyꢎn,ꢀnénꢀdꢊꢀliꢗuꢀvàꢀcácꢀdꢌchꢀvꢓꢀchoꢀngưꢧiꢀdùngꢀ  
Transport:ꢀXꢙꢀlýꢀdꢊꢀliꢗuꢀgiꢊaꢀcácꢀhꢗꢀthꢑngꢀvaꢀcungꢀcꢜpꢀviꢗcꢀtruyꢀcꢛpꢀmꢏngꢀchoꢀcácꢀ  
ꢉngꢀdꢓngꢀ  
Network:ꢀTìmꢀñưꢧngꢀchoꢀcácꢀpacketꢀ  
ꢀ
5ꢀ  
Link:ꢀMꢉcꢀOSꢀhoꢦcꢀcácꢀthiꢖtꢀbꢌꢀgiaoꢀtiꢖpꢀmꢏngꢀtrênꢀmꢐtꢀmáyꢀtínhꢀ  
MꢎtꢀsꢏꢀñiꢐmꢀkhácꢀnhauꢀcꢉaꢀTCP/IPꢀvàꢀmôꢀhìnhꢀOSIꢀ  
+ꢀLꢕpꢀꢉngꢀdꢓngꢀtrongꢀTCP/IPꢀxꢙꢀlýꢀchꢉcꢀnăngꢀcꢘaꢀlꢕpꢀ5,6,7ꢀtrongꢀmôꢀhìnhꢀOSIꢀ  
+ꢀLꢕpꢀtransportꢀtrongꢀTCP/IPꢀcungꢀcꢜpꢀcꢕꢀchꢖꢀUDPꢀtruyꢎnꢀkhôngꢀtinꢀcꢛy,ꢀtransportꢀ  
trongꢀOSIꢀluônꢀñꢆmꢀbꢆoꢀtruyꢎnꢀtinꢀcꢛyꢀ  
+ꢀTCP/IPꢀlàꢀmꢐtꢀtꢛpꢀcꢘaꢀcácꢀprotocolsꢀ(mꢐtꢀbꢐꢀgiaoꢀthꢉc)ꢀ  
+ꢀTCP/IPꢀxâyꢀdꢠngꢀtrưꢕcꢀOSIꢀ  
QuyꢀtrìnhꢀñóngꢀgóiꢀdꢑꢀliꢒuꢀtrongꢀmôꢀhìnhꢀTCP/IPꢀnhưꢀsau:ꢀ  
ꢀ
1.3.ꢀSoꢀsánhꢀgiꢑaꢀhaiꢀgiaoꢀthꢈcꢀTCPꢀvàꢀUDPꢀ  
ꢀ
6ꢀ  
ꢀ
1.4.ꢀCꢓngꢀgiaoꢀthꢈcꢀ  
Làꢀmꢐtꢀsꢑꢀnămꢀtrongꢀkhoꢆngꢀ1..65535ꢀdùngꢀñꢝꢀphânꢀbiꢗtꢀgiꢊaꢀ2ꢀꢉngꢀdꢓngꢀmꢏngꢀ  
vꢕiꢀnhauꢀgꢯnꢀvꢕiꢀñꢌaꢀchꢍꢀIPꢀvàꢀSocketꢀ  
Mꢐtꢀsꢑꢀcꢋngꢀvàꢀcácꢀgiaoꢀthꢉcꢀthôngꢀdꢓng:ꢀ  
+ꢀFTP:ꢀ21ꢀ  
+ꢀTelnet:ꢀ23ꢀ  
+ꢀSMTP:ꢀ25ꢀ  
+ꢀPOP3:ꢀ110ꢀ  
+ꢀHTTP:80ꢀ  
1.5.ꢀðꢔaꢀchꢕꢀIP,ꢀcácꢀñꢔaꢀchꢕꢀIPꢀdànhꢀriêngꢀ  
0 1 2 3 4  
8
16 24  
Hostid  
Class A  
0
Netid  
Class B 1 0  
Netid  
Netid  
Hostid  
Hostid  
Class C 1 1 0  
Class D 1 1 1 0  
Class E 1 1 1 1 0  
Multicast address  
Reverved for future use  
ꢀ
ꢀ
7ꢀ  
ꢀ
ꢀ
1.6.ꢀðꢔaꢀchꢕꢀtênꢀmiꢖn:ꢀloꢗiꢀA,ꢀloꢗiꢀMX..ꢀ  
ꢀ
1.7.ꢀMꢎtꢀsꢏꢀgiaoꢀthꢈcꢀꢘꢀtꢇngꢀꢈngꢀdꢙng:ꢀHTTP,ꢀSMTP,ꢀPOP3,ꢀFTP...ꢀ  
ꢀ
ꢢꢀChúngꢀtaꢀsꢮꢀnghiênꢀcꢉuꢀchiꢀtiꢖtꢀcácꢀgiaoꢀthꢉcꢀnàyꢀꢒꢀchươngꢀ3ꢀ  
ꢀ
8ꢀ  
ꢀ
CHƯƠNGꢀ2:ꢀLꢚPꢀTRÌNHꢀMꢅNGꢀTRONGꢀ.NETꢀFRAMEWORKꢀ  
2.1.ꢀSocketꢀhưꢌngꢀkꢛtꢀnꢏiꢀ(TCPꢀSocket)ꢀ  
Socketꢀlàꢀmꢐtꢀgiaoꢀdiꢗnꢀlꢛpꢀtrìnhꢀꢉngꢀdꢓngꢀ(API)ꢀmꢏngꢀ  
Thôngꢀquaꢀgiaoꢀdiꢗnꢀnàyꢀchúngꢀtaꢀcóꢀthꢝꢀlꢛpꢀtrìnhꢀñiꢎuꢀkhiꢝnꢀviꢗcꢀtruyꢎnꢀthôngꢀgiꢊaꢀ  
haiꢀmáyꢀsꢙꢀdꢓngꢀcácꢀgiaoꢀthꢉcꢀmꢉcꢀthꢜpꢀlàꢀTCP,ꢀUDP…ꢀ  
Socketꢀlàꢀsꢠꢀtrꢡuꢀtưꢟngꢀhoáꢀꢒꢀmꢉcꢀcao,ꢀcóꢀthꢝꢀtưꢒngꢀtưꢟngꢀnóꢀnhưꢀlàꢀthiꢖtꢀbꢌꢀtruyꢎnꢀ  
thôngꢀhaiꢀchiꢎuꢀgꢙiꢀ–ꢀnhꢛnꢀdꢊꢀliꢗuꢀgiꢊaꢀhaiꢀmáyꢀtínhꢀvꢕiꢀnhau.ꢀ  
ꢀ CácꢀloꢏiꢀSocketꢀ  
ꢁ Socketꢀhưꢕngꢀkꢖtꢀnꢑiꢀ(TCPꢀSocket)ꢀ  
ꢁ Socketꢀkhôngꢀhưꢕngꢀkꢖtꢀnꢑiꢀ(UDPꢀSocket)ꢀ  
ꢁ RawꢀSocketꢀ  
ꢀ ðꢦcꢀñiꢝmꢀcꢘaꢀSocketꢀhưꢕngꢀkꢖtꢀnꢑiꢀ  
ꢁ Cóꢀ1ꢀñưꢧngꢀkꢖtꢀnꢑiꢀꢆoꢀgiꢊaꢀ2ꢀtiꢖnꢀtrìnhꢀ  
ꢁ Mꢐtꢀtrongꢀ2ꢀtiꢖnꢀtrìnhꢀphꢆiꢀñꢟiꢀtiꢖnꢀtrìnhꢀkiaꢀyêuꢀcꢇuꢀkꢖtꢀnꢑi.ꢀ  
ꢁ CóꢀthꢝꢀsꢙꢀdꢓngꢀñꢝꢀliênꢀlꢏcꢀtheoꢀmôꢀhìnhꢀClient/Serverꢀ  
ꢁ TrongꢀmôꢀhìnhꢀClient/ServerꢀthìꢀServerꢀlꢯngꢀngheꢀvàꢀchꢜpꢀnhꢛnꢀmꢐtꢀyêuꢀ  
cꢇuꢀkꢖtꢀnꢑiꢀ  
ꢁ Mꢞiꢀthôngꢀñiꢗpꢀgꢙiꢀñꢎuꢀcóꢀxácꢀnhꢛnꢀtrꢒꢀvꢎꢀ  
ꢁ Cácꢀgóiꢀtinꢀchuyꢝnꢀñiꢀtuꢇnꢀtꢠꢀ  
ꢀ ðꢜcꢀñiꢐmꢀcꢉaꢀSocketꢀkhôngꢀhưꢌngꢀkꢛtꢀnꢏiꢀ  
ꢁ Haiꢀtiꢛnꢀtrìnhꢀliênꢀlꢗcꢀvꢌiꢀnhauꢀkhôngꢀkꢛtꢀnꢏiꢀtrꢝcꢀtiꢛpꢀ  
ꢁ Thôngꢀñiꢒpꢀgꢞiꢀñiꢀphꢆiꢀkèmꢀtheoꢀñꢔaꢀchꢕꢀcꢉaꢀngưꢟiꢀnhꢠnꢀ  
ꢁ Thôngꢀñiꢒpꢀcóꢀthꢐꢀgꢞiꢀnhiꢖuꢀlꢇnꢀ  
ꢁ Ngưꢟiꢀgꢞiꢀkhôngꢀchꢡcꢀchꢡnꢀthôngꢀñiꢒpꢀtꢌiꢀtayꢀngưꢟiꢀnhꢠnꢀ  
ꢁ Thôngꢀñiꢒpꢀgꢞiꢀsauꢀcóꢀthꢐꢀñꢛnꢀñíchꢀtrưꢌcꢀthôngꢀñiꢒpꢀgꢞiꢀtrưꢌcꢀñó.ꢀ  
ꢀ SꢑꢀhiꢗuꢀcꢋngꢀcꢘaꢀSocketꢀ  
ꢀ
9ꢀ  
ꢁ ðꢝꢀcóꢀthꢝꢀthꢠcꢀhiꢗnꢀcácꢀcuꢐcꢀgiaoꢀtiꢖp,ꢀmꢐtꢀtrongꢀhaiꢀquáꢀtrìnhꢀphꢆiꢀcôngꢀ  
bꢑꢀsꢑꢀhiꢗuꢀcꢋngꢀcꢘaꢀsocketꢀmàꢀmìnhꢀsꢙꢀdꢓng.ꢀ  
ꢁ Mꢞiꢀcꢋngꢀgiaoꢀtiꢖpꢀthꢝꢀhiꢗnꢀmꢐtꢀñꢌaꢀchꢍꢀxácꢀñꢌnhꢀtrongꢀhꢗꢀthꢑng.ꢀKhiꢀquáꢀ  
trìnhꢀñưꢟcꢀgánꢀmꢐtꢀsꢑꢀhiꢗuꢀcꢋng,ꢀnóꢀcóꢀthꢝꢀnhꢛnꢀdꢊꢀliꢗuꢀgꢒiꢀñꢖnꢀcꢋngꢀ  
nàyꢀtꢡꢀcácꢀquáꢀtrìnhꢀkhác.ꢀꢀ  
ꢁ Quáꢀtrìnhꢀcònꢀlꢏiꢀcũngꢀyêuꢀcꢇuꢀtꢏoꢀraꢀmꢐtꢀsocket.ꢀꢀ  
ꢀ
2.1.1.ꢀGiꢁiꢀthiꢂuꢀvꢃꢀNameSpaceꢀSystem.NetꢀvàꢀSystem.Net.Socketsꢀ  
ꢀ Cungꢀcꢜpꢀmꢐtꢀgiaoꢀdiꢗnꢀlꢛpꢀtrìnhꢀñơnꢀgiꢆnꢀchoꢀrꢜtꢀnhiꢎuꢀcácꢀgiaoꢀthꢉcꢀmꢏng.ꢀ  
ꢀ Cóꢀrꢜtꢀnhiꢎuꢀlꢕpꢀñꢝꢀlꢛpꢀtrìnhꢀ  
ꢀ TaꢀquanꢀtâmꢀlꢕpꢀIPAdress,ꢀIPEndPoint,ꢀDNS,ꢀ…ꢀ  
ꢀ LꢕpꢀIPAdressꢀ  
ꢀ MꢐtꢀsꢑꢀFieldꢀcꢇnꢀchúꢀý:ꢀ  
ꢀ Any:ꢀCungꢀcꢜpꢀmꢐtꢀñꢌaꢀchꢍꢀIPꢀñꢝꢀchꢍꢀraꢀrꢪngꢀServerꢀphꢆiꢀlꢯngꢀngheꢀtrênꢀ  
tꢜtꢀcꢆꢀcácꢀCardꢀmꢏngꢀ  
ꢀ Broadcast:ꢀCungꢀcꢜpꢀmꢐtꢀñꢌaꢀchꢍꢀIPꢀquꢆngꢀbáꢀ  
ꢀ Loopback:ꢀTrꢆꢀvꢎꢀmꢐtꢀñꢌaꢀchꢍꢀIPꢀlꢦpꢀ  
ꢀ AdressFamily:ꢀTrꢆꢀvꢎꢀhꢈꢀñꢌaꢀchꢍꢀcꢘaꢀIPꢀhiꢗnꢀhànhꢀ  
ꢀ LꢕpꢀIPAddressꢀ  
ꢀ Mꢐtꢀsꢑꢀphươngꢀthꢉcꢀcꢇnꢀchúꢀý:ꢀ  
ꢀ Phươngꢀthꢉcꢀkhꢒiꢀtꢏoꢀ  
ꢀ IPAddress(Byte[])ꢀꢀ  
ꢀ IPAddress(Int64)ꢀꢀ  
ꢀ IsLoopback:ꢀChoꢀbiꢖtꢀñꢌaꢀchꢍꢀcóꢀphꢆiꢀñꢌaꢀchꢍꢀlꢦpꢀkhôngꢀ  
ꢀ Parse:ꢀChuyꢝnꢀIPꢀdꢏngꢀxâuꢀvꢎꢀIPꢀchuꢩnꢀ  
ꢀ ToString:ꢀTrꢆꢀñꢌaꢀchꢍꢀIPꢀvꢎꢀdꢏngꢀxâuꢀ  
ꢀ TryParse:ꢀKiꢝmꢀtraꢀIPꢀꢒꢀdꢏngꢀxâuꢀcóꢀhꢟpꢀlꢗꢀkhông?ꢀ  
ꢀ LꢕpꢀIPEndPointꢀ  
ꢀ Mꢐtꢀsꢑꢀphươngꢀthꢉcꢀcꢇnꢀchúꢀý:ꢀ  
ꢀ Phươngꢀthꢉcꢀkhꢒiꢀtꢏoꢀ  
ꢀ IPEndPointꢀ(Int64,ꢀInt32)ꢀ  
ꢀ IPEndPointꢀ(IPAddress,ꢀInt32)ꢀꢀ  
ꢀ Create:ꢀTꢏoꢀmꢐtꢀEndPointꢀtꢡꢀmꢐtꢀñꢌaꢀchꢍꢀSocketꢀ  
ꢀ ToStringꢀ:ꢀTrꢆꢀvꢎꢀñꢌaꢀchꢍꢀIPꢀvàꢀsꢑꢀhiꢗuꢀcꢋngꢀtheoꢀkhuônꢀdꢏngꢀðꢌaChꢍ:ꢀ  
Cꢋng,ꢀvíꢀdꢓ:ꢀ192.168.1.1:8080ꢀ  
ꢀ LꢕpꢀDNSꢀ  
ꢀ Mꢐtꢀsꢑꢀthànhꢀphꢇnꢀcꢘaꢀlꢕp:ꢀ  
ꢀ HostName:ꢀChoꢀbiꢖtꢀtênꢀcꢘaꢀmáyꢀñưꢟcꢀphânꢀgiꢆiꢀ  
ꢀ GetHostAddress:ꢀTrꢆꢀvꢎꢀtꢜtꢀcꢆꢀIPꢀcꢘaꢀmꢐtꢀtrꢏmꢀ  
ꢀ GetHostEntry:ꢀGiꢆiꢀñápꢀtênꢀhoꢦcꢀñꢌaꢀchꢍꢀtruyꢎnꢀvàoꢀvàꢀtrꢆꢀvꢎꢀñꢑiꢀtưꢟngꢀ  
IPHostEntryꢀ  
ꢀ
10ꢀ  
ꢀ GetHostName:ꢀLꢜyꢀvꢎꢀtênꢀcꢘaꢀmáyꢀtínhꢀcꢓcꢀbꢐꢀ  
ꢀ NameSpaceꢀSystem.Net.Socketsꢀ  
ꢀ Mꢐtꢀsꢑꢀlꢕpꢀhayꢀdùng:ꢀTcpClient,ꢀUdpClient,ꢀTcpListener,ꢀSocket,ꢀ  
NetworkStream,ꢀ…ꢀ  
ꢀ ðꢝꢀtꢏoꢀraꢀSocketꢀ  
ꢀ Socket(AddressFamilyꢀaf,ꢀSocketTypeꢀst,ꢀProtocolTypeꢀpt)ꢀꢀ  
SocketTypeꢀ Protocoltypeꢀ  
Descriptionꢀ  
Dgramꢀ  
Streamꢀ  
Udpꢀ  
Tcpꢀ  
Connectionlessꢀcommunicationꢀ  
Connectionꢢorientedꢀ  
communicationꢀ  
Rawꢀ  
Rawꢀ  
Icmpꢀ  
Rawꢀ  
InternetꢀControlꢀMessageꢀ  
Protocolꢀ  
PlainꢀIPꢀpacketꢀcommunicationꢀ  
ꢀ
usingꢀSystem.Net;ꢀ  
usingꢀSystem.Net.Sockets;ꢀ  
ꢀꢀꢀꢀclassꢀSockPropꢀꢀꢀꢀ{ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀpublicꢀstaticꢀvoidꢀMain()ꢀꢀꢀꢀꢀꢀꢀꢀ{ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀIPAddressꢀiaꢀ=ꢀIPAddress.Parse("127.0.0.1");ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀIPEndPointꢀieꢀ=ꢀnewꢀIPEndPoint(ia,ꢀ8000);ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀSocketꢀtestꢀ=ꢀnewꢀSocket(AddressFamily.InterNetwork,ꢀSocketType.Stream,ꢀ  
ProtocolType.Tcp);ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀConsole.WriteLine("AddressFamily:ꢀ{0}",ꢀtest.AddressFamily);ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀConsole.WriteLine("SocketType:ꢀ{0}",ꢀtest.SocketType);ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀConsole.WriteLine("ProtocolType:ꢀ{0}",ꢀꢀtest.ProtocolType);ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀConsole.WriteLine("Blocking:ꢀ{0}",ꢀtest.Blocking);ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀtest.Blockingꢀ=ꢀfalse;ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀConsole.WriteLine("newꢀBlocking:ꢀ{0}",ꢀtest.Blocking);ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀConsole.WriteLine("Connected:ꢀ{0}",ꢀtest.Connected);ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀtest.Bind(ie);ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀIPEndPointꢀiepꢀ=ꢀ(IPEndPoint)test.LocalEndPoint;ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀConsole.WriteLine("LocalꢀEndPoint:ꢀ{0}",ꢀiep.ToString());ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀtest.Close();ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀConsole.ReadKey();ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀ}ꢀ  
ꢀꢀꢀꢀ}ꢀ  
ꢀ
2.1.2.ꢀViꢄtꢀchươngꢀtrìnhꢀchoꢀphíaꢀmáyꢀchꢅꢀ  
ꢀ Viꢖtꢀchươngꢀtrìnhꢀchoꢀphíaꢀmáyꢀchꢘꢀ  
ꢁ TꢏoꢀmꢐtꢀSocketꢀ  
ꢁ LiênꢀkꢖtꢀvꢕiꢀmꢐtꢀIPEndPointꢀcꢓcꢀbꢐꢀ  
ꢁ Lꢯngꢀngheꢀkꢖtꢀnꢑiꢀ  
ꢁ Chꢜpꢀnhꢛnꢀkꢖtꢀnꢑiꢀ  
ꢁ Gꢙiꢀnhꢛnꢀdꢊꢀliꢗuꢀtheoꢀgiaoꢀthꢉcꢀñãꢀthiꢖtꢀkꢖꢀ  
ꢀ
11ꢀ  
ꢁ ðóngꢀkꢖtꢀnꢑiꢀsauꢀkhiꢀñãꢀhoànꢀthànhꢀvàꢀtrꢒꢀlꢏiꢀtrꢏngꢀtháiꢀlꢯngꢀngheꢀchꢧꢀ  
kꢖtꢀnꢑiꢀmꢕiꢀ  
ꢀ Viꢖtꢀchươngꢀtrìnhꢀchoꢀphíaꢀmáyꢀchꢘꢀ  
ꢀ
ꢀ
ꢀ
ꢀ
ꢀ
ꢀ
ꢀ
ꢀ
ꢀ
IPEndPointꢀipepꢀ=ꢀnewꢀIPEndPoint(IPAddress.Any,ꢀ9050);ꢀꢀ  
Socketꢀnewsockꢀ=ꢀSocket(AddressFamily.InterNetwork,ꢀꢀ  
SocketType.Stream,ꢀProtocolType.Tcp);ꢀꢀ  
ꢀ
ꢀ
ꢀ
newsock.Bind(ipep);ꢀꢀ  
newsock.Listen(10);ꢀꢀ  
Socketꢀclientꢀ=ꢀnewsock.Accept();ꢀꢀ  
//Gꢙiꢀnhꢛnꢀdꢊꢀliꢗuꢀtheoꢀgiaoꢀthꢉcꢀñãꢀthiꢖtꢀkꢖꢀ  
……….ꢀ  
newsock.Close();ꢀ  
ChươngꢀtrìnhꢀServer:ꢀ  
usingꢀSystem;ꢀ  
usingꢀSystem.Collections.Generic;ꢀ  
usingꢀSystem.Text;ꢀ  
usingꢀSystem.Net;ꢀ  
usingꢀSystem.Net.Sockets;ꢀ  
classꢀServer{ꢀ  
ꢀꢀꢀꢀstaticꢀvoidꢀMain(string[]ꢀargs)ꢀ{ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀIPEndPointꢀiepꢀ=ꢀnewꢀIPEndPoint(IPAddress.Parse("127.0.0.1"),ꢀ2008);ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀSocketꢀserverꢀ=ꢀnewꢀSocket(AddressFamily.InterNetwork,ꢀSocketType.Stream,ꢀ  
ProtocolType.Tcp);ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀserver.Bind(iep);ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀserver.Listen(10);ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀConsole.WriteLine("Choꢀketꢀnoiꢀtuꢀclient");ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀSocketꢀclientꢀ=ꢀserver.Accept();ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀConsole.WriteLine("Chapꢀnhanꢀketꢀnoiꢀtu:{0}",ꢀ  
client.RemoteEndPoint.ToString());ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀstringꢀsꢀ=ꢀ"ChaoꢀbanꢀdenꢀvoiꢀServer";ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀ//Chuyenꢀchuoiꢀsꢀthanhꢀmangꢀbyteꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀbyte[]ꢀdataꢀ=ꢀnewꢀbyte[1024];ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀdataꢀ=ꢀEncoding.ASCII.GetBytes(s);ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀ//guiꢀnhanꢀduꢀlieuꢀtheoꢀgiaoꢀthucꢀdaꢀthietꢀkeꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀclient.Send(data,data.Length,SocketFlags.None);ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀwhileꢀ(true)ꢀ{ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀdataꢀ=ꢀnewꢀbyte[1024];ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀintꢀrecvꢀ=ꢀclient.Receive(data);ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀifꢀ(recvꢀ==ꢀ0)ꢀbreak;ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ//ChuyenꢀmangꢀbyteꢀDataꢀthanhꢀchuoiꢀvaꢀinꢀraꢀmanꢀhinhꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀsꢀ=ꢀEncoding.ASCII.GetString(data,ꢀ0,ꢀrecv);ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀConsole.WriteLine("Clienꢀguiꢀlen:{0}",ꢀs);ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ//NeuꢀchuoiꢀnhanꢀduocꢀlaꢀQuitꢀthiꢀthoatꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀifꢀ(s.ToUpper().Equals("QUIT"))ꢀbreak;ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ//Guiꢀtraꢀlaiꢀchoꢀclientꢀchuoiꢀsꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀsꢀ=ꢀs.ToUpper();ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀdataꢀ=ꢀnewꢀbyte[1024];ꢀ  
ꢀ
12ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀdataꢀ=ꢀEncoding.ASCII.GetBytes(s);ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀclient.Send(data,ꢀdata.Length,ꢀSocketFlags.None);ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀ}ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀclient.Shutdown(SocketShutdown.Both);ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀclient.Close();ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀserver.Close();ꢀ  
ꢀꢀꢀꢀ}ꢀ  
}ꢀ  
2.1.3.ꢀViꢄtꢀchươngꢀtrìnhꢀchoꢀphíaꢀmáyꢀkháchꢀ  
ꢀ Viꢖtꢀchươngꢀtrìnhꢀchoꢀphíaꢀmáyꢀkháchꢀ  
ꢁ XácꢀñꢌnhꢀñꢌaꢀchꢍꢀcꢘaꢀServerꢀ  
ꢁ TꢏoꢀSocketꢀ  
ꢁ KꢖtꢀnꢑiꢀñꢖnꢀServerꢀ  
ꢁ Gꢙiꢀnhꢛnꢀdꢊꢀliꢗuꢀtheoꢀgiaoꢀthꢉcꢀñãꢀthiꢖtꢀkꢖꢀ  
ꢁ ðóngꢀSocketꢀ  
ꢀ Viꢖtꢀchươngꢀtrìnhꢀchoꢀphíaꢀmáyꢀkháchꢀ  
IPEndPointꢀipepꢀ=ꢀnewꢀIPEndPoint(Ipaddress.Parse("192.168.1.6"),ꢀ9050);ꢀ  
Socketꢀserverꢀ=ꢀnewꢀSocket(AddressFamily.InterNetwork,SocketType.Stream,ꢀꢀ  
ꢀ
ꢀ
ProtocolType.Tcp);ꢀ  
server.Connect(ipep);ꢀ  
ChươngꢀtrìnhꢀClient:ꢀ  
usingꢀSystem;ꢀ  
usingꢀSystem.Collections.Generic;ꢀ  
usingꢀSystem.Text;ꢀ  
usingꢀSystem.Net;ꢀ  
usingꢀSystem.Net.Sockets;ꢀ  
ꢀ
classꢀClientꢀ{ꢀ  
ꢀꢀꢀꢀstaticꢀvoidꢀMain(string[]ꢀargs)ꢀ{ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀIPEndPointꢀiepꢀ=ꢀnewꢀIPEndPoint(IPAddress.Parse("127.0.0.1"),ꢀ2008);ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀSocketꢀclientꢀ=ꢀnewꢀSocket(AddressFamily.InterNetwork,ꢀSocketType.Stream,ꢀ  
ProtocolType.Tcp);ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀclient.Connect(iep);ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀbyte[]ꢀdataꢀ=ꢀnewꢀbyte[1024];ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀintꢀrecvꢀ=ꢀclient.Receive(data);ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀstringꢀsꢀ=ꢀEncoding.ASCII.GetString(data,ꢀ0,ꢀrecv);ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀConsole.WriteLine("Serverꢀgui:{0}",ꢀs);ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀstringꢀinput;ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀwhileꢀ(true)ꢀ{ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀinputꢀ=ꢀConsole.ReadLine();ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ//Chuyenꢀinputꢀthanhꢀmangꢀbyteꢀguiꢀlenꢀchoꢀserverꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀdataꢀ=ꢀnewꢀbyte[1024];ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀdataꢀ=ꢀEncoding.ASCII.GetBytes(input);ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀclient.Send(data,ꢀdata.Length,ꢀSocketFlags.None);ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀifꢀ(input.ToUpper().Equals("QUIT"))ꢀbreak;ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀdataꢀ=ꢀnewꢀbyte[1024];ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀrecvꢀ=ꢀclient.Receive(data);ꢀ  
ꢀ
13ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀsꢀ=ꢀEncoding.ASCII.GetString(data,ꢀ0,ꢀrecv);ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀConsole.WriteLine("Serverꢀgui:{0}",ꢀs);ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀ}ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀclient.Disconnect(true);ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀclient.Close();ꢀ  
ꢀꢀꢀꢀ}ꢀ  
}ꢀ  
2.1.4.ꢀSꢆꢀdꢇngꢀcácꢀluꢈngꢀnhꢉpꢀxuꢊtꢀvꢁiꢀSocketꢀ  
ꢀ
TꢡꢀSocketꢀtaꢀcóꢀthꢝꢀtꢏoꢀraꢀluꢚngꢀñꢝꢀnhꢛpꢀxuꢜtꢀvꢕiꢀSocketꢀñóꢀlàꢀsꢙꢀdꢓngꢀlꢕpꢀ  
NetworkStreamꢀ  
ꢀ
ꢀ
Propertyꢀ  
Descriptionꢀ  
CanReadꢀꢀ  
IsꢀtrueꢀifꢀtheꢀNetworkStreamꢀsupportsꢀreadingꢀ  
IsꢀalwaysꢀfalseꢀforꢀNetworkStreamsꢀꢀ  
IsꢀtrueꢀifꢀtheꢀNetworkStreamꢀsupportsꢀwritingꢀ  
Isꢀtrueꢀifꢀthereꢀisꢀdataꢀavailableꢀtoꢀbeꢀreadꢀ  
CanSeekꢀꢀ  
CanWriteꢀꢀ  
DataAvailableꢀꢀ  
VíꢀdꢙꢀchươngꢀtrìnhꢀClient/ServerꢀsꢞꢀdꢙngꢀNetworkStreamꢀñꢐꢀgꢞiꢀvàꢀnhꢠnꢀdꢑꢀliꢒuꢀ  
ChươngꢀtrìnhꢀClientꢀsꢞꢀdꢙngꢀNetworkStream:ꢀ  
usingꢀSystem;ꢀ  
usingꢀSystem.Collections.Generic;ꢀ  
usingꢀSystem.Linq;ꢀ  
usingꢀSystem.Text;ꢀ  
usingꢀSystem.Net;ꢀ  
usingꢀSystem.Net.Sockets;ꢀ  
ꢀ
14ꢀ  
classꢀProgramꢀ{ꢀ  
ꢀꢀꢀꢀstaticꢀvoidꢀMain(string[]ꢀargs)ꢀ{ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀIPEndPointꢀiepꢀ=ꢀnewꢀIPEndPoint(IPAddress.Parse("127.0.0.1"),ꢀ2009);ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀSocketꢀclientꢀ=ꢀnewꢀSocket(AddressFamily.InterNetwork,ꢀSocketType.Stream,ꢀ  
ProtocolType.Tcp);ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀclient.Connect(iep);ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀNetworkStreamꢀnsꢀ=ꢀnewꢀNetworkStream(client);ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀbyte[]ꢀdataꢀ=ꢀnewꢀbyte[1024];ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀwhileꢀ(true)ꢀ{ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀstringꢀinputꢀ=ꢀConsole.ReadLine();ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀdataꢀ=ꢀEncoding.ASCII.GetBytes(input);ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀns.Write(data,ꢀ0,ꢀdata.Length);ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀifꢀ(input.ToUpper().Equals("QUIT"))ꢀbreak;ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀdataꢀ=ꢀnewꢀbyte[1024];ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀintꢀrecꢀ=ꢀns.Read(data,ꢀ0,ꢀdata.Length);ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀstringꢀsꢀ=ꢀEncoding.ASCII.GetString(data,ꢀ0,ꢀrec);ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀConsole.WriteLine(s);ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀ}ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀclient.Close();ꢀ  
ꢀꢀꢀꢀ}ꢀ  
}ꢀ  
ChươngꢀtrìnhꢀServerꢀsꢙꢀdꢓngꢀNetworkStream:ꢀ  
usingꢀSystem;ꢀ  
usingꢀSystem.Collections.Generic;ꢀ  
usingꢀSystem.Linq;ꢀ  
usingꢀSystem.Text;ꢀ  
usingꢀSystem.Net;ꢀ  
usingꢀSystem.Net.Sockets;ꢀ  
classꢀProgramꢀ{ꢀ  
ꢀꢀꢀꢀstaticꢀvoidꢀMain(string[]ꢀargs)ꢀ{ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀIPEndPointꢀiep=newꢀIPEndPoint(IPAddress.Parse("127.0.0.1"),2009);ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀSocketꢀserverꢀ=ꢀnewꢀSocket(AddressFamily.InterNetwork,ꢀSocketType.Stream,ꢀ  
ProtocolType.Tcp);ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀserver.Bind(iep);ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀserver.Listen(10);ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀSocketꢀclientꢀ=ꢀserver.Accept();ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀbyte[]ꢀdata;ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀNetworkStreamꢀnsꢀ=ꢀnewꢀNetworkStream(client);ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀwhileꢀ(true)ꢀ{ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀdataꢀ=ꢀnewꢀbyte[1024];ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀintꢀrecꢀ=ꢀns.Read(data,ꢀ0,ꢀdata.Length);ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀstringꢀsꢀ=ꢀEncoding.ASCII.GetString(data,ꢀ0,ꢀrec);ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀConsole.WriteLine(s);ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀdataꢀ=ꢀnewꢀbyte[1024];ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀsꢀ=ꢀs.ToUpper();ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀifꢀ(s.Equals("QUIT"))ꢀbreak;ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀdataꢀ=ꢀEncoding.ASCII.GetBytes(s);ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀns.Write(data,ꢀ0,ꢀdata.Length);ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀ}ꢀ  
ꢀ
15ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀclient.Close();ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀserver.Close();ꢀ  
ꢀꢀꢀꢀ}ꢀ  
}ꢀ  
TrênꢀcꢒꢀsꢒꢀcꢘaꢀNetworkStreamꢀtaꢀcóꢀthꢝꢀnꢑiꢀthêmꢀcácꢀluꢚngꢀñꢝꢀnhꢛpꢀxuꢜtꢀtheoꢀhưꢕngꢀ  
kýꢀtꢠꢀnhưꢀStreamReader,ꢀStreamWriterꢀ  
SauꢀñâyꢀlàꢀmꢐtꢀvíꢀdꢓꢀvꢎꢀchươngꢀtrìnhꢀClient/Serverꢀsꢙꢀdꢓngꢀluꢚngꢀnhꢛpꢀxuꢜt,ꢀchươngꢀ  
trìnhꢀServerꢀchépꢀphépꢀClientꢀgꢙiꢀlênꢀyêuꢀcꢇu,ꢀnꢖuꢀyêuꢀcꢇuꢀlàꢀGetDateꢀkhôngꢀphânꢀbiꢗtꢀ  
chꢊꢀhoaꢀchꢊꢀthưꢧngꢀthìꢀServerꢀtrꢆꢀvꢎꢀchoꢀClientꢀngàyꢀhiꢗnꢀtꢏi,ꢀnꢖuꢀyêuꢀcꢇuꢀlàꢀGetTimeꢀ  
khôngꢀphanꢀbiꢗtꢀhoaꢀthưꢧngꢀthìꢀServerꢀtrꢆꢀvꢎꢀgiꢧꢀhiꢗnꢀtꢏi,ꢀnꢖuꢀlàꢀQuitꢀthìꢀServerꢀngꢯtꢀ  
kꢖtꢀnꢑiꢀvꢕiꢀClient,ꢀkhôngꢀphꢆiꢀcácꢀtrưꢧngꢀhꢟpꢀtrênꢀthìꢀthôngꢀbáoꢀkhôngꢀhiꢝuꢀlênh.ꢀ  
ChươngꢀtrìnhꢀphíaꢀClient:ꢀ  
usingꢀSystem;ꢀ  
usingꢀSystem.Collections.Generic;ꢀ  
usingꢀSystem.Linq;ꢀ  
usingꢀSystem.Text;ꢀ  
usingꢀSystem.Net;ꢀ  
usingꢀSystem.Net.Sockets;ꢀ  
usingꢀSystem.IO;ꢀ  
usingꢀSystem.Threading;ꢀ  
classꢀDateTimeClientꢀ{ꢀ  
ꢀꢀꢀꢀstaticꢀvoidꢀMain(string[]ꢀargs)ꢀ{ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀIPEndPointꢀiepꢀ=ꢀnewꢀIPEndPoint(IPAddress.Parse("127.0.0.1"),ꢀ9999);ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀSocketꢀclientꢀ=ꢀnewꢀSocket(AddressFamily.InterNetwork,ꢀSocketType.Stream,ꢀ  
ProtocolType.Tcp);ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀclient.Connect(iep);ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀNetworkStreamꢀnsꢀ=ꢀnewꢀNetworkStream(client);ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀStreamReaderꢀsrꢀ=ꢀnewꢀStreamReader(ns);ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀStreamWriterꢀswꢀ=ꢀnewꢀStreamWriter(ns);ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀwhileꢀ(true)ꢀ{ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀstringꢀinputꢀ=ꢀConsole.ReadLine();ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀsw.WriteLine(input);ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀsw.Flush();ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀifꢀ(input.ToUpper().Equals("QUIT"))ꢀbreak;ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀstringꢀkqꢀ=ꢀsr.ReadLine();ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀConsole.WriteLine(kq);ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀ}ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀsr.Close();ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀsw.Close();ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀns.Close();ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀclient.Close();ꢀ  
ꢀꢀꢀꢀ}ꢀ  
}ꢀ  
ChươngꢀtrìnhꢀphíaꢀServer:ꢀ  
usingꢀSystem;ꢀ  
usingꢀSystem.Collections.Generic;ꢀ  
usingꢀSystem.Linq;ꢀ  
usingꢀSystem.Text;ꢀ  
usingꢀSystem.Net;ꢀ  
ꢀ
16ꢀ  
usingꢀSystem.Net.Sockets;ꢀ  
usingꢀSystem.IO;ꢀ  
classꢀDateTimeServer{ꢀ  
ꢀꢀꢀꢀstaticꢀvoidꢀMain(string[]ꢀargs)ꢀ{ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀIPEndPointꢀiepꢀ=ꢀnewꢀIPEndPoint(IPAddress.Parse("127.0.0.1"),ꢀ2009);ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀSocketꢀserverꢀ=ꢀnewꢀSocket(AddressFamily.InterNetwork,ꢀSocketType.Stream,ꢀ  
ProtocolType.Tcp);ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀserver.Bind(iep);ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀserver.Listen(10);ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀSocketꢀclientꢀ=ꢀserver.Accept();ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀNetworkStreamꢀnsꢀ=ꢀnewꢀNetworkStream(client);ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀStreamReaderꢀsrꢀ=ꢀnewꢀStreamReader(nsꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀStreamWriterꢀswꢀ=ꢀnewꢀStreamWriter(ns);ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀstringꢀkq="";ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀwhileꢀ(true)ꢀ{ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀstringꢀsꢀ=ꢀsr.ReadLine();ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀs=s.ToUpper();ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀifꢀ(s.Equals("QUIT"))ꢀbreak;ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀifꢀ(s.Equals("GETDATE"))ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀkqꢀ=ꢀDateTime.Now.ToString("dd/MM/yyyy");ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀelseꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀifꢀ(s.Equals("GETTIME"))ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀkqꢀ=ꢀDateTime.Now.ToString("hh:mm:ss");ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀelseꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀkqꢀ=ꢀ"Khongꢀhieuꢀlenh";ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀsw.WriteLine(kq);ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀsw.Flush();ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀ}ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀsr.Close();ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀsw.Close();ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀclient.Close();ꢀ  
ꢀꢀꢀꢀ}ꢀ  
}ꢀ  
2.2.ꢀSocketꢀkhôngꢀhưꢌngꢀkꢛtꢀnꢏiꢀ(UDPꢀSocket)ꢀ  
ꢀ Chươngꢀtrìnhꢀphíaꢀmáyꢀchꢘꢀ  
ꢁ TꢏoꢀmꢐtꢀSocketꢀ  
ꢁ LiênꢀkꢖtꢀvꢕiꢀmꢐtꢀIPEndPointꢀcꢓcꢀbꢐꢀ  
ꢁ Gꢙiꢀnhꢛnꢀdꢊꢀliꢗuꢀtheoꢀgiaoꢀthꢉcꢀñãꢀthiꢖtꢀkꢖꢀ  
ꢁ ðóngꢀSocketꢀ  
ꢀ Chươngꢀtrìnhꢀphíaꢀmáyꢀkháchꢀ  
ꢁ XácꢀñꢌnhꢀñꢌaꢀchꢍꢀServerꢀ  
ꢁ TꢏoꢀSocketꢀ  
ꢁ Gꢙiꢀnhꢛnꢀdꢊꢀliꢗuꢀtheoꢀgiaoꢀthꢉcꢀñãꢀthiꢖtꢀkꢖꢀ  
ꢁ
ðóngꢀSocketꢀ  
ꢀ
2.2.1.ꢀViꢄtꢀchươngꢀtrìnhꢀchoꢀphíaꢀmáyꢀchꢅꢀ  
usingꢀSystem;ꢀ  
ꢀ
17ꢀ  
usingꢀSystem.Collections.Generic;ꢀ  
usingꢀSystem.Text;ꢀ  
usingꢀSystem.Net;ꢀ  
usingꢀSystem.Net.Sockets;ꢀ  
classꢀProgramꢀ{ꢀ  
ꢀꢀꢀꢀstaticꢀvoidꢀMain(string[]ꢀargs)ꢀ{ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀIPEndPointꢀiepꢀ=ꢀnewꢀIPEndPoint(IPAddress.Parse("127.0.0.1"),ꢀ2008);ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀSocketꢀserverꢀ=ꢀnewꢀSocket(AddressFamily.InterNetwork,ꢀSocketType.Dgram,ꢀ  
ProtocolType.Udp);ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀserver.Bind(iep);ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀ//taoꢀraꢀmotꢀEndpotꢀtuꢀxaꢀdeꢀnhanꢀduꢀlieuꢀveꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀIPEndPointꢀRemoteEpꢀ=ꢀnewꢀIPEndPoint(IPAddress.Any,ꢀ0);ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀEndPointꢀremote=(EndPoint)RemoteEp;ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀbyte[]ꢀdataꢀ=ꢀnewꢀbyte[1024];ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀintꢀrecvꢀ=ꢀserver.ReceiveFrom(data,ꢀrefꢀremote);ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀstringꢀsꢀ=ꢀEncoding.ASCII.GetString(data,ꢀ0,ꢀrecv);ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀConsole.WriteLine("nhanꢀveꢀtuꢀClient:{0}",ꢀs);ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀdataꢀ=ꢀEncoding.ASCII.GetBytes("Chaoꢀclient");ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀserver.SendTo(data,ꢀremote);ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀwhileꢀ(true)ꢀ{ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀdata=newꢀbyte[1024];ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀrecvꢀ=ꢀserver.ReceiveFrom(data,ꢀrefꢀremote);ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀsꢀ=ꢀEncoding.ASCII.GetString(data,ꢀ0,ꢀrecv);ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀifꢀ(s.ToUpper().Equals("QUIT"))ꢀbreak;ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀConsole.WriteLine(s);ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀdata=newꢀbyte[1024];ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀdata=Encoding.ASCII.GetBytes(s);ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀserver.SendTo(data,0,data.Length,SocketFlags.None,remote);ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀ}ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀserver.Close();ꢀ  
ꢀꢀꢀꢀ}ꢀ  
}ꢀ  
2.2.2.ꢀViꢄtꢀchươngꢀtrìnhꢀchoꢀphíaꢀmáyꢀkháchꢀ  
usingꢀSystem;ꢀ  
usingꢀSystem.Collections.Generic;ꢀ  
usingꢀSystem.Text;ꢀ  
usingꢀSystem.Net;ꢀ  
usingꢀSystem.Net.Sockets;ꢀ  
ꢀ
classꢀProgramꢀ{ꢀ  
ꢀꢀꢀꢀstaticꢀvoidꢀMain(string[]ꢀargs)ꢀ{ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀIPEndPointꢀiepꢀ=ꢀnewꢀIPEndPoint(IPAddress.Parse("127.0.0.1"),ꢀ2008);ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀSocketꢀclientꢀ=ꢀnewꢀSocket(AddressFamily.InterNetwork,ꢀSocketType.Dgram,ꢀ  
ProtocolType.Udp);ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀStringꢀsꢀ=ꢀ"Chaoꢀserver";ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀbyte[]ꢀdataꢀ=ꢀnewꢀbyte[1024];ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀdataꢀ=ꢀEncoding.ASCII.GetBytes(s);ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀclient.SendTo(data,ꢀiep);ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀEndPointꢀremoteꢀ=ꢀ(EndPoint)iep;ꢀ  
ꢀ
18ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀdataꢀ=ꢀnewꢀbyte[1024];ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀintꢀrecvꢀ=ꢀclient.ReceiveFrom(data,ꢀrefꢀremote);ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀsꢀ=ꢀEncoding.ASCII.GetString(data,ꢀ0,ꢀrecv);ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀConsole.WriteLine("NhanꢀveꢀtuꢀServer{0}",s);ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀwhileꢀ(true)ꢀ{ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀsꢀ=ꢀConsole.ReadLine();ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀdata=newꢀbyte[1024];ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀdataꢀ=ꢀEncoding.ASCII.GetBytes(s);ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀclient.SendTo(data,ꢀremote);ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀifꢀ(s.ToUpper().Equals("QUIT"))ꢀbreak;ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀdataꢀ=ꢀnewꢀbyte[1024];ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀrecvꢀ=ꢀclient.ReceiveFrom(data,ꢀrefꢀremote);ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀsꢀ=ꢀEncoding.ASCII.GetString(data,ꢀ0,ꢀrecv);ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀConsole.WriteLine(s);ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀ}ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀclient.Close();ꢀ  
ꢀꢀꢀꢀ}ꢀ  
}ꢀ  
SꢙꢀdꢓngꢀSocketꢀkhôngꢀhưꢕngꢀkꢖtꢀnꢑiꢀviꢖtꢀchươngꢀtrìnhꢀchatꢀgiưaꢀ2ꢀmáyꢀnhưꢀ  
sau:ꢀ(SauꢀnàyꢀchúngꢀtaꢀcóꢀthꢝꢀsꢙꢀdꢓngꢀlꢕpꢀUdpClient)ꢀ  
ꢀ
usingꢀSystem;ꢀ  
usingꢀSystem.Collections.Generic;ꢀ  
usingꢀSystem.ComponentModel;ꢀ  
usingꢀSystem.Data;ꢀ  
usingꢀSystem.Drawing;ꢀ  
usingꢀSystem.Text;ꢀ  
usingꢀSystem.Windows.Forms;ꢀ  
usingꢀSystem.Net;ꢀ  
usingꢀSystem.Net.Sockets;ꢀ  
usingꢀSystem.Threading;ꢀ  
ꢀ
publicꢀpartialꢀclassꢀForm1ꢀ:ꢀFormꢀ{ꢀ  
ꢀꢀꢀꢀprivateꢀSocketꢀudp1;ꢀ  
ꢀꢀꢀꢀprivateꢀIPEndPointꢀipremote,ꢀiplocal;ꢀ  
ꢀꢀꢀꢀpublicꢀForm1()ꢀ{ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀInitializeComponent();ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀCheckForIllegalCrossThreadCallsꢀ=ꢀfalse;ꢀ  
ꢀꢀꢀꢀ}ꢀ  
ꢀꢀꢀꢀprivateꢀvoidꢀbtStart_Click(objectꢀsender,ꢀEventArgsꢀe)ꢀ{ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀudp1ꢀ=ꢀnewꢀSocket(AddressFamily.InterNetwork,ꢀSocketType.Dgram,ꢀ  
ProtocolType.Udp);ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀiplocalꢀ=ꢀnewꢀIPEndPoint(IPAddress.Parse("127.0.0.1"),ꢀ  
int.Parse(txtLocalPort.Text));ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀudp1.Bind(iplocal);ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀipremoteꢀ=ꢀnewꢀIPEndPoint(IPAddress.Parse(txtIp.Text),ꢀ  
int.Parse(txtRemotePort.Text));ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀThreadꢀtuyenꢀ=ꢀnewꢀThread(newꢀThreadStart(NhanDL));ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀtuyen.Start();ꢀ  
ꢀ
19ꢀ  
ꢀꢀꢀꢀ}ꢀ  
ꢀ
ꢀꢀꢀꢀprivateꢀvoidꢀbtSend_Click(objectꢀsender,ꢀEventArgsꢀe)ꢀ{ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀbyte[]ꢀdataꢀ=ꢀnewꢀbyte[1024];ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀdataꢀ=ꢀEncoding.ASCII.GetBytes(txtSend.Text);ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀudp1.SendTo(data,ꢀipremote);ꢀ  
ꢀꢀꢀꢀ}ꢀ  
ꢀꢀꢀꢀprivateꢀvoidꢀNhanDL()ꢀ{ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀwhileꢀ(true)ꢀ{ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀbyte[]ꢀdataꢀ=ꢀnewꢀbyte[1024];ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀIPEndPointꢀipeꢀ=ꢀnewꢀIPEndPoint(IPAddress.Any,ꢀ0);ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀEndPointꢀremoteꢀ=ꢀ(EndPoint)ipe;ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀintꢀrecꢀ=ꢀudp1.ReceiveFrom(data,ꢀrefꢀremote);ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀstringꢀsꢀ=ꢀEncoding.ASCII.GetString(data,ꢀ0,ꢀrec);ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀtxtNoidung.Textꢀ+=ꢀsꢀ+ꢀ"\r\n";ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀ}ꢀ  
ꢀꢀꢀꢀ}ꢀ  
ꢀ
ꢀꢀꢀꢀprivateꢀvoidꢀbutton1_Click(objectꢀsender,ꢀEventArgsꢀe)ꢀ{ꢀ  
ꢀꢀꢀꢀꢀꢀꢀꢀMessageBox.Show(txtSend.Text.Substring(0,ꢀtxtSend.Text.IndexOf("ꢀ")));ꢀ  
ꢀꢀꢀꢀ}ꢀ  
}ꢀ  
ꢀ
2.2.3.ꢀSꢆꢀdꢇngꢀlꢁpꢀSystem.IO.MemoryStreamꢀñꢋꢀtꢌoꢀvùngꢀñꢂmꢀnhꢉpꢀxuꢊtꢀ  
ꢀ
2.3.ꢀSꢞꢀdꢙngꢀcácꢀlꢌpꢀhꢢꢀtrꢣꢀñưꢣcꢀxâyꢀdꢝngꢀtꢤꢀlꢌpꢀSoketꢀ  
ꢀ
20ꢀ  
Tải về để xem bản đầy đủ
pdf 117 trang baolam 27680 Free
Bạn đang xem 20 trang mẫu của tài liệu "Giáo trình Lập trình mạng với C#", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

File đính kèm:

  • pdfgiao_trinh_lap_trinh_mang_voi_c.pdf