http://www.ebook.edu.vn 119
Chương 6
Lp trình Socket cho giao thc TCP
1. Mô hình client/server
Mô hình được ph biến nht và được chp nhn rng rãi trong các h thng phân tán
là mô hình client/server. Trong mô hình này s có mt tp các tiến trình mà mi tiến trình
đóng vai trò như là mt trình qun lý tài nguyên cho mt tp hp các tài nguyên cho trước và
mt tp hp các tiến trình client trong đó mi tiến trình thc hin mt tác v nào đó cn truy
xut ti tài nguyên phn cng hoc phn mm dùng chung. Bn thân các trình qun lý tài
nguyên cn phi truy xut ti các tài nguyên dùng chung được qun lý bi mt tiến trình
khác, vì vy mt s tiến trình va là tiến trình client va là tiến trình server. Các tiến trình
phát ra các yêu cu ti các server bt k khi nào chúng cn truy xut ti mt trong các tài
nguyên ca các server. Nếu yêu cu là đúng đắn thì server s thc hin hành động được
yêu cu và gi mt đáp ng tr li ti tiến trình client.
Mô hình client/server cung cp mt cách tiếp cn tng quát để chia s tài nguyên
trong các h thng phân tán. Mô hình này có th được cài đặt bng rt nhiu môi trường
phn cng và phn mm khác nhau. Các máy tính được s dng để chy các tiến trình
client/server có nhiu kiu khác nhau và không cn thiết phi phân bit gia chúng; c tiến
trình client và tiến trình server đều có th chy trên cùng mt máy tính. Mt tiến trình server
có th s dng dch v ca mt server khác.
Mô hình truyn tin client/server hướng ti vic cung cp dch v. Quá trình trao đổi d
liu bao gm:
1. Truyn mt yêu cu t tiến trình client ti tiến trình server
2. Yêu cu được server x
3. Truyn đáp ng cho client
Mô hình truyn tin này liên quan đến vic truyn hai thông đip và mt dng đồng b
hóa c th gia client và server. Tiến trình server phi nhn thc được thông đip được yêu
cu bước mt ngay khi nó đến và hành động phát ra yêu cu trong client phi được tm
dng (b phong ta) và buc tiến trình client trng thái ch cho t khi nó nhn được đáp
ng do server gi v bước ba.
Mô hình client/server thường được cài đặt da trên các thao tác cơ bn là gi (send)
và nhn (receive).
http://www.ebook.edu.vn 120
Hình 4.1
Quá trình giao tiếp client và server có th din ra theo mt t rong hai chế độ: b phong
ta (blocked) và không b phong ta (non-blocked).
Chế độ b phong ta (blocked):
Trong chế độ b phong ta, khi tiến trình client hoc server phát ra lnh gi d liu
(send), vic thc thi ca tiến trình s b tm ngng cho ti khi tiến trình nhn phát ra lnh
nhn d liu (receive).
Tương t đối vi tiến trình nhn d liu, nếu tiến trình nào đó (client hoc server) phát
ra lnh nhn d liu, mà ti thi đim đó chưa có d liu gi ti thì vic thc thi ca tiến
trình cũng s b tm ngng cho ti khi có d liu gi ti.
Chế độ không b phong ta (non-blocked)
Trong chế độ này, khi tiến trình client hay server phát ra lnh gi d liu thc s, vic
thc thi ca tiến trình vn được tiến hành mà không quan tâm đến vic có tiến trình nào phát
ra lnh nhn d liu đó hay không.
Tương t cho trường hp nhn d liu, khi tiến trình phát ra lnh nhn d liu, nó s
nhn d liu hin có, vic thc thi ca tiến trình vn được tiến hành mà không quan tâm đến
vic có tiến trình nào phát ra lnh gi d liu tiếp theo hay không.
2. Các kiến trúc Client/Server
2.1. Client/Server hai tng (two-tier client/server)
Kiến trúc client/server đơn gin nht là kiến trúc hai tng. Trong thc tế hu hết các
kiến trúc client/server là kiến trúc hai tng. Mt ng dng hai tng cung cp nhiu trm làm
vic vi mt tng trình din thng nht, tng này truyn tin vi tng lưu tr d liu tp trung.
Tng trình din thông thường là client, và tng lưu tr d liu là server.
Hu hết các ng dng Internet như là email, telnet, ftp thm chí là c Web là các ng
dng hai tng. Phn ln các lp trình viên trình ng dng viết các ng dng client/server có
xu thế s dng kiến trúc này.
Tiến trình đang phong ta
Tiến trình đang x Request message
Request message
Reply Execution
Wait
Server
Client
http://www.ebook.edu.vn 121
Trong ng dng hai tng truyn thng, khi lượng công vic xđược dành cho
phía client trong khi server ch đơn gin đóng vai trò như là chương trình kim soát lung
vào ra gia ng dng và d liu. Kết qu là không ch hiu năng ca ng dng b gim đi do
tài nguyên hn chế ca PC, mà khi lượng d liu truyn đi trên mng cũng tăng theo. Khi
toàn b ng dng được x lý trên mt PC, ng dng bt buc phi yêu cu nhiu d liu
trước khi đưa ra bt k kết qu x lý nào cho người dùng. Nhiu yêu cu d liu cũng làm
gim hiu năng ca mng. Mt vn đề thường gp khác đối vi ng dng hai tng là vn đề
bo trì. Ch cn mt thay đổi nh đối vi ng dng cũng cn phi thay đổi li toàn b ng
dng client và server.
Hình 4.2
2.2. Client/Server ba tng
Ta có th tránh được các vn đề ca kiến trúc client/server hai tng bng cách m
rng kiến trúc thành ba tng. Mt kiến trúc ba tng có thêm mt tng mi tác bit vic x
d liu v trí trung tâm.
Hình 4.3
http://www.ebook.edu.vn 122
Theo kiến trúc ba tng, mt ng dng được chia thành ba tng tách bit nhau v mt
logic. Tng đầu tiên là tng trình din thường bao gm các giao din đồ ha. Tng th hai,
còn được gi là tng trung gian hay tng tác nghip. Tng th ba cha d liu cn cho ng
dng. Tng th ba v cơ bn là chương trình thc hin các li gi hàm để tìm kiếm d liu
cn thiết. Tng trình din nhn d liu và định dng nó để hin th. S tách bit gia chc
năng x lý vi giao din đã to nên s linh hot cho vic thiết kế ng dng. Nhiu giao din
người dùng được xây dngtrin khai mà không làm thay đổi logic ng dng.
Tng th ba cha d liu cn thiết cho ng dng. D liu này có th bao gm bt k
ngun thông tin nào, bao gm cơ s d liu như Oracale, SQL Server hoc tài liu XML.
2.3. Kiến trúc n-tng
Kiến trúc n-tng được chia thành các tng như sau:
Tng giao din người dùng: qun lý tương tác ca người dùng vi ng dng
Tng logic trình din: Xác định cách thc hin th giao din người dùng và các yêu
cu ca người dùng được qun lý như thế nào.
Tng logic tác nghip: Mô hình hóa các quy tc tác nghip,
Tng các dch v h tng: Cung cp mt chc năng b tr cn thiết cho ng dng
như các thành phn (truyn thông đip, h tr giao tác).
3. Mô hình truyn tin socket
Hình 4.4
6
Socket()
Bind()
Listen()
Accept()
Các chc
năng gi
và nh
n
Close()
Socket()
Bind()
Connect()
Các chc
năng gi
và nh
n
Close()
1
3
4
5
7
2
Server Client
http://www.ebook.edu.vn 123
Khi lp trình, ta cn quan tâm đến chế độ b phong ta, vì nó có th dn đến tình
hung mt tiến trình nào đó s rơi vào vòng lp vô hn ca quá trình gi hoc nhn.
Trong chương 1 chúng ta đã biết hai giao thc TCP và UDP là các giao thc tng
giao vn để truyn d liu. Mi giao thc có nhng ưu và nhược đim riêng. Chng hn,
giao thc TCP có độ tin cy truyn tin cao, nhưng tc độ truyn tin b hn chế do phi có giai
đon thiết lp và gii phóng liên kết khi truyn tin, khi gói tin có li hay b tht lc thì giao
thc TCP phi có trách nhim truyn li,…Ngược li, giao thc UDP có tc độ truyn tin rt
nhanh vì nó ch có mt cơ chế truyn tin rt đơn gin: không cn phi thiết lp và gii phóng
liên kết. Khi lp trình cho TCP ta s dng các socket lung, còn đối vi giao thc UDP ta
s s dng lp DatagramSocket và DatagramPacket.
Truyn tin hướng liên kết nghĩa là cn có giai đon thiết lp liên kết và gii phóng liên
kết trước khi truyn tin. D liu được truyn trên mng Internet dưới dng các gói (packet)
có kích thước hu hn được gi là datagram. Mi datagram cha mt header và mt
payload. Header cha địa ch và cng cn truyn gói tin đến, cũng như địa ch và cng xut
phát ca gói tin, và các thông tin khác được s dng để đảm bo độ tin cy truyn tin,
payload cha d liu. Tuy nhiên do các datagram có chiu dài hu hn nên thường phi
phân chia d liu thành nhiu gói và khôi phc li d liu ban đầu t các gói nơi nhn.
Trong quá trình truyn tin có th có th có mt hay nhiu gói b mt hay b hng và cn phi
truyn li hoc các gói tin đến không theo đúng trình t. Để tránh nhng điu này, vic phân
chia d liu thành các gói, to các header, phân tích header ca các gói đến, qun lý danh
sách các gói đã nhn được và các gói chưa nhn được, ... rt nhiu công vic cn phi thc
hin, và đòi hi rt nhiu phn mm phc tp.
Tht may mn, ta không cn phi t thc hin công vic này. Socket là mt cuc cách
mng ca Berkeley UNIX. Chúng cho phép người lp trình xem mt liên kết mng như
mt lung mà có th đọc d liu ra hay ghi d liu vào t lung này.
V mt lch s Socket là mt s m rng ca mt trong nhng ý tưởng quan trng
nht ca UNIX: tt c các thao tác vào/ra ging như vào ra tp tin đối vi người lp trình,
cho dù ta đang làm vic vi bàn phím, màn hình đồ ha, mt file thông thường, hay mt liên
kết mng. Các Socket che du người lp trình khi các chi tiết mc thp ca mng như môi
kiu đường truyn, các kích thước gói, yêu cu truyn li gói, các địa ch mng...
Mt socket có th thc hin by thao tác cơ bn:
Kết ni vi mt máy xa (ví d, chun b để gi và nhn d liu)
Gi d liu
Nhn d liu
Ngt liên kêt
Gán cng
Nghe d liu đến
Chp nhn liên kết t các máy xa trên cng đã được gán
Lp Socket ca Java được s dng bi c client và server, có các phương thc
tương ng vi bn thao tác đầu tiên. Ba thao tác cui ch cn cho server để ch các client
liên kết vi chúng. Các thao tác này được cài đặt bi lp ServerSocket. Các socket cho
client thường đưc s dng theo mô hình sau:
Mt socket mi được to ra bng cách s dng hàm Socket().
Socket c gng liên kết vi mt host xa.
Mi khi liên kết được thiết lp, các host xa nhn các lung vào và lung ra t
socket, và s dng các lung này để gi d liu cho nhau. Kiu liên kết này đưc gi