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
!"#$%&'(
)*+, /012#3/14 (
5!,*+,67829 :
5)!,;<= :
55>?@*A :
BC!1D#161 :
0C,3E+,F
5CGH,I*+, J
5(3KLIMNOBBI8!D)P
BCQR,OB11)P
0S,3=2T*RB11)P
*AMUBV67H?3=2T*I11)5
W;*6=/IX1YZB6B )5
B4U[B )5
04#IX16;!)
4/IX16;. )(
5 \]^_`W.aW):
)&K<07I, ):
5G;bR3?07I,):
>'c5J
)>?RbMMGd 5J
5?67G;K8?1I5J
]efC>g^P
B15 h)i3jUb7Y3jUk
LỜI NÓI ĐẦU
ITlRBmn6;/o,G6p0qIOBXIBXrm
7*p0?MQXsMM,86;<
;OBIGtI/AT,6[MuOB?XvG;m,3
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=
„u@m76n8*MMBMGd,3KB*
M„0*RB+K867,829*B3
Hình 1: Các lĩnh vực có hệ thống phân tán
B3*+,7Nd,,3EMN7{u*MA6;,
Gt/|29GN,3EMH€;,M„M
• =0N
• >?ARB3=
• !B{},73K-1If21…B10B4
Hình 2: Một phần của mạng Internet
hmNMU[BQ0?67X,M<3MO6=*+,MGd073
I7*†)‡G/B
B1( h)i3jUb7Y3jUk
ˆ*+,B3h‚7*+, /012#3/147*
A{|L0BI‰=0N{|LI„0N6{|Lk,,6UE
X,B67MGdKX?6;BRBGH*6j2G;/oM=
XAuOBN*M=7Š
b. Mục tiêu của hệ phân tán:
• lAMN0R+IEI,m{|L
• !b*/‹/7OB,I73K
• lMNBI7I2T*
• B2hB,I2U69
• b0bIEI76ŒOB
c. Nguyên tắc xây dựng hệ phân tán:
STT Tên gọi Thuyết minh
) !B/}73K o?,,3EM„BN6uM=
;7<b2n73KCN?
KN7IMhhu73K2n
yNX,
5 K >,*AMqMGd‚A6;Bm,o
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
8737N?GdQ8+u7IMhhN,3EM„0*
969,3K<6=GTm{|LmEI,ub,,3K>Q8
QR,OB737NfMGd?s=,3EX,
B1: h)i3jUb7Y3jUk
BmIMhN,3E7#161CNGH13s0uXx,3
E7IIphy3K<OBM?#161mX/161
MGd,3K<73h/zo*67yX?Rb6=I!1
Hình 4: Trao đổi thông điệp giữa Client & Server
!h=MGd/|29I,GHG
!1D#1617•CN#1617NR,mR,73t/oK
*sN!1CNK76*MOB73G/B
EB!1yN3K<RBM?#161M3K<N/A2
2U697IMhGu3K,3#161mu3M‰‰*AmMlXLu0k
•
EB#161MGdXyMNG;K*A,3E#BXXyMNh
/zt!1K*hM3K<N/A2U69S,OB#1617
BB5X
o >VhN3K<OB!1MGd#161969NtM
Mh7#161„
o >#161h969M‰t=3K<s!1yM?Mh
7#161M‰t
!1D#1617QR,umKo?N#161hMGd
A;=#161X,k76**RbH>MGdN3K<s
!1m#16173h|?3K<6sBMGdI#161X,6E29G
.BB0B/1#16160b+hX{|L3K<73MGdC,3#161h
7,*69MHbI„8
€E29GN,3ObttB*I73mXN,3!1
3K<u36=tBh/zb|N3K<1INK•2I
#161MUBm?3K<MGdu,3#161/zb6=7
!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
I!1D#161m!1MGdIG7Gt/|29,2U69
K2INI„=,3Ou67#161MGdIG7Gt
u2U69Mbt,3K<OB,!1/=RB7bMGd
6B“IMNOBhIN9mN,3!1I73
h7#161INX,€E299GN,376*
GN!10GtIfGM‰thhMh6B“
GN,3O-1/1614u2U69us{BI=GtX,
-!1/4/|29!1MGdG70=QOB,2U69Km?h
67II„B@/zMGdUK,3!1
• Server
#161“MGdMU[BG7N,3E=Gt/|29-/1
I14€N#161bRbL=3K<s,!1KIK
hIMN/zAH?*M=7OBh7MB*6;,ElI
MNMN/I/I6;BG*M=7•m”.^”##161
u67M=X,?367I73KOB*A
!,8293K#161bMGd,tBMN‘OB829
73X7ƒ829X,EMB*Mb0bIN?X/|
29I70N73K*A#161G7N7u2U69I,
!1/3K<;X<m,2U69GH/y2T*mum3=–1m*A
!,829#161u,2U69BE8lM‘dI,I
MNK,,3!1/h*RbH
b. Mạng máy tính phân tán
*AEI,+,MqIMGd0G;I„6[M/I6;,*
67*X,O-!1D#1614€*EI,+,6=H0bpA
G6*EI,OB*X,OK6N;.T*MGd8BK
=,3Oy=6UEMUBLX,BX?ABRB2*
N”f7,H76*m,“0Bm,,OBNH
RB
B1F h)i3jUb7Y3jUk
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
• ‰0NhBM‰‰
o Hệ thống định vị toàn cầu (GPS):NE,3Eh/|29,3
B2IMtBMsW#6;MNE{,7)Ii+3!@
h|,M*tBM?,,3EX,IGH
8OB@
o Các đồng hồ logic:‘M*7tBMh2uK6;N/AA
?7b?8oOB@
B1J h)i3jUb7Y3jUk
2.4 Nguyên lý hoạt động của giao thức TCP/IP
C,3E73B3Mqy7N7<RBI7
3=K?;m0BM<Vh67,3EMGdMGB67I/|29y
,6*K867969IRA“!n6;tBmXIB,
m,,3bm,3EMqh„yX‚HmsGtm7,3M?
,6*„0*/o0nQOBI7<11MqMGBXb
l/|29M?sGt2+77302IHK11mG;
K,B”10mh0BIt0oƒ7?7I7IGthMGdXbl
3z67*dM?G63˜
a. Mô hình tổng quát của mạng Internet
GI)2G;M+3mX?u6LOB11‰hE
8B,/161u2U69Im,0BI‰,76*
/|292U692I11u™,+311™78B667
Em,670BIOI7?;N*A8G63I
MNH67*RbM=X*KR3?7,3EIm2nX,
B6=X?@mM=bBI?6;1InNR3h7BI8
!D
b. Quá trình truyền dữ liệu qua mạng Internet
CNGHI7VMGdIKs=I216;,8l
67*69X,BGKX?„z6;BS,3=2T*
pG63h3=RB11m2T*bMGd{|LRB=
<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
;M@ME<;ŽI1oB7NI21VhB<71…IX67
.BBXD3/B!,–B1;I1/zMGd<.BBXD3/B0ƒ1B21
B1)) h)i3jUb7Y3jUk
7<73K67I673K<1…IX-4<2oB67I,
M=XI1B217hK67IMR3?MUMGtM?1IIh
#BMhh73MGd3{A<.BBXD3/BMM67IS,
8??9IM?X2T*;ME7,3\
>;,3\,h2T*MGd{|L1IR3Gd6;,3f
1I=pKmM<K2T*RB<2BBXD3/BM+3–B10U0ƒM
<1B21673K<<m2T*MGd0hm/BMhK
<!67AnK<BBIMUB7
c. Hệ thống địa chỉ và cơ chế truyền dữ liệu trong mạng Internet
Nh2T*hMs‰;MEm11Mq2nN*
AM,MUBVub,,3EA67IG/B
Hình 6: Hệ thống tên và địa chỉ của mạng Internet trong mối liên hệ với các tầng
TK67MUBV73MGd|I,3E2T*
3. Giới thiệu về lập trình socket – java:
a) Định nghĩa:
#IX17BI2*-|B42I829IBK,3mRbL0y^#RB
Mh,829h|67M*M?s,829X,
#IX17NGH,M?X?A3=TBNGH
3K<2U69-1467NGHu2U69-/1614K
fm”fB31167M@7TBTR,B30KI,3
EC‘/IX1hMGd{1GNMAINX?ACN/IX1
B1)5 h)i3jUb7Y3jUk
K,33K<2U69hMUBVMGdu/‹MˆŠN/IX1K,3
u2U69CNX/IX1MqMGd?ndmB,3EhBI
MQ2U69672T*
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
\K|VšMUBV67/A*QOBEBK‘h
#161/zMUBV67/A*QGH80KIh
i . ,hh0UuI„M?X1I8o
i GH,1D/161RB./IX1
B1)( h)i3jUb7Y3jUk
B1)• h)i3jUb7Y3jUk
PHẦN 2: BÀI TOÁN ỨNG DỤNG
1. Yêu cầu bài toán:
• Tên đề tài: €?GHƒR,,67M*
I*+,
• !h#1617•m&67›
• >B7
• CƒG6z
Hình 8: Tập hợp sự kiện trên hệ 3 Server/Workstation
2. Hướng giải quyết bài toán
`29L3?/IX1iZB6BMqM=yKM{+32o
GHkbR3?07I,
bR3?07I,MqKBmBb/161G/B
a. Giả lập 3 server
• Wb#161KN,3MHAG#161MB3K,3
C‘/16173h8l|67M*s,/161X,|M?
• WBI2*OBGH
o #161)
B1): h)i3jUb7Y3jUk
o #1615
o #161
B1)’ h)i3jUb7Y3jUk
• 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)
ServerThread conMaster;
//Da co Master trong he ket noi chua
boolean bConMaster = false;
//conSlave dung de chua ket noi voi mot server trong he (ket noi di)
ServerThread conSlave;
// End of variables declaration - GEN-END:variables
public ServerApp(int port) {
B1)J h)i3jUb7Y3jUk
try{
intLocalPort = port;
initialize();
}catch(Exception e){
}
}
private void initialize() throws Exception{
// Begin initialization - GEN-BEGIN:initialize
pnLookupServer = new JPanel();
lblHost = new JLabel();
cboHost = new JComboBox();
lblPort = new JLabel();
cboPort = new JComboBox();
btnLookup = new JButton();
btnReset = new JButton();
srpListServer = new JScrollPane();
lstServers = new JList();
pnServerInfo = new JPanel();
lblAddress = new JLabel();
txtAddress = new JTextField();
label5 = new JLabel();
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
{
pnLookupServer.setBorder(new TitledBorder(null, "Lookup servers in the system",
TitledBorder.LEADING, TitledBorder.TOP, null, Color.blue));
pnLookupServer.setLayout(new FlowLayout(FlowLayout.LEFT));
// lblHost
lblHost.setText("Hostname: ");
pnLookupServer.add(lblHost);
// cboHost
cboHost.setEditable(true);
cboHost.setModel(new DefaultComboBoxModel(new String[] {
"localhost",
"127.0.0.1"
}));
pnLookupServer.add(cboHost);
// lblPort
lblPort.setText("Port :");
pnLookupServer.add(lblPort);
// cboPort
cboPort.setModel(new DefaultComboBoxModel(new String[] {
"8050",
"8060",
"8070"
}));
cboPort.setEditable(true);
pnLookupServer.add(cboPort);
B15) h)i3jUb7Y3jUk
// btnLookup
btnLookup.setText("Lookup");
btnLookup.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
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);
B155 h)i3jUb7Y3jUk
// txtAddress
txtAddress.setColumns(10);
txtAddress.setEditable(false);
txtAddress.setForeground(new Color(153, 0, 153));
txtAddress.setFont(new Font("Dialog", Font.BOLD, 12));
pnServerInfo.add(txtAddress);
// label5
label5.setText("Hostname :");
pnServerInfo.add(label5);
// txtHostname
txtHostname.setColumns(10);
txtHostname.setEditable(false);
txtHostname.setForeground(new Color(153, 0, 153));
txtHostname.setFont(new Font("Dialog", Font.BOLD, 12));
pnServerInfo.add(txtHostname);
// lblLocalPort
lblLocalPort.setText("LocalPort :");
pnServerInfo.add(lblLocalPort);
// txtLocalPort
txtLocalPort.setColumns(6);
txtLocalPort.setEditable(false);
txtLocalPort.setForeground(new Color(153, 0, 153));
txtLocalPort.setFont(new Font("Dialog", Font.BOLD, 12));
pnServerInfo.add(txtLocalPort);
// label6
label6.setText("State server:");
pnServerInfo.add(label6);
// txtStateServer
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);
}
pnMessage.add(srpReceive, BorderLayout.CENTER);
}
// pnExample
{
pnExample.setLayout(new BorderLayout());
// lblExample
lblExample.setIcon(new ImageIcon("example.JPG"));
lblExample.setHorizontalAlignment(SwingConstants.CENTER);
pnExample.add(lblExample, BorderLayout.CENTER);
}
tabPaneInfo.addTab("Messages", pnMessage);
B15( h)i3jUb7Y3jUk
}
splitMain.setTopComponent(tabPaneInfo);
// pnDeliverMessage
{
pnDeliverMessage.setBorder(new TitledBorder("Deliver message:"));
pnDeliverMessage.setLayout(new GridBagLayout());
((GridBagLayout)pnDeliverMessage.getLayout()).columnWidths = new int[] {0, 0, 0, 0, 0, 0, 0,
0, 0, 0};
((GridBagLayout)pnDeliverMessage.getLayout()).rowHeights = new int[] {0, 0, 0, 0};
((GridBagLayout)pnDeliverMessage.getLayout()).columnWeights = new double[] {0.0, 0.0, 0.0,
0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0E-4};
((GridBagLayout)pnDeliverMessage.getLayout()).rowWeights = new double[] {0.0, 0.0, 0.0,
1.0E-4};
// label2
label2.setText("Message :");
pnDeliverMessage.add(label2, new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0,
GridBagConstraints.CENTER, GridBagConstraints.BOTH,
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