Giới thiệu cơ bản lý thuyết và hướng dẫn chi tiết các bài tập trong "Lập trình truyền thông" gồm 5 chương như sau: Chương 1: Tổng quan về lập trình truyền thông Chương 2: Tổng quan ngôn ngữ lập trình Java Chương 3: Ống dẫn - PIPE Chương 4: Lập trình Socket Chương 5: Kích hoạt phương thức từ xa - RMI
Trang 1TR !NG ∃%I H∋C QU)NG NAM
KHOA CÔNG NGH THÔNG TIN
Trang 220%: Ki8m tra gi9a k< (Th>c hành trên máy tính)
20%: Ti8u lu7n (Chia nhóm)
50%: Thi k1t thúc h+c ph−n (Theo hình th?c trΑc nghiΧm)
N1I DUNG H(C PH∗N:
H+c ph−n g∆m 5 ch:Εng nh: sau:
1 Ch:Εng 1: TΦng quan vΓ l7p trình truyΓn thông
2 Ch:Εng 2: TΦng quan ngôn ng9 l7p trình Java
3 Ch:Εng 3: Ηng dΙn - PIPE
4 Ch:Εng 4: L7p trình Socket
5 Ch:Εng 5: Kích hoΚt ph:Εng th?c tΛ xa - RMI
Trang 3-
CH2&NG 1:
T3NG QUAN V4 L5P TRÌNH TRUY4N THÔNG
1.1 C& CH6 LIÊN L7C LIÊN QUÁ TRÌNH
§ TruyΓn thông là m6t khái niΧm dùng 58 ch3 s> giao ti1p, trao 5Φi thông tin gi9a hai hay nhiΓu th>c th8 trong m6t hΧ th0ng nào 5ó
§ ViΧc giao ti1p phΜi có nh9ng tiΧn ích hΝ trΟ bΠi hΧ 5iΓu hành máy tính
§ Các tiΧn ích này th:Θng 5:Οc g+i vΡi cái tên là CΕ ch1 giao ti1p liên quá trình (IPC - Inter-Process Communication)
1.2 PHÂN LO7I C& CH6 GIAO TI6P LIÊN QUÁ TRÌNH
§ LoΚi 1: CΕ ch1 giao ti1p liên quá trình hΝ trΟ giao ti1p gi9a các quá trình trên cùng m6t máy tính
§ LoΚi 2: CΕ ch1 giao ti1p liên quá trình hΝ trΟ giao ti1p gi9a các quá trình nΣm trên các máy tính khác nhau
§ ThΤa thu7n vΡi nhau vΓ các qui tΑc trao 5Φi thông tin, g+i các qui tΑc này là các giao th?c (Protocol)
Trang 4-
1.3 MÔ HÌNH OSI (Open Systems Interconnection)
1/ T−ng ?ng dΥng (Application Layer): cung cΩp các ?ng dΥng truy xuΩt 51n các dΞch vΥ mΚng; Web Browser, Web Server,…
2/ T−ng trình bày (Presentation Layer): 5Μm bΜo các máy tính có ki8u 5Ξnh dΚng d9 liΧu khác nhau vΙn có th8 trao 5Φi thông tin cho nhau
3/ T−ng giao dΞch (Session Layer): cho phép các ?ng dΥng thi1t l7p, sΖ dΥng và xóa các kênh giao ti1p gi9a chúng (5:Οc g+i là giao dΞch)
4/ T−ng v7n chuy8n (Transport Layer): D9 liΧu gΠi 5i 5:Οc 5Μm bΜo không có lΝi, theo 5úng trình t>, không bΞ mΩt mát, trùng lΑp
5/ T−ng mΚng (Network Layer): tìm 5:Θng 5i cho d9 liΧu 51n các 5ích khác nhau trong hΧ th0ng mΚng
6/ T−ng liên k1t d9 liΧu (Data-Link Layer): 5Μm bΜo truyΓn tΜi các khung d9 liΧu (Frame) gi9a hai máy tính
7/ T−ng v7t lý (Physical Layer): ∃iΓu khi8n viΧc truyΓn tΜi th7t s> các bit trên 5:Θng truyΓn v7t lý
Trang 6-
1.6 BÀI T5P TH8C HÀNH
Bài t,p 1.1: Tìm 5+c và vi1t m6t báo cáo không quá 10 trang vΓ giao th?c HTTP
H:Ρng dΙn tham khΜo:
- Sinh viên chia thành nhóm <=3 bΚn
- Các nhóm tìm ki1m tài liΧu trên Internet
- Vi1t báo cáo (File word) theo 3 ch:Εng sau:
o Ch:Εng 1: GiΡi thiΧu vΓ giao th?c HTTP
o Ch:Εng 2: M6t s0 vΩn 5Γ liên quan 51n giao th?c HTTP
o Ch:Εng 3: K1t lu7n
- Trình bày lΚi báo cáo cho 5úng mΙu, 5⊥p, rõ ràng
- Trang 5ưu tiên báo cáo ghi h+ tên các thành viên trong nhóm
- N6p lΚi File báo cáo (file word) vào h6p mail: khuongdx@gmail.com
Bài t,p 1.2: Tìm 5+c và vi1t m6t báo cáo không quá 10 trang vΓ giao th?c POP3
H:Ρng dΙn tham khΜo:
- T:Εng t> Bài t7p 1.1
Bài t,p 1.3: Tìm hi8u vΓ dΞch vΥ Chat trên mΚng Internet Vi1t lΚi báo cáo không quá 10 trang
trình bày các n6i dung sau:
- M6t bΜng mô tΜ các ch?c n_ng th:Θng 5:Οc hΝ trΟ trong m6t dΞch vΥ Chat
- Xây d>ng Chat Protocol riêng c[a bΚn trong 5ó mô tΜ:
o Các ch?c n_ng hΝ trΟ bΠi Chat Server
o Khuôn dΚng (Format) và các loΚi thông 5iΧp (Message) hΝ trΟ bΠi Protocol
o SΕ 5∆ trΚng thái hoΚt 56ng c[a server và client (giΜi thu7t)
o Minh h+a các kΞch bΜn khác nhau cho tΛng ch?c n_ng c[a dΞch vΥ
Trang 7-
CH2&NG 2:
T3NG QUAN NGÔN NG9 L5P TRÌNH JAVA
2.1 GI%I THI U NGÔN NG9 L5P TRÌNH JAVA
Ngôn ng9 l7p trình Java 5:Οc Sun Microsystems 5:a ra giΡi thiΧu vào tháng 6 n_m 1995 và 5ã nhanh chóng trΠ thành m6t ngôn ng9 l7p trình c[a các l7p trình viên chuyên nghiΧp Java 5:Οc xây d>ng d>a trên nΓn tΜng c[a C và C++ ngha là Java sΖ dΥng cú pháp c[a C và 5αc tr:ng h:Ρng 50i t:Οng c[a C++ Java là ngôn ng9 vΛa biên dΞch vΛa thông dΞch ∃ưu tiên mã ngu∆n 5:Οc biên dΞch thành dΚng bytecode Sau 5ó 5:Οc th>c thi trên tΛng loΚi máy nhΘ trình
thông dΞch M c tiêu c∀a các nhà thi#t k# Java là cho phép ng&∋i l∗p trình vi#t ch&(ng trình
m,t l.n nh&ng có th/ ch1y trên các n2n ph.n c3ng khác nhau
Biên d5ch ch&(ng trình Java
Ngày nay, Java 5:Οc sΖ dΥng r6ng rãi, không ch3 58 vi1t các ?ng dΥng trên máy cΥc b6 hay trên mΚng mà còn 58 xây d>ng các trình 5iΓu khi8n thi1t bΞ di 56ng, …
2.2 B1 JDK VÀ ECLIPSE
JDK (Java Development Kit) là b6 công cΥ cho ng:Θi phát tri8n ?ng dΥng bΣng ngôn ng9
l7p trình Java, là m6t t7p hΟp nh9ng công cΥ phưn mΓm 5:Οc phát tri8n bΠi Sun Microsystems B6 công cΥ này 5:Οc phát hành miβn phí g∆m có trình biên dΞch, trình thông dΞch, trình giúp sΖa lΝi trình chΚy applet và tài liΧu nghiên c?u
Các bΚn vào 5Ξa ch3 sau 58 tΜi b6 cài 5αt vΓ:
http://www.oracle.com/technetwork/java/javase/downloads/index.html
Eclipse là m6t phưn mΓm mã ngu∆n mΠ 5:Οc thi1t k1 58 hΝ trΟ các l7p trình viên vi1t các
?ng dΥng bΣng nhiΓu ngôn ng9 khác nhau trong 5ó có ngôn ng9 Java
Eclipse tΚo ra m6t môi tr:Θng l7p trình 5Εn giΜn, tr>c quan vΡi viΧc hΝ trΟ rΩt nhiΓu plugin (phưn thêm vào) 58 các l7p trình viên 5Εn giΜn và tiΧn ích hΕn trong viΧc l7p trình
∃8 cài 5αt Eclipse vào máy tính, 5ưu tiên phΜi cài 5αt b6 biên dΞch Java JDK, sau 5ó các bΚn tΜi b6 ngu∆n Eclipse vΓ tΛ Internet vΓ và chΚy ch:Εng trình
Trang 8- Các bΚn vào 5Ξa ch3 sau 58 tΜi Eclipse: http://www.eclipse.org/downloads/
2.3 C;U TRÚC <I4U KHI=N TRONG JAVA
2.3.1 L>nh ?i/u ki>n if-else
if (<bi u th∀c %i&u ki∋n>)
Trang 9while (<bi u th∀c %i&u ki∋n>)
2.4 TÍNH K6 THΦA VÀ <A HÌNH TRONG JAVA
2.4.1 Tính kΓ thΗa
S> k1 thΛa 5:Οc sΖ dΥng khi mu0n tΚo m6t lΡp mΡi tΛ m6t lΡp 5ã bi1t Khi 5ó, tΩt cΜ các thu6c tính và ph:Εng th?c c[a lΡp cχ 5Γu trΠ thành thu6c tính và ph:Εng th?c c[a lΡp mΡi LΡp cχ 5:Οc g+i là lΡp cha, lΡp mΡi 5:Οc g+i là lΡp con
Khai báo lΙp kΓ thΗa
Khai báo lΡp k1 thΛa 5:Οc th>c hiΧn bΠi tΛ khoá extends:
<thu8c tính> <tên l4p con> extends <tên l4p cha>
{
}
2.4.2 Tính ?a hình
NΚp chΛng: Java cho phép trong cùng m6t lΡp, có th8 khai báo nhiΓu ph:Εng th?c có cùng
tên NΚp ch∆ng là hiΧn t:Οng các ph:Εng th?c có cùng tên
<a hình: ∃a hình là viΧc triΧu g+i 51n các ph:Εng th?c nΚp ch∆ng c[a 50i t:Οng Khi m6t
ph:Εng th?c nΚp ch∆ng 5:Οc g+i, ch:Εng trình s∴ d>a vào ki8u các tham s0 và ki8u trΜ vΓ 58 g+i ph:Εng th?c c[a 50i t:Οng cho phù hΟp
2.5 BÀI T5P TH8C HÀNH
Bài t,p 2.1: Cài 5αt JDK và Eclipse 58 l7p trình ngôn ng9 Java:
Trang 10-
Cài ?∆t JDK:
Các bΚn vào 5Ξa ch3 sau 58 tΜi b6 cài 5αt vΓ:
http://www.oracle.com/technetwork/java/javase/downloads/index.html
Trang 11-
Công viΧc cài 5αt c[a bΚn lúc này ch3 là next next finish mà thôi
Download Eclipse:
Các bΚn vào URL: http://www.eclipse.org/downloads/
Sau 5ó ch+n nh: hình d:Ρi, nhΡ ch+n theo 5úng hΧ 5iΓu hành mình 5ang sΖ dΥng nhé:
Sau khi download vΓ các bΚn ch3 c−n unzip ra chΝ nào 5ó trên Φ c?ng và click 5úp vào file
eclipse.exe là có th8 chΚy 5:Οc luôn
Trang 12-
N u không ch#y %&∋c thì thi t l)p l#i bi n môi tr&∗ng nh& sau:
a BΩm chu6t phΜi vào bi8u t:Οng MyComputer trên màn hình Desktop và ch+n
“Properties” -> ch+n tab “Advanced” -> ch+n nút “Environment Variables”
b Ti1p theo chΝ “System variables” ta chon New 58 bΑt 5ưu tΚo bi1n môi tr:Θng
“JAVA_HOME”, bΚn s∴ thΩy dialog hiΧn ra 58 nh7p thông tin vào bao g∆m: Variable name (bΚn gõ vào là “JAVA_HOME”) và Variable value (là th: mΥc bΚn 5ã cài 5αt jdk tr:Ρc 5ó, thông th:Θng s∴ nΣm Π th: mΥc “C:\Program Files\Java\jdk1.7.0_25δ) sau 5ó bΚn ch+n OK
c Ti1p theo bΚn cưn c7p nh7t thông tin c[a bi1n “JAVA_HOME” vào hΧ th0ng 58 sΖ dΥng chung cho các ?ng dΥng cưn chΚy trên nΓn máy Μo JVM bΣng cách tΚi dialog c[a
“System variables” bΚn kéo thanh scroll xu0ng và tìm 51n “Path” -> ch+n nút “Edit” và
có m6t dialog hiΧn ra 58 bΚn c7p nh7t thông tin cho “Path”, tΚi phưn “Variable value” bΚn di chuy8n 51n cu0i và gõ vào “;%JAVA_HOME%\bin;” (l:u ý là dΩu “;” Π 5ưu bi1n “JAVA_HOME” s∴ không cưn n1u tr:Ρc 5ó 5ã có r∆i) -> sau 5ó bΚn ch+n các nút
“OK” Π các dialog 58 hoàn tΩt
d ∃8 xác nh7n lΚi viΧc thi1t l7p bi1n môi tr:Θng thì tΚi màn hình CMD (Terminal) bΚn dùng lΧnh: echo %JAVA_HOME%, n1u bΚn nh7n 5:Οc k1t quΜ là 5:Θng dΙn tΡi th: mΥc cài 5αt jdk là 5úng
1 ChΚy lΚi file eclipse.exe 58 chΚy ch:Εng trình
2 N1u vΙn không chΚy 5:Οc thì vào 5:Θng dΙn trong th: mΥc eclipse: eclipse\configuration\org.eclipse.osgi\.manager, xóa file: fileTableLock
3 ChΚy lΚi file eclipse.exe 58 chΚy ch:Εng trình OK
Bài t,p 2.2: Vi1t ch:Εng trình Java giΜi ph:Εng trình b7c 2 (SΖ dΥng lΧnh if else)
Bài gi7i:
- KhΠi 56ng Eclipse
- Ch+n File / New/ Java Project 58 tΚo d> án mΡi Ch+n Next
- Gõ tên Baitap2.2 vào mΥc Project Name Ch+n Next, Ch+n Finish
- Click chu6t phΜi vào d> án: Baitap2.2 phía bên trái cΖa sΦ làm viΧc, ch+n New / Class
58 tΚo lΡp
- Gõ tên lΡp là Baitap2_2 vào mΥc Name, 5ánh dΩu ch+n vào public static void main (String[] args) 58 tΚo ph:Εng th?c chính c[a lΡp
- Ch+n Finish
- Vi1t lΧnh cho ch:Εng trình nh: sau:
//Khai bao cac thu vien
Trang 13-
i mpor t java.util.Scanner;
publ i c c l as s Baitap2_2 {
//Khai bao doi tuong input cua lop Scanner nhan du lieu nhap vao
pr i vat e s t at i c Scanner i nput;
//Chuong trinh chinh
publ i c s t at i c voi d main(String[] args){
//Khoi tao doi tuong input
i nput = ne w Scanner(System.i n);
//Nhap gia tri cho he so a, b, c kieu so thuc tu ban phim
System.out.print("Nh9p a: ");
f l oat a = i nput.nextFloat();
System.out.print("Nh9p b: ");
f l oat b = i nput.nextFloat();
System.out.print("Nh9p c: ");
f l oat c = i nput.nextFloat();
//Tinh gia tri delta
System.out.println("Ph#/ng trình có 2 nghi∋m:");
System.out.println("X1 = "+(-b+Math.s qr t (delta))/(2*a));
System.out.println("X2 = "+(-b-Math.s qr t (delta))/(2*a));
} }
}
- Biên dΞch và chΚy ch:Εng trình, Ctrl + F11
Bài t,p 2.3: Vi1t ch:Εng trình Java nh7p tên và m7t khφu (t0i 5a nh7p 3 l−n) N1u nh7p 5úng
tên là “khuong”, m7t khφu là “123” thì hi8n thΞ các s0 tΛ 100 51n 200 mà chia h1t cho 3, 5 và tính tΦng các s0 5ó
Bài gi7i:
- KhΠi 56ng Eclipse
- Ch+n File / New/ Java Project 58 tΚo d> án mΡi Ch+n Next
- Gõ tên Baitap2.3 vào mΥc Project Name Ch+n Next, Ch+n Finish
Trang 14- Vi1t lΧnh cho ch:Εng trình nh: sau:
//Khai bao cac thu vien
i mpor t java.util.Scanner;
publ i c c l as s Baitap2_3 {
//Khai bao doi tuong input cua lop Scanner nhan du lieu nhap vao
pr i vat e s t at i c Scanner i nput;
//Chuong trinh chinh
publ i c s t at i c voi d main(String[] args){
//Khoi tao doi tuong input
i nput = ne w Scanner(System.i n);
//Khai bao 2 bien ten, matkhau
String ten=nul l, matkhau=nul l;
i nt dem=1;
//Thuc hien nhap ten, matkhau toi da 3 lan
whi l e(dem<=3) {
System.out.print("Nh9p tên ng#:i dùng: ");
ten = i nput.next();
System.out.print("Nh9p m9t kh<u: ");
matkhau = i nput.next();
dem=dem+1;
//Neu ten va matkhau nhap vao dung thi thoat vong lap
i f((ten.equals("khuong")) && (matkhau.equals("123")))
br e ak; }
//Khai bao bien tong
i nt tong=0;
//Thuc hien vong lap for kiem tra tung so tu 100 den 200
f or (i nt i=100; i<=200; i++) {
//Neu i thoa dieu kien thi hien thi va cong i vao bien tong
i f((i%3==0)&&(i%5==0)) {
System.out.print(i + " ");
tong=tong+i;
} }
System.out.println("\nT=ng các s∗ thoa %i&u ki∋n là: " + tong);
}
}
- Biên dΞch và chΚy ch:Εng trình, Ctrl + F11
Trang 15-
Bài t,p 2.4: Vi1t ch:Εng trình Java nh7p mΜng s0 nguyên g∆m n phưn tΖ (n là s0 nguyên nh7p
vào tΛ bàn phím) Yêu cưu:
- Ch+n File / New/ Java Project 58 tΚo d> án mΡi Ch+n Next
- Gõ tên Baitap2.4 vào mΥc Project Name Ch+n Next, Ch+n Finish
- Click chu6t phΜi vào d> án: Baitap2.4 phía bên trái cΖa sΦ làm viΧc, ch+n New / Class
//Khai bao doi tuong input cua lop Scanner nhan du lieu nhap vao
pr i vat e s t at i c Scanner i nput;
//Xay dung ham nhap gia tri theo kieu so nguyen
System.out.println("B1n ph5i nh9p s∗, hãy nh9p l1i ");
i nput.nextLine();
} }
r e t ur n (n);
}
//Xay dung ham nhap gia tri cac phan tu mang
publ i c s t at i c voi d nhapmang(i nt mang[], i nt n)
{
Trang 16//Xay dung ham xuat mang
publ i c s t at i c voi d xuatmang(i nt mang[], i nt n)
{
System.out.println("\nHi n th, m5ng:");
f or (i nt i=0; i<n; i++) {
System.out.print(mang[i] + " ");
} }
//Xay dung ham sap xep mang tang dan
publ i c s t at i c voi d sapxeptang(i nt mang[], i nt n)
i f (mang[j]<mang[i]) {
bientam=mang[j];
mang[j]=mang[i];
mang[i]=bientam;
} }
} System.out.println("\nM5ng %ã %#>c s?p x3p t≅ng dΑn.");
}
//Chuong trinh chinh
publ i c s t at i c voi d main(String [] args)
{
//Nhap so phan tu cua mang
System.out.print("Nh9p giá tr, n: ");
//Nhap gia tri can tim
System.out.print("\nNh9p giá tr, cΑn tìm: ");
i nt giatri=nhapgi at r i ();
//Duyet mang de tim phan tu dau tien bang bien giatri
f or(i nt i=0; i<n; i++) {
Trang 17-
i f(mang[i] == giatri) {
System.out.println("PhΑn tΒ %Αu tiên bΧng " + giatri + "
là phΑn tΒ th∀: " + (i+1));
br e ak; }
} }
}
- Biên dΞch và chΚy ch:Εng trình, Ctrl + F11
Bài t,p 2.5: Vi1t ch:Εng trình Java nh7p mΜng 2 chiΓu có m hàng, n c6t vΡi m, n là 2 s0
nguyên nh7p vào tΛ bàn phím Yêu cưu:
- Hi8n thΞ mΜng vΛa nh7p
- Hi8n thΞ tΦng giá trΞ tΛng hàng c[a mΜng
- Hoán vΞ hàng th? 2 và th? 3 c[a mΜng và hi8n thΞ
Bài gi7i:
- KhΠi 56ng Eclipse
- Ch+n File / New/ Java Project 58 tΚo d> án mΡi Ch+n Next
- Gõ tên Baitap2.5 vào mΥc Project Name Ch+n Next, Ch+n Finish
- Click chu6t phΜi vào d> án: Baitap2.5 phía bên trái cΖa sΦ làm viΧc, ch+n New / Class
Trang 18-
i mpor t java.util.Scanner;
publ i c c l as s Baitap2_5 {
//Khai bao doi tuong input cua lop Scanner nhan du lieu nhap vao
pr i vat e s t at i c Scanner i nput;
//Xay dung ham nhap gia tri theo kieu so nguyen
System.out.println("B1n ph5i nh9p s∗, hãy nh9p l1i ");
i nput.nextLine();
} }
r e t ur n (n);
}
//Xay dung ham nhap gia tri cac phan tu mang
publ i c s t at i c voi d nhapmang(i nt mang[][], i nt m, i nt n)
{
f or (i nt i=0; i<m; i++) {
f or (i nt j=0; j<n; j++) {
System.out.print("Nh9p mang["+i+"]["+j+"]= ");
mang[i][j]=nhapgi at r i ();
} }
}
//Xay dung ham xuat mang
publ i c s t at i c voi d xuatmang(i nt mang[][], i nt m, i nt n)
{
System.out.println("\nHi n th, m5ng:");
f or (i nt i=0; i<m; i++) {
f or(i nt j=0; j<n; j++) {
System.out.print(mang[i][j] + " ");
} System.out.println();
} }
//Xay dung ham tinh tong tung hang va hien thi
publ i c s t at i c voi d tonghang(i nt mang[][], i nt m, i nt n)
Trang 19-
tonghang=tonghang + mang[i][j];
} System.out.println("T=ng hàng " + i + " = " + tonghang);
} }
//Xay dung ham hoan vi hang 2 va hang 3
publ i c s t at i c voi d hoanvi(i nt mang[][], i nt m, i nt n)
{
i nt bientam;
f or (i nt j=0; j<n; j++) {
bientam=mang[1][j];
mang[1][j]=mang[2][j];
mang[2][j]=bientam;
} System.out.println("Hàng 2 và hàng 3 c∆a m5ng %ã hoán v,");
}
//Chuong trinh chinh
publ i c s t at i c voi d main(String [] args)
{
//Nhap so hang, so cot cua mang
System.out.print("Nh9p s∗ hàng: ");
Trang 20- Ch+n File / New/ Java Project 58 tΚo d> án mΡi Ch+n Next
- Gõ tên Baitap2.6 vào mΥc Project Name Ch+n Next, Ch+n Finish
- Click chu6t phΜi vào d> án: Baitap2.6 phía bên trái cΖa sΦ làm viΧc, ch+n New / Class
58 tΚo lΡp
- Gõ tên lΡp là Sach vào mΥc Name Ch+n Finish
- Vi1t lΧnh cho lΡp Sach nh: sau:
//Khai bao lop Sach
c l as s Sach
{
//Khai bao cac thuoc tinh
String tensach; //Ten sach
String loaisach; //Loai sach
String tacgia; //Tac gia
i nt giasach; //Gia sach
i nt masach; //Ma sach
i nt namxb; //Nam xuat ban
Trang 21Sach [] sach; //Khai bao mang sach thuoc lop Sach
i nt sachcounter; //Khai bao bien dem so luong sach trong thu vien
pr i vat e Scanner nhap;//Khai bao bien nhan gia tri nhap tu ban phim
publ i c Thuvien()
{
sachcounter = 0;
}
publ i c voi d nhapsach()
{
nhap = ne w Scanner(System.i n);
i f (sachcounter < sach.length)
{
//Khai bao mot mang sach thuoc lop Sach
sach[sachcounter] = ne w Sach();
System.out.print("Nh9p vào mã sách: ");
sach[sachcounter].masach = nhap.nextInt();
nhap.nextLine();
System.out.print("Nh9p vào tên sách: ");
sach[sachcounter].tensach = nhap.nextLine();
System.out.print("Nh9p vào tác gi5: ");
sach[sachcounter].tacgia = nhap.nextLine();
System.out.print("Nh9p vào lo1i sách: ");
sach[sachcounter].loaisach = nhap.nextLine();
System.out.print("Nh9p vào giá sách: ");
sach[sachcounter].giasach = nhap.nextInt();
System.out.print("Nh9p vào n≅m xuΦt b5n: ");
sach[sachcounter].namxb = nhap.nextInt();
Trang 22-
}
publ i c voi d timsach()
//Nhap tu hay cum tu trong ten sach cam tim
System.out.print("Nh9p vào 1 or cΓm tΗ trong tên sách cΑn tìm: "); sachName = nhap.nextLine();
//Chuyen gia tri sachName thanh chu thuong
sachName = sachName.toLowerCase();
//Lan luot tim tat ca sach trong thu vien
f or (i = 0; i < sachcounter; i++)
{
//Chuyen tat ca ten sach thanh chu thuong
tensach = sach[i].tensach.toLowerCase();
//Kiem tra xem chuoi sachName co xuat hien trong chuoi tensach hay khong
System.out.println("Danh sách sách tìm %#>c là:");
System.out.printf("\n%1$5s %2$10s %3$20s %4$15s %5$15s %6$10s
%7$10s", "STT", "Mã", "Tên sách", "Lo1i sách", "Tác gi5", "Giá sách", "N≅m xuΦt b5n");
System.out.printf("\n%1$5s %2$10s %3$20s %4$15s
%5$15s %6$10s %7$10s", i + 1, sach[i].masach, sach[i].tensach, sach[i].loaisach,
sach[i].tacgia, sach[i].giasach, sach[i].namxb);
Trang 23- {
System.out.println("Không tìm thΦy sách nào trong th# vi∋n"); }
}
//Phuong thuc hien thi thong tin sach
publ i c voi d hienthisach()
System.out.println("Danh sách sách hi∋n có là:");
System.out.printf("\n%1$5s %2$15s %3$20s %4$15s %5$15s %6$10s
%7$10s", "STT", "Mã sách", "Tên sách", "Lo1i sách", "Tác gi5", "Gía sách", "N≅m xuΦt b5n");
f or (i = 0; i < sachcounter; i++) {
System.out.printf("\n%1$5s %2$15s %3$20s %4$15s %5$15s %6$10s
%7$10s", i + 1, sach[i].masach, sach[i].tensach, sach[i].loaisach,
sach[i].tacgia, sach[i].giasach, sach[i].namxb);
LΡp này ch?a ch:Εng trình chính 58 chΚy:
- Click chu6t phΜi vào d> án: Baitap2.6 phía bên trái cΖa sΦ làm viΧc, ch+n New / Class
pr i vat e s t at i c Scanner nhap;
//Chuong trinh chinh
publ i c s t at i c voi d main(String args[]){
nhap = ne w Scanner(System.i n);
//Khai bao doi tuong newsach thuoc lop Thuvien
Thuvien newsach = ne w Thuvien();
//Khai bao doi tuong newsach co toi da 100 Sach
Trang 24- newsach.sach = ne w Sach[100];
i nt chon =0; //Khai bao bien chon
//Trong khi khong lua chon 4 Thoat
whi l e(chon !=4)
{
System.out.println("\n");
System.out.println("******* Qu5n lý th# vi∋n ********");
System.out.println("Các thao tác c∆a ch#/ng trình:");
System.out.println("1 Thêm sách");
System.out.println("2 Tìm sách");
System.out.println("3 Hi n th, sách");
System.out.println("4 Thoát");
System.out.println("**************************");
System.out.print("Nh9p vào thao tác cΑn dùng: ");
chon = nhap.nextInt();
//Xet gia tri bien chon de thuc hien chuc nang tuong ung
Trang 25-
- KhΠi 56ng Eclipse
- Ch+n File / New/ Java Project 58 tΚo d> án mΡi
- Gõ tên Baitap2.7 vào mΥc Project Name Ch+n Finish
- Click chu6t phΜi vào d> án: Baitap2.7 phía bên trái cΖa sΦ làm viΧc, ch+n New / Other / WindowBuider / Swing Designer / Application Window, ch+n Next 58 tΚo ?ng dΥng Window
- Gõ tên là PTB1 vào mΥc Name Ch+n Finish
- Ch+n thγ Design 58 thi1t k1 theo ki8u tr>c quan s∴ xuΩt hiΧn các công cΥ tr>c quan
- Ch+n Form 5ang thi1t k1, thi1t l7p thu6c tính Variable: frmptb1, thi1t l7p thu6c tính title: GiΜi ph:Εng trình b7c 1
- Click chu6t phΜi vào Form 5ang thi1t k1, ch+n Set layout / Absolute layout
- TΚo 1 JLable sang Form 5ang thi1t k1, thi1t l7p thu6c tính text: GiΜi ph:Εng trình b7c 1: ax + b = 0, thay 5Φi thu6c tính font: Bold, cη ch9 16
- L−n l:Οt tΚo 3 JLable, thi1t l7p thu6c tính text t:Εng ?ng: Nh7p a, Nh7p b, K1t quΜ
- L−n l:Οt tΚo 3 JTextField, 5αt name t:Εng ?ng: textFielda, textFieldb, textFieldketqua
- L−n l:Οt tΚo 3 JButton, thi1t l7p thu6c tính name t:Εng ?ng là: btngiaipt, btnlamlai, btnthoat; thi1t l7p thu6c tính text t:Εng ?ng: GiΜi PT, Làm lΚi, Thoát
- Click 5ôi vào JButton btngiaipt gõ 5oΚn lΧnh sau:
publ i c voi d actionPerformed(ActionEvent arg0) {
- Click 5ôi vào JButton btnlamlai gõ 5oΚn lΧnh sau:
publ i c voi d actionPerformed(ActionEvent arg0) {
textFielda.setText(nul l);
textFieldb.setText(nul l);
textFieldketqua.setText(nul l);
Trang 26- }
- Click 5ôi vào JButton btnthoat gõ 5oΚn lΧnh sau:
publ i c voi d actionPerformed(ActionEvent arg0) {
System.e xi t (0);
}
Bài t,p 2.8: Vi1t ch:Εng trình giΜi ph:Εng trình b7c 2 nh: hình bên d:Ρi:
H:Ρng dΙn tham khΜo:
- KhΠi 56ng Eclipse Ch+n File / New/ Java Project 58 tΚo d> án mΡi
- Gõ tên Baitap2.8 vào mΥc Project Name Ch+n Finish
- Click chu6t phΜi vào d> án: Baitap2.8 phía bên trái cΖa sΦ làm viΧc, ch+n New / Other / WindowBuider / Swing Designer / Application Window, ch+n Next 58 tΚo ?ng dΥng Window
- Gõ tên là PTB2 vào mΥc Name Ch+n Finish
- Ch+n thγ Design 58 thi1t k1 theo ki8u tr>c quan s∴ xuΩt hiΧn các công cΥ tr>c quan
- Ch+n Form 5ang thi1t k1, thi1t l7p thu6c tính Variable: frmptb2, thi1t l7p thu6c tính title: GiΜi ph:Εng trình b7c 2
- Click chu6t phΜi vào Form 5ang thi1t k1, ch+n Set layout / Absolute layout
- TΚo 1 JLable sang Form 5ang thi1t k1, thi1t l7p thu6c tính text: GiΜi ph:Εng trình b7c 2: ax^2 + bx + c = 0, thay 5Φi thu6c tính font: Bold, cη ch9 16
- L−n l:Οt tΚo 4 JLable, thi1t l7p thu6c tính text là: Nh7p a, Nh7p b, Nh7p c, K1t quΜ
- L−n l:Οt tΚo 4 JTextField, 5αt name t:Εng ?ng: textFielda, textFieldb, textFieldc, textFieldketqua
- L−n l:Οt tΚo 3 JButton, thi1t l7p thu6c tính name t:Εng ?ng là: btngiaipt, btnlamlai, btnthoat; thi1t l7p thu6c tính text t:Εng ?ng: GiΜi PT, Làm lΚi, Thoát
- Click 5ôi vào JButton btngiaipt gõ 5oΚn lΧnh sau:
Trang 28-
CH2&NG 3:
ΜNG DΝN - PIPE
3.1 GI%I THI U V4 PIPE
- Ηng dΙn PIPE là m6t tiΧn ích 5:Οc hΝ trΟ trong hưu h1t các ngôn ng9 l7p trình v7n hành trên các hΧ th0ng 5a nhiΧm
- Ηng dΙn PIPE cho phép hai quá trình nΣm trên cùng m6t máy có th8 trao 5Φi d9 liΧu vΡi nhau
- ιng dΥng theo ki1n trúc Client- Server bΣng cách sΖ dΥng hai 0ng dΙn
o PipedInputStream readId = new PipedInputStream();
2 TΚo 5ưu ghi:
o PipedOutputStream writeId = new PipedOutputStream();
Trang 29o PipedInputStream readId = new PipedInputStream();
2 TΚo 5ưu ghi và n0i vào 5ưu 5+c 5ã có:
o PipedOutputStream writeId = new PipedOutputStream(readId);
3.3 BÀI T5P TH8C HÀNH
Bài t,p 3.1: Xây d>ng m6t ?ng dΥng có tên là PipeEcho mô phΤng dΞch vΥ phΜn h∆i thông tin
58 minh h+a cách sΖ dΥng Pipe làm ph:Εng tiΧn giao ti1p gi9a các Thread trong m6t ?ng dΥng
Trong ?ng dΥng này Client và Server là hai Thread thu6c lΡp PipedEchoClient và PipedEchoServer ViΧc trao 5Φi thông tin gi9a client và server 5:Οc th>c hiΧn thông qua 2 Pipe (cwPipe-srPipe) và (swPipe-crPipe)
PipedEchoClient nh7n các ký t> tΛ bàn phím, gΠi chúng sang PipedEchoServer và chΘ nh7n các ký t> gΠi vΓ tΛ PipedEchoServer 58 in ra màn hình PipedEchoServer chΘ nh7n tΛng
ký t> tΛ PipedEchoClient, 5Φi ký t> nh7n 5:Οc thành ký t> hoa và gΠi ng:Οc vΓ PipedEchoClient
H:Ρng dΙn tham khΜo:
- KhΠi 56ng Eclipse
- Ch+n File / New/ Java Project 58 tΚo d> án mΡi
- Gõ tên Baitap3.1 vào mΥc Project Name Ch+n Finish
Trang 30-
- Click chu6t phΜi vào d> án: Baitap3.1 phía bên trái cΖa sΦ làm viΧc, ch+n New / Class
58 tΚo lΡp, 5αt tên lΡp là: PipedEchoServer
- Vi1t lΧnh cho lΡp PipedEchoServer nh: sau:
i mpor t java.io.*;
publ i c c l as s PipedEchoServer e xt e nds Thread {
PipedInputStream readPipe; //Tao doi tuong doc tu PIPE
PipedOutputStream writePipe; //Tao doi tuong ghi vao PIPE
PipedEchoServer(PipedInputStream readPipe, PipedOutputStream writePipe){
ch = Character.t oUpper Cas e((c har)ch); //chuyen ch tu chu
thuong thanh chu hoa
writePipe.write(ch); //ghi ch vao lai PIPE
}
c at c h (IOException ie) {
System.out.println("Echo Server Error: "+ie );
} }
}
}
- Click chu6t phΜi vào d> án: Baitap3.1 phía bên trái cΖa sΦ làm viΧc, ch+n New / Class
58 tΚo lΡp, 5αt tên lΡp là: PipedEchoClient
- Vi1t lΧnh cho lΡp PipedEchoClient nh: sau:
writePipe.write(ch); //ghi ch vao PIPE
ch = readPipe.read(); //doc ch tu PIPE
Trang 31- System.out.print((c har)ch); //hien thi ch de chuyen doi thanh chu hoa ra man hinh
- Click chu6t phΜi vào d> án: Baitap3.1 phía bên trái cΖa sΦ làm viΧc, ch+n New / Class
58 tΚo lΡp, 5αt tên lΡp là: PipedEcho
- Vi1t lΧnh cho lΡp PipedEcho nh: sau:
i mpor t java.io.*;
publ i c c l as s PipedEcho {
publ i c s t at i c voi d main(String argv[]){
t r y{
//Tao doi tuong doc, ghi vao Pipe cho Client
PipedOutputStream cwPipe = ne w PipedOutputStream();
PipedInputStream crPipe = ne w PipedInputStream();
PipedOutputStream swPipe = ne w PipedOutputStream(crPipe); PipedInputStream srPipe = ne w PipedInputStream(cwPipe);
PipedEchoServer server = ne w PipedEchoServer(srPipe,swPipe); PipedEchoClient client = ne w PipedEchoClient(crPipe,cwPipe); } c at c h(IOException ie) {
System.out.println("Pipe Echo Error:"+ie);
Bài t,p 3.2: Vi1t ch:Εng trình theo ki8u PIPE vΡi yêu cưu:
- TΛ Client gõ 1 trong các s0 tΛ 1=> 9 thì t:Εng ?ng Server s∴ gΠi các kí t> tΛ A=>J 51n Client và hi8n thΞ ra màn hình Ví dΥ: Gõ 1 => Hi8n thΞ A, gõ 3 => Hi8n thΞ C
Trang 32-
CH2&NG 4:
L5P TRÌNH SOCKET
4.1 GI%I THI U V4 SOCKET
Socket là m6t giao diΧn l7p trình ?ng dΥng (API-Application Programming Interface) Socket cho phép thi1t l7p các kênh giao ti1p mà hai 5ưu kênh 5:Οc 5ánh dΩu bΠi hai cΦng (port), thông qua các cΦng này m6t quá trình có th8 nh7n và gΠi d9 liΧu vΡi các quá trình khác
Có hai ki8u socket:
1 Socket ki8u AF_UNIX ch3 cho phép giao ti1p gi9a các quá trình trong cùng m6t máy tính
2 Socket ki8u AF_INET cho phép giao ti1p gi9a các quá trình trên nh9ng máy tính khác nhau trên mΚng
4.2 SΜ HI U C3NG (PORT NUMBER) CΡA SOCKET
S0 hiΧu cΦng gán cho Socket phΜi duy nhΩt trên phΚm vi máy tính 5ó, có giá trΞ trong khoΜng tΛ 0 51n 65535 (16 bits)
Trong 5ó, các cΦng tΛ 1 51n 1023 5:Οc g+i là cΦng hΧ th0ng 5:Οc dành riêng cho các quá trình c[a hΧ th0ng
Trang 33- Các cΦng mαc 5Ξnh c[a 1 s0 dΞch vΥ mΚng thông dΥng:
Trang 34-
4.4 SOCKET D2%I NGÔN NG9 JAVA
• Java hΝ trΟ l7p trình mΚng thông qua các lΡp trong gói java.net
• InetAddress: LΡp này quΜn lý 5Ξa ch3 Internet bao g∆m 5Ξa ch3 IP và tên máy tính
• Socket: HΝ trΟ các ph:Εng th?c liên quan 51n Socket cho ch:Εng trình Client Π ch1 56
Bài t,p 4.1: Xây d>ng ch:Εng trình Client Π ch1 56 có n0i k1t Ch:Εng trình TCPEchoClient
s∴ n0i k1t 51n EchoServer Π ch1 56 có n0i k1t, l−n l:Οt gΠi 51n Echo Server 10 ký t> tΛ ‘0’ 51n '9', chΘ nh7n k1t quΜ trΜ vΓ và hi8n thΞ chúng ra màn hình
Các b:Ρc tΦng quát:
1 MΠ m6t socket n0i k1t 51n server 5ã bi1t 5Ξa ch3 IP (hay tên miΓn) và s0 hiΧu cΦng
2 LΩy InputStream và OutputStream gán vΡi Socket
3 Tham khΜo Protocol c[a dΞch vΥ 58 5Ξnh dΚng 5úng d9 liΧu trao 5Φi vΡi Server
4 Trao 5Φi d9 liΧu vΡi Server nhΘ vào các InputStream và OutputStream
5 ∃óng Socket tr:Ρc khi k1t thúc ch:Εng trình
H:Ρng dΙn tham khΜo:
- KhΠi 56ng Eclipse
- Ch+n File / New/ Java Project 58 tΚo d> án mΡi
- Gõ tên Baitap4.1 vào mΥc Project Name Ch+n Finish
- Click chu6t phΜi vào d> án: Baitap4.1 phía bên trái cΖa sΦ làm viΧc, ch+n New / Class
58 tΚo lΡp, 5αt tên lΡp là: TCPEchoClient
- Vi1t lΧnh cho lΡp TCPEchoClient nh: sau:
i mpor t java.io.*;
i mpor t java.net.Socket;
publ i c c l as s TCPEchoClient {