BỘ GIÁO DỤC VÀ ĐÀO TẠO
BỘ GIÁO DỤC VÀ ĐÀO TẠO
ĐẠI HỌC ĐÀ NẴNG
ĐẠI HỌC ĐÀ NẴNG
TIỂU LUẬN MÔN HC
LẬP TRÌNH MẠNG
Đề tài: CHƯƠNG TRÌNH MÔ PHỎNG QUÁ TRÌNH PHÁT
VÀ NHẬN THÔNG ĐIỆP TRONG HỆ PHÂN TÁN GIỮA 3
SERVER NGANG HÀNG
GVHD
GVHD
: PGS TS Lê Văn Sơn
: PGS TS Lê Văn Sơn
Học viên
Học viên
: Nguyễn Thị Hải Hà
: Nguyễn Thị Hải Hà
Nguyễn Thị Thu Hằng
Nguyễn Thị Thu Hằng
Lớp
Lớp
: Khoa học máy tính
: Khoa học máy tính
Khóa
Khóa
: 2009-2011
: 2009-2011
Đà Nẵng, 03/2010
MỤC LỤC
E7N*AM1=dEI;uI+IC,3E
73B3Iw7v,3EK,MuMq67MBX?A6776*6;
B6;AMNBI
=Xx2*KMqy7*o67737,zH
TBVXhN+ARB7=bH/yL3?I@MqMGd
K8hE7TL3?K8KRBM?*+,th
L3?*+,m7,6{|LMH}ikK,,3EMH}-X~1I
,?0UI667,?0UM<A76*s{B4Y7@6•Gt
MGd7,*AMqMGdX?Am76*K=BI8m
=XX?A67K=qQX,B€7X,*AMh
MqMGdX?A1I=hm=,8X,B6776*2oBK
T3KLH0bOB*+,@/zMGd7,*A+
,mMuOB,*+,E7,3E7@BMB/|
2973B3
#BXMGdB“Hệ tin học phân tán”67“Lập trình mạng
máy tính”2G;/ob23*OB<3W##K€l#H@Mq
?MGd,X?8OBB73o*/o+OB<3
,Im@MqI77{+32o“Mô phỏng quá trình phát và nhận
thông điệp trong hệ phân tán của 3 server ngang hàng”
Gd/oG;2•OB<3,IK€l#H67/o@M•OB,7
6KI;m@MqI7u733Km6;tB67X?
8hm07‚‚/zX,XƒT?/hm@u
IMGdhL+7OB<367,76KI;M
MGdI7VH
B1 h)i3jUb7Y3jUk
PHẦN I: CƠ SỞ LÝ THUYẾT
1. Hệ phân tán (Distributed System):
a. Giới thiệu:
*+,7N*AMB2m=7<6786=
I*hBIMQ6;B
3 CNI*0U/oAX7II7*
bGym7Gdm6*MhMGd+
I,X,MbI7Bm0U/oA
hoMN9‰,0BM<G;
Xh/oAB3,0BM<OBh
( lA +37X,*;6=+,bCNEI,
;7IMhm?V/|29NtB
IX?Rb+EI,73MGdBƒ67o
*/I/IK,=73p<?
MA6;,R,b
CNITGGy;OB,*+,7+,I,,R,
{|L67o*,6*MhK,{BB
B1• h)i3jUb7Y3jUk
2. Các mô hình hệ phân tán và ứng dụng mạng:
2.1 Các lớp phần mềm:
Kiến trúc phần mềm:u@OB<=G7,;67,I21I
,TOB,2U69MGBB673K<TB,?KnI„K
,,3EX,B
Platform (hệ nền): <88uu67,;<=-*M=74
Middleware: N ; OB < = 7 9 ME OB h 7 M, 2u
11I11367MuNI,829mG !^Ž\fm
ŽC-Ž1I1C1I26IBI4m.!^C /012!II1^0Z1CI214m
2.2 Kiến trúc hệ thống:
a. Mô hình Client/Server:
Hình 3: Mô hình Client/Server
• Giới thiệu
C!1D#1617Q8BIMQIMhb,
7,,3EhBI?6;B1INGH8uMUGH
!13K<!hu=,2U69#161KGhM=IMN
1I3KL7,3K<s!1/BMh{|L67bX?RbI13K
<GtGH#16167!1MGd7KB,3X,
B!I2n@7I#161py,/‹/7t3K<s!1
GKo?N?K,RB-1BI4TB!167#161
0‚M<yEB!1mX7!1|E*3K<;#161!,GH
#161GtM=7y8829-<829OB4
#odOBGH,737hh76*K0u8N
,3E7Ih‘dBI83=•9yM+37BI8!D
€;,BI8•73p@I,7/b{uhEd=/b
•X,BOBK7X„bXhXl€;,•73
,GH#161IN2U697IMu3h7KN*A
B/}tB-1/B/3/146;=GH672U69X,I„h
B1’ h)i3jUb7Y3jUk
h3KEN,3E,+0Gt!hh=#161n
7N2U69m@hkK=,3EI„N,3E
• Client
I!1D#161mGtB“MU[B9IN,3!1
7N,37VMGd/|290yNGt2nMA*EMN
IhC,3!1h/|29,*M=70GtG”J{m.^#m
^#D5
\b+‘N!1pMqMGdEd=8lK*M=
77h3mGXMGdA67INfm”f1I
!1D#161h“h/|29K,8l2I*M=7
u6;=2U69X,B-97,2U692I,#161K
73u4m6E29Ghh3K<u32T*sN#161B3|2T*
K#161Mho?I,829OB!1D#161m,8l
IMNE7/oX?dTB!167#1616;/oB/}73Km2T*
KbB,3
EI,+,7sEI,671D/161!,
MGd{+32o2oBKXr”10-6E29G 11—B1•47,
+,*AH/y2T*0BXi12hMGdAX?6;,/161”10M
u3MGd,MN>r”10<3MqyBG;;I*+,
!,23*”10@IX,7KI7<X?A6;*A”10Om
7X0UXA?0y0uXx*M=77IMB3I,3OBX,
7<3CN{G;;X{+32o,B172T*bMGd
hBNh,,3OMhXblM,8nN@I=Gt
2nWtM+3,*AB–B1Mq/oy6El{|Lz
•G;<3hz,Gd6;6*EI,+,GIo?@
n‰0KB
2.3 Mô hình tương tác trong hệ phân tán:
a. Thực hiện truyền thông:
• Sự tiềm ẩn (Latency):
o #oIqB3= tB<?MN0M<KOBN
M*3=M?MGdME
o #oIq3= 7XIbtBTB/o3=0M<K670/B
nOBNM*
o #oIq{|L 7tB<M*M=7{|LD|D
M*
o #oIq{?7 tB<MNM*{?7yA,3
OI„y,I21BMdM3=M
• Băng thông (bandwidth): Q/AhMGd3=MIN
tBMqI
• Sự biến đống tạp (Jitter):tBX,BTB,/oIqbGy
0y,M*X,B
b. Đồng hồ và thứ tự các sự kiện:
• >hX,*I79OBtB
• UMNM‰‰ UMNGHMAyNM‰‰,3E2BXƒ
sNM‰‰B?I7bI
<CNB11I•^#Gth0b3<G11Vh0A
<{|L2T*7
• <BBI
• <B/I“7<!-B///I!IIIII4
B1)P h)i3jUb7Y3jUk
• <1…IX“7<-11III4
• <.BBXD3/B
Wb/|Gt2nMBy,3f67A|NM*;,3\Gt
2n/|29N/IbI6l0bM/IGm/BMhu@#12Es
tMMh2T*MGd{|L<GdGI/BM+3
Hình 5: Đường đi của dữ liệu qua mạng Internet
<Km2T*MGd{|L0y<BBI<73h*69Q8
2T*1IX267ouMUM<BBIy,3\h
MGd=73AGX06?NGH,+*b+
1I8o67@,uMUGH;3MGd<BBI|
2T*{A<2G;1I2“031A031!n6;2T*m<BBI
p|{A,M=XX,@{,MUMUBVM?mMOB2T*
>{A;<!m2“2T*/zMGdMh7,hhXEG;
Xu?0kBGbƒH:(>\!u@OBh2T*!
‰N<1B218BM=X67/BMh72T*#BXMhh
{Iy<!m2T*MGd3{AI<
Wh2T*{A;</z?90UMhh7,h2T*
ƒH/BIIhXEG;nd6;3h7h2nM
3=2T*IXMhhmp~K<1B21OBh67Ih2T
*‰3{AI<.BBXD3/B
>,h2T*;<.BBX/zMGd‚KN1B21X,67
3;<3/BM67IWh2T*@737–B1>EG;
OBN–B1I7I79N67I7,3fX?A
IXMGd3=K11m–B1MGd,I1V2•Mh
I N 8 29 /| 29 /IX1 < b h /161 67 1
#161 67 1 /z | 67 2T * RB /IX1 9
!1/z|3K<h,B/AM?/161m/161MGd,B/A67/z
{|Ly/161‰3=bI1X?Rb
!hB2/IX1
3=hmX3
3=2“031/m3
b) Lập trình Socket với TCP
#IX17|BBI?TB,?67BI8BI6-.I„
!4
.U69! 3=,031/3sN?M?,?X,
Hình 7: Lập trình socket với TCP
i !1b|3K<;/161
?,3ObMBMGdo*
C,3Oby/IX1-Q4M3K<s1
i !13K</1610k,
IN/IX1!K,3
!VšMUBV67/A*QOB?,3O
>1I/IX1 1!IKX?;/161!
>MGd1Km/161!I/IX1;M?,3OBI
?6;1
o Iwh3*6;=1/
o +0*10k/A*Q
i GH,TB1D/161RB/IX1!
B1) h)i3jUb7Y3jUk
c) Lập trình socket với UDP:
.u2U693=2T*X3TB167/161
i . XhKX?TB167/161
>hBMI0‚B3
• S3|67M*
o !3<Gds–1#161)0Bm#16150Bm#1610BMb
/161n3K),3IB
o !sBI2*OBs/16167/161<X?A
€E29|B/Q#161)mI/B167IOB/161<X?
A67uIIXMX?A
7GHoI,|B/QOB,/161X,
!@L 6/161n3K),3IBIKI/B1
IBI/m“IGH8MGd?/‹I/161
7FP•PmFP:PmFP’P
o !GHh3K,3X,BmXMh<?I
,,31I,MUBVINI/B1
o 8s0uXx/1617Imš67IM*NC1//B1mq
M*67/161M?
B1)F h)i3jUb7Y3jUk
Hình 9: Minh họa phát/nhận thông điệp giữa 3 server
b. Cài đặt chương trình:
I07I,mhBMAGdBBMh7,3O67,3C,3O
/z7M„QI,3hBI?MGd@GHXEIm,3
O/zt67X7bIM?X,3Ml67X?AM?
RBQ7,3OMq7M„@,3MqX?AMGd6;,3Ob
,3O67,3/z/|29,MAGdOB;#IX1!,MAGd73M=
/|29,/1BI67M=BI?2T*IB
;#IX1MGd7M„IhZB6B1.IMhmhXB0,I0k@,
ˆIZB6B1œ—ŠyB3M<*ZB6B
//con chua cac ket noi tu cac may client trong mang (ket noi den)
ServerThread con[] = new ServerThread[10];
//conMaster dung de chua mot ket noi tu mot server trong he den tren ServerSocket (Ket noi den)
txtHostname = new JTextField();
lblLocalPort = new JLabel();
txtLocalPort = new JTextField();
label6 = new JLabel();
txtStateServer = new JTextField();
splitMain = new JSplitPane();
tabPaneInfo = new JTabbedPane();
lblReceive = new JLabel();
srpReceive = new JScrollPane();
txtReceive = new JTextArea();
pnMessage = new JPanel();
lblExample = new JLabel();
pnExample = new JPanel();
pnDeliverMessage = new JPanel();
btnSend = new JButton();
label2 = new JLabel();
B15P h)i3jUb7Y3jUk
txtMessage = new JTextField("");
// this
this.setTitle("Server");
this.setSize(new Dimension(600, 400));
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container contentPane = getContentPane();
contentPane.setLayout(new BorderLayout());
// pnLookupServer
{
btnLookupActionPerformed(e);
}
});
pnLookupServer.add(btnLookup);
// btnReset
btnReset.setText("Reset");
}
contentPane.add(pnLookupServer, BorderLayout.NORTH);
// srpListServer
{
srpListServer.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
srpListServer.setViewportBorder(new TitledBorder("Servers in the system"));
srpListServer.setMinimumSize(new Dimension(50, 51));
srpListServer.setPreferredSize(new Dimension(200, 392));
// lstServers
lstServers.setFont(new Font("Dialog", Font.BOLD, 14));
lstServers.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
lstServers.setBackground(new Color(247, 247, 214));
srpListServer.setViewportView(lstServers);
}
contentPane.add(srpListServer, BorderLayout.WEST);
// pnServerInfo
{
pnServerInfo.setBorder(new TitledBorder(null, "Server info", TitledBorder.LEADING,
TitledBorder.TOP, null, Color.blue));
pnServerInfo.setLayout(new FlowLayout());
// lblAddress
lblAddress.setText("IP Address :");
pnServerInfo.add(lblAddress);
txtStateServer.setColumns(15);
txtStateServer.setEditable(false);
txtStateServer.setForeground(new Color(153, 0, 153));
txtStateServer.setFont(new Font("Dialog", Font.BOLD, 12));
pnServerInfo.add(txtStateServer);
}
contentPane.add(pnServerInfo, BorderLayout.SOUTH);
B15 h)i3jUb7Y3jUk
// splitMain
{
splitMain.setOrientation(JSplitPane.VERTICAL_SPLIT);
splitMain.setResizeWeight(0.9);
// tabPaneInfo
{
// pnMessage
{
pnMessage.setLayout(new BorderLayout());
// lblReceive
lblReceive.setText("Send and Recieve Msg ");
pnMessage.add(lblReceive, BorderLayout.NORTH);
// srpReceive
{
// txtReceive
txtReceive.setEditable(false);
txtReceive.setForeground(Color.blue);
txtReceive.setText("");
txtReceive.setFont(new Font("Dialog", Font.BOLD, 12));
srpReceive.setViewportView(txtReceive);
}
new Insets(0, 0, 5, 5), 0, 0));
// txtMessage
txtMessage.setColumns(450);
txtMessage.setHorizontalAlignment(SwingConstants.LEFT);
txtMessage.setFont(new Font("Tahoma", Font.BOLD, 12));
pnDeliverMessage.add(txtMessage, new GridBagConstraints(0, 1, 10, 1, 0.0, 0.0,
GridBagConstraints.CENTER, GridBagConstraints.BOTH,
new Insets(0, 0, 5, 5), 0, 0));
// btnSend
btnSend.setText("Send");
btnSend.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
btnSendActionPerformed(e);
}
});
pnDeliverMessage.add(btnSend, new GridBagConstraints(0, 2, 1, 1, 0.0, 0.0,
GridBagConstraints.CENTER, GridBagConstraints.BOTH,
new Insets(0, 0, 0, 5), 0, 0));
}
splitMain.setBottomComponent(pnDeliverMessage);
}
contentPane.add(splitMain, BorderLayout.CENTER);
B15• h)i3jUb7Y3jUk