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 đủ
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:
giao_trinh_lap_trinh_mang_voi_c.pdf

