baithuchanh_5207

26
Bài 1 S L C V NGÔN NG JAVA Ơ ƯỢ - Làm quen v i môi tr ng IDE (Jubuider 9.0). ườ - Cài đ t các ch ng trình ng d ng đ n gi n v ngôn ng java. ươ ơ + Các bài t p v c u trúc đi u khi n. + Các bài t p v ngo i l . + Các bài t p v l p. ềớ + Các bài t p v I/O. I. 1. C u trúc đi u khi n. I.1.1. Bài t p m u: // khai báo th vi n nh p xu t d li u. ư import java.io.*; public class DemSo { private String s; // Xây d ng ph ng th c nh p chu i t bàn phím ươ public void nhap() { try { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); System.out.println("Nhap mot chuoi tu ban phim"); s=br.readLine(); }catch(IOException ex) {} } // Xây d ng m t hàm có d li u tr v là double đ đ m t ng các s (0->9) xu t hi n ế trong chu i. public double xuLy() { double dem=0; for(int i=0;i<s.length();i++) { if(kiemTra((int)s.charAt(i))==true) {

Upload: le-viet

Post on 05-Apr-2015

345 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: baithuchanh_5207

Bài 1

S L C V NGÔN NG JAVAƠ ƯỢ Ề Ữ- Làm quen v i môi tr ng IDE (Jubuider 9.0).ớ ườ- Cài đ t các ch ng trình ng d ng đ n gi n v ngôn ng java.ặ ươ ứ ụ ơ ả ề ữ

+ Các bài t p v c u trúc đi u khi n.ậ ề ấ ề ể+ Các bài t p v ngo i l .ậ ề ạ ệ+ Các bài t p v l p.ậ ề ớ+ Các bài t p v I/O.ậ ềI. 1. C u trúc đi u khi n.ấ ề ể

I.1.1. Bài t p m u:ậ ẫ// khai báo th vi n nh p xu t d li u.ư ệ ậ ấ ữ ệimport java.io.*;

public class DemSo {

private String s;

// Xây d ng ph ng th c nh p chu i t bàn phímự ươ ứ ậ ỗ ừ public void nhap()

{

try

{

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

System.out.println("Nhap mot chuoi tu ban phim");

s=br.readLine();

}catch(IOException ex)

{}

}

// Xây d ng m t hàm có d li u tr v là double đ đ m t ng các s (0->9) xu t hi nự ộ ữ ệ ả ề ể ế ố ố ấ ệ

trong chu i.ỗ public double xuLy()

{

double dem=0;

for(int i=0;i<s.length();i++)

{

if(kiemTra((int)s.charAt(i))==true)

{

Page 2: baithuchanh_5207

dem++;

}

}

return dem;

}

// Xây d ng hàm có giá tr tr v là true và false đ ki m tra giá tr nh p vào có n mự ị ả ề ể ể ị ậ ằ

trong kho ng s hay không (ký t 0->9 trong b ng mã ASCII có giá tr ki u int là 48ả ố ự ả ị ể

->57).

public boolean kiemTra(int x)

{

if((x>47)&&(x<58))

return true;

else

return false;

}

public void xuLyCT()

{

int dem0=0;

int dem1=0;

int dem2=0;

int dem3=0;

int dem4=0;

int dem5=0;

int dem6=0;

int dem7=0;

int dem8=0;

int dem9=0;

for(int i=0; i<s.length();i++)

{

char c = s.charAt(i);

switch(c)

{

case '0':dem0++; break;

case '1':dem1++; break;

case '2':dem2++; break;

case '3':dem3++; break;

Page 3: baithuchanh_5207

case '4':dem4++; break;

case '5':dem5++; break;

case '6':dem6++; break;

case '7':dem7++; break;

case '8':dem8++; break;

case '9':dem9++; break;

}

}

System.out.println("So lan xuat hien so 0 co trong chuoi la: \t"+ dem0);

System.out.println("So lan xuat hien so 1 co trong chuoi la: \t"+ dem1);

System.out.println("So lan xuat hien so 2 co trong chuoi la: \t"+ dem2);

System.out.println("So lan xuat hien so 3 co trong chuoi la: \t"+ dem3);

System.out.println("So lan xuat hien so 4 co trong chuoi la: \t"+ dem4);

System.out.println("So lan xuat hien so 5 co trong chuoi la: \t"+ dem5);

System.out.println("So lan xuat hien so 6 co trong chuoi la: \t"+ dem6);

System.out.println("So lan xuat hien so 7 co trong chuoi la: \t"+ dem7);

System.out.println("So lan xuat hien so 8 co trong chuoi la: \t"+ dem8);

System.out.println("So lan xuat hien so 9 co trong chuoi la: \t"+ dem9);

}

// Xây d ng hàm main đ th c thi các ph ng th c, hàm có trong l pự ể ự ươ ứ ớ public static void main(String[]args) throws IOException

{

// Bi n dc thu c ki u DemSo đ g i đ n các ph ng th c, thu c tính có trong l p.ế ộ ể ể ọ ế ươ ứ ộ ớ DemSo dc = new DemSo();

dc.nhap();

System.out.println("TONG CAC SO XUAT HIEN TRONG CHUOI LA \t"+

dc.xuLy());

dc.xuLyCT();

}

}

I.1.2. Bài t p:ậCâu 1: Tính t ng s ch n, l .ổ ố ẵ ẻVí d : Khi nh p vào s 6 thì t ng l là 1+3+5=9, T ng ch n là 2+ 4+6=12.ụ ậ ố ổ ẻ ổ ẵCâu 2: In ra 15 s Fibonacci đ u tiên ( Công th c c a Fibonacci fib(0) = 0;fib(1) = 1;ố ầ ứ ủ

fib(n) = fib(n-2) + fib(n-1); n>=2 ).

Câu 3. Nh p vào m t s nguyên (n) sau đó in ra các s nguyên t trong kho ng tậ ộ ố ố ố ả ừ

1=>n.

Câu 4: Nh p đ dài 3 c nh c a m t tam giác. Thông báo tam giác đó là tam giác đ u,ậ ộ ạ ủ ộ ề

vuông cân, cân, hay tam giác th ng.ườ

Page 4: baithuchanh_5207

Câu 5: Cho m t s t nhiên N b t kỳ đ c nh p vào t bàn phím. Tính t ngộ ố ự ấ ượ ậ ừ ổS = 1+ 1/1+2+ 1/1+2+3….+ 1/(1+2+3. . N);

Câu 6: Nh p vào hai chu i s1, s2 sau đó đ m s l n chu i s2 xu t hi n trong chu i s1.ậ ỗ ế ố ầ ỗ ấ ệ ỗCâu 7: Nh p vào ba xâu s1, s2, s3 sau đó thay th t t c các v trí xu t hi n c a s2 trongậ ế ấ ả ị ấ ệ ủ

xâu s1 b ng xâu s3.ằCâu 8: Nh p m t xâu s và ki m tra xâu đó có ph i xâu đ i x ng không?ậ ộ ể ả ố ứCâu 9: Nh p vào m t xâu ký t sau đó chu n hoá xâu này theo quy t c sau:ậ ộ ự ẩ ắ

- Đ u và cu i xâu không đ c ch a d u cáchầ ố ượ ứ ấ- Gi a các t không th có nhi u h n 1 d u cáchữ ừ ể ề ơ ấ- Đ u các t trong xâu ph i là ký t hoa ầ ừ ả ự- Các ký t không ph i là ký đ u tiên c a m t t ph i là ch th ng.ự ả ầ ủ ộ ừ ả ữ ườ

Câu 10: Hãy nh p m ng m t chi u a[] có n ph n t t bàn phímậ ả ộ ề ầ ử ừ

- Xây d ng ph ng th c tính t ng c a m ng.ự ươ ứ ổ ủ ả- Xây d ng ph ng th c tính t ng các giá tr ch n có trong m ng.ự ươ ứ ổ ị ẵ ả- Xây d ng ph ng th c đ m s l n xu t hi n c a x có trong m ng. ự ươ ứ ế ố ầ ấ ệ ủ ả- Xây d ng ph ng th c s p x p các ph n t trong m ng thành dãy tăng d n.ự ươ ứ ắ ế ầ ử ả ầ- Xây d ng ph ng th c hi n các ph n t c a m ng.ự ươ ứ ệ ầ ử ủ ả

Câu 11: Hãy nh p m ng 2 chi u a[n][m] có n s hàng, m s c t t bàn phím.ậ ả ề ố ố ộ ừ- Xây d ng ph ng th c tính t ng c a m ng.ự ươ ứ ổ ủ ả- Xây d ng ph ng th c tính t ng các hàng, các c t.ự ươ ứ ổ ộ- Xây d ng ph ng th c tính t ng đ ng chéo chính, đ ng chéo ph .ự ươ ứ ổ ườ ườ ụ- Xây d ng ph ng th c hi n các ph n t m ng theo ma tr n.ự ươ ứ ệ ầ ử ả ậ

I.2. X lý ngo i l :ử ạ ệI.2. 1 Bài t p m u:ậ ẫ Tính t ng 2 s a, b đ c nh p t bàn phím. Yêu c u x lý các ngo i l có th x yổ ố ượ ậ ừ ầ ử ạ ệ ể ả

ra.

// Tri n khai th vi n nh p xu tể ư ệ ậ ấimport java.io.*;

// T o l p tính t ngạ ớ ổpublic class TinhTong

{

public static void main(String[]args)

{

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

float a=0, b=0, tong;

try

{

System.out.println(" Ban hay nhap gia tri cua a ");

a = Float.parseFloat(br.readLine());

Page 5: baithuchanh_5207

System.out.println(" Ban hay nhap gia tri cua b ");

b=Float.parseFloat(br.readLine());

// B t ngo i l trong quá trình nh p d li u t bàn phímắ ạ ệ ậ ữ ệ ừ }catch(IOException ex)

// In ra màn hình thông tin b l i trong quá trình nh pị ỗ ậ

{

System.out.println( ex.getMessage());

}

// B t ngo i l khi không th chuy n ki u chu i thành ki u sắ ạ ệ ể ể ể ỗ ể ố catch(NumberFormatException nfe)

// In ra màn hình thông tin b l i trong quá trình chuy n ki uị ỗ ể ể {

System.out.println( nfe.getMessage());

}

tong =a+b;

System.out.println( a + " + "+ b +":= \t"+ tong);

}

}

I.2.2. Bài t p:ậCâu 1: Vi t ch ng trình cho phép tính giá tr c a bi u th c:ế ươ ị ủ ể ứ

A =

Yêu c u x lý các ngo i l có th x y ra.ầ ử ạ ệ ể ảCâu 2: Vi t ch ng trình cho phép t o m t m ng 2 chi u c mxn v i m,n nh p t bànế ươ ạ ộ ả ề ỡ ớ ậ ừ

phím. Xây d ng ph ng th c hi n th d li u trong m ng. Cài đ t các x lý ngo i lự ươ ứ ệ ị ữ ệ ả ặ ử ạ ệ

c n thi t.ầ ếI. 3. H ng đ i t ng:ướ ố ượI.3.1. Bài t p m u:ậ ẫ// Khai báo th vi n nh p xu t d li u.ư ệ ậ ấ ữ ệimport java.io.*;

// Khai báo th vi n collection đ t p h p đ i t ng (ArrayList, List, Date. . .)ư ệ ể ậ ợ ố ượimport java.util.*;

// Xây d ng m t l p SinhVienự ộ ớpublic class SinhVien {

// Khai báo các thu c tính c a l p (maSV, tenSV).ộ ủ ớ

Page 6: baithuchanh_5207

private String maSV;

private String tenSV;

//bi n ds thu c ki u d li u ArrayList đ t p h p các đ i t ng SinhVien đ t o thànhế ộ ể ữ ệ ể ậ ợ ố ượ ể ạ

m t danh sách (bi n ds có th thêm ho c xóa m t đ i t ng trong nó)ộ ế ể ặ ộ ố ượ ArrayList ds = new ArrayList();

// Xây d ng ph ng th c kh i t o không có đ i s .ự ươ ứ ở ạ ố ố public SinhVien()

{ }

// Xây d ng ph ng th c kh i t o có đ i s truy n vàoự ươ ứ ở ạ ố ố ề public SinhVien(String maSV, String tenSV)

{

this.maSV=maSV;

this.tenSV=tenSV;

}

// Xây d ng ph ng th c đ nh p n sinh viên vào trong ds.ự ươ ứ ể ậpublic void nhap()

{

try

{

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

System.out.println("Nhap so sinh vien");

int n = Integer.parseInt(br.readLine());

for(int i=0;i<n; i++)

{

System.out.println("Nhap maSV "+ i);

maSV=br.readLine();

System.out.println("Nhap tenSV "+ i);

tenSV=br.readLine();

SinhVien sv = new SinhVien(maSV,tenSV);

ds.add(sv);

}

}catch(IOException ex)

{}

catch(NullPointerException npe)

{}

}

// Xây d ng ph ng th c hi n thông tin c a sinh viên có trong ds.ự ươ ứ ệ ủ public void hien()

Page 7: baithuchanh_5207

{

System.out.println("STT \t"+ "MA SINH VIEN \t"+ " TEN SINH VIEN \t");

for(int i=0; i<ds.size();i++)

{

SinhVien sv =(SinhVien)ds.get(i);

System.out.println(i+ " \t"+ sv.maSV+ " \t\t "+ sv.tenSV);

}

}

// Xây d ng ph ng th c tìm m t sinh viên có trong danh sách sinh viên hay khôngự ươ ứ ộ public void tim(String s)

{

boolean kt=false;

for(int i=0; i<ds.size(); i++)

{

SinhVien sv = (SinhVien)ds.get(i);

sv.tenSV=sv.tenSV.trim();

String ten=sv.tenSV.substring(sv.tenSV.length()-s.length());

if(s.equals(ten))

{

System.out.println("SINH VIEN "+ s + " CO TRONG DANH SACH VA CO MA SO

\t"+ sv.maSV);

kt=true;

}

}

if(kt==false)

{

System.out.println("SINH VIEN "+ s + " KHONG CO TRONG DANH SACH");

}

}

// Xây d ng ph ng th c main đ th c thi các ph ng th c có trong l pự ươ ứ ể ự ươ ứ ớ public static void main(String[]args)

{

SinhVien sv = new SinhVien();

sv.nhap();

sv.hien();

String s ="Bien";

sv.tim(s);

}

Page 8: baithuchanh_5207

I.3.2. Bài t pậCâu 1

a) Xây d ng l p ự ớ Stack đ mô ph ng m t Stack (gi thi t m i ph n t c a stackể ỏ ộ ả ế ỗ ầ ử ủ

là m t s nguyên), bao g m:ộ ố ồ- Hàm t o Stack(int n) đ kh i t o Stack có t i đa n ph n tạ ể ở ạ ố ầ ử- Ph ng th c isEmpty đ ki m tra xem Stack có ph n t nào hay không?ươ ứ ể ể ầ ử- Ph ng th c isFull đ ki m tra xem Stack đã đ y hay ch a?ươ ứ ể ể ầ ư- Ph ng th c push đ thêm m t ph n t vào Stackươ ứ ể ộ ầ ử- Ph ng th c pop đ l y m t ph n t ra kh i Stackươ ứ ể ấ ộ ầ ử ỏ

b) Vi t m t đo n ch ng trình đ ki m tra l p Stack v a t o b ng cách:ế ộ ạ ươ ể ể ớ ừ ạ ằ- T o ra m t Stack có s ph n t t i đa là 5ạ ộ ố ầ ử ố- Tr c khi đ a các ph n t vào Stack, hãy ki m tra xem Stack có đang r ng, đ y hayướ ư ầ ử ể ỗ ầ

không?

- Đ a ph n t 5 vào ngăn x p, sau đó ki m tra xem ngăn x p có đ y, r ng hay không?ư ầ ử ế ể ế ầ ỗ- Đ a ti p các ph n t 1, 6, 8, 9 vào ngăn x p, sau đó l i ki m tra l i xem ngăn x pư ế ầ ử ế ạ ể ạ ế

đ y, r ng hay không?ầ ỗCâu 2:

S d ng l p Stack đ c vi t trong Bài 1 đ vi t ch ng trình chuy n m t s tử ụ ớ ượ ế ể ế ươ ể ộ ố ừ

h c s 10 sang h c s : 2, 8, 16, m t c s b t kỳ b ng cách s d ng phép toán chiaệ ơ ố ệ ơ ố ộ ơ ố ấ ằ ử ụ

liên ti p.ếBài 3:

Xây d ng l p PhanSo đ th c hi n các phép toán trên phân s , bao g m:ự ớ ể ự ệ ố ồ- Hàm t o PhanSo() đ kh i t o phân s có t s b ng 0 và m u s b ng 1.ạ ể ở ạ ố ử ố ằ ẫ ố ằ- Hàm t o PhanSo(int ts, int ms) đ kh i t o phân s có t s b ng ts và m u s b ngạ ể ở ạ ố ử ố ằ ẫ ố ằ

ms.

- Ph ng th c “cong”, “tru”, “nhan”, “chia” đ th c hi n vi c c ng , tr , nhân, chia haiươ ứ ể ự ệ ệ ộ ừ

phân s .ố- Ph ng th c “nghichDao”, “doiDau”, “toiGian” đ th c hi n vi c ngh ch đ o, đ iươ ứ ể ự ệ ệ ị ả ổ

d u và t i gi n m t phân s .ấ ố ả ộ ố- Ph ng th c “soSanhBang”, “lonHon”, “nhoHon”… đ th c hi n vi c so sánh haiươ ứ ể ự ệ ệ

phân s .ố- Ph ng th c “nhap” dùng đ nh p phân s t bàn phím.ươ ứ ể ậ ố ừI.4. Các bài t p v I/O.ậ ềI.4.1. Bài t p m u:ậ ẫCâu 1: Hãy sao chép file E:\\bien.txt sang D:\\bien.txt.

\\ Khai báo th vi n nh p xu t.ư ệ ậ ấimport java.io.*;

// Xây d ng l p CopyFileự ớpublic class CopyFile

Page 9: baithuchanh_5207

{

// Xây d ng ph ng th c xuLy() đ th c hi n đ c và ghi file s d ng lu ng byte làự ươ ứ ể ự ệ ọ ử ụ ồ

(FileInputStream, FileOuputStream)

public static void xuLy() throws IOException

{

FileInputStream fis;

FileOutputStream fos;

try

{

// bi n fis s đ c file bien.txt có trong Eế ẽ ọ ổ fis = new FileInputStream("E:\\bien.txt");

// bi n fos s t o ra file bien.txt D đ l u d li u đ c đ c file bien.txt E.ế ẽ ạ ở ổ ể ư ữ ệ ọ ượ ở ở ổ fos = new FileOutputStream("D:\\bien.txt");

int x;

// Đ c d li u trong fis cho đ n =-1 hay h t file.ọ ữ ệ ế ế while ( (x = fis.read()) != -1)

{

// fos ghi t ng byte d li u nh n đ c vào file bien.txt trong D.ừ ữ ệ ậ ượ ổ fos.write(x);

fos.flush();

}

System.out.println("Sao chep file thanh cong");

// Đóng lu ng ồ fos.close();

fis.close();

}catch(FileNotFoundException fnfe)

{}

}

// Xây d ng ph ng th c main đ g i đ n ph ng th c sao chép file.ự ươ ứ ể ọ ế ươ ứpublic static void main(String[]args) throws IOException

{

xuLy();

}

}

Câu 2: Hãy nh p 3 s nguyên t bàn phím vào trong t p tin Tong.txt. Đ c 3 s t t p tinậ ố ừ ệ ọ ố ừ ệ

Tong.txt và tình t ng c a 3 s đó r i ghi k t qu vào dòng ti p theo trong t p tin.ổ ủ ố ồ ế ả ế ệ// Khai báo th vi n nh p xu t ư ệ ậ ấimport java.io.*;

Page 10: baithuchanh_5207

// Xây d ng l p Tongự ớpublic class Tong {

// Xây d ng ph ng th c main đ th c thi các ph ng th c trong l p Tongự ươ ứ ể ự ươ ứ ớ public static void main(String[]args)throws IOException, FileNotFoundException

{

tinhTong();

}

// Xây d ng ph ng th c tinhTong() đ ghi và đ c d li u ự ươ ứ ể ọ ữ ệ public static void tinhTong()throws IOException, FileNotFoundException

{

\\ Bi n pw thu c ki u d li u PrintWriter đ ghi d li u dùng lu ng ký t .ế ộ ể ữ ệ ể ữ ệ ồ ự PrintWriter pw = new PrintWriter(new FileOutputStream("D:\\Tong.txt"));

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

for (int i = 0; i < 3; i++) {

System.out.println("So thu " + i);

int n = Integer.parseInt(br.readLine());

pw.print(n);

pw.print(" ");

pw.flush();

}

// Bi n dis thu c ki u d li u DataInputStream đ c lu ng d li u nh phân (M t sế ộ ể ữ ệ ọ ồ ữ ệ ị ộ ố

ki u d li u nguyên th y nh int, float, long . .) ể ữ ệ ủ ư DataInputStream dis = new DataInputStream(new FileInputStream(

"D:\\dayso2.txt"));

char[] c = new char[dis.available()];

int x;

int i = 0;

int tong = 0;

while ( (x = dis.read()) != -1)

{

c[i] = (char) x;

i++;

}

String s = new String(c);

String[] s1 = s.split(" ");

for(int j=0;j<s1.length;j++)

{

tong+=Integer.parseInt(s1[j]);

}

Page 11: baithuchanh_5207

pw.println();

pw.println(tong);

pw.flush();

}

}

I.4.2. Bài t pậCâu 1: Nh p vào m t dãy s , ghi d y s này ra t p “dayso.dat”. Đ c l i d y s này tậ ộ ố ẫ ố ệ ọ ạ ẫ ố ừ

t p đ tìm t t c các s nguyên t trong d y này và ghi ra t p “daynn.dat”ệ ể ấ ả ố ố ẫ ệCâu 2: Cho m t t p văn b n có kích th c nh , vi t ch ng trình ki m tra xem trongộ ệ ả ướ ỏ ế ươ ể

t p này có ch a xâu s (cho tr c) hay không?ệ ứ ướ+ Nh p vào m t dãy s . ghi d y s này ra t p tin, sau đó tách t p này thành hai t p,ậ ộ ố ẫ ố ệ ệ ệ

m t t p ch a toàn các ph n t ch n, t p còn l i ch a toàn các ph n t l .ộ ệ ứ ầ ử ẵ ệ ạ ứ ầ ử ẻCâu 3: Tìm các s Fibonaci nh h n m t s n (cho tr c)ố ỏ ơ ộ ố ướ

+ Ghi các s tìm đ c ra t p theo đ nh d ng nh sau:ố ượ ệ ị ạ ư- Hàng đ u tiên c a t p ghi s n ầ ủ ệ ố- Hàng th 2 c a t p l n l t ghi s tìm đ c, các s này đ c cách nhau b iứ ủ ệ ầ ượ ố ượ ố ượ ỏ

m t d u cáchộ ấCâu 4:

+ Ghi ma tr n này ra t p mt.dat theo quy t c sau:ậ ệ ắ- Hàng đ u tiên c a t p ghi s hàng c a ma tr nầ ủ ệ ố ủ ậ- Hàng th 2 c a t p ghi s c t c a ma tr nứ ủ ệ ố ộ ủ ậ- Các hàng ti p theo m i hàng ghi m t hàng t ng c a ma tr nế ỗ ộ ươ ủ ậ+ Đ c l i ma tr n này t t p mt.datọ ạ ậ ừ ệ

I.5. Các bài t p v lu ng (Thread).ậ ề ồI.5.1 Bài t p m u:ậ ẫ

Page 12: baithuchanh_5207

II. PIPEII.1.Bài t p m u.ậ ẫCâu 1: Xây d ng ng d ng PipedEcho.ự ứ ụ

- S d ng Pipe làm ph ng ti n giao ti p gi a Client và Server.ử ụ ươ ệ ế ữ- Server là m t thread th c thi song song v i client.ộ ự ớ- Nh p các ký t t bàn phím và g i cho Server và hi n th k t qu nh n đ c raậ ự ừ ở ệ ị ế ả ậ ượ

màn hình.

- Server nh n đ c ký t và tăng m i ký t lên 1 đ n v r i g i v cho Client.ậ ượ ự ỗ ự ơ ị ồ ở ề* Ch ng trình Server.ươ// Khai báo th vi n nh p xu t d li u.ư ệ ậ ấ ữ ệ import java.io.*;

// Xây d ng l p PipedEchoServer k th a các ph ng th c và thu c tính c a l pự ớ ế ừ ươ ứ ộ ủ ớ

Thread

public class PipedEchoServer extends Thread

{

//Bi n readPipe thu c ki u d li u c a PipedInputStream dùng đ đ c d li u trên ngế ộ ể ữ ệ ủ ể ọ ữ ệ ố

d n, writePipe thu c ki u d li u c a PipedOutputStream dùng đ ghi d li u lên ngẫ ộ ể ữ ệ ủ ể ữ ệ ố

d nẫ PipedInputStream readPipe;

PipedOutputStream writePipe;

// Xây d ng ph ng th c kh i t o c a l p có hai đ i s và trong đó có g i đ n ph ngự ươ ứ ở ạ ủ ớ ố ố ọ ế ươ

th c start đ ch y lu ng m i khi m t đ i t ng c a l p đ c t o ra.ứ ể ạ ồ ỗ ộ ố ượ ủ ớ ượ ạ PipedEchoServer(PipedInputStream readPipe, PipedOutputStream writePipe)

{ this.readPipe = readPipe;

this.writePipe = writePipe;

System.out.println("Server bat đau lăng nghe. . .");

start();

}

// Xây d ng Ph ng th c ghi đè run() đ nh n, x lý d li u đ g i l i cho Client.ự ươ ứ ể ậ ử ữ ệ ể ử ạ public void run()

{

while(true)

{ try

{

int ch = readPipe.read()+ 1;

writePipe.write(ch);

writePipe.flush();

} catch (IOException ie)

Page 13: baithuchanh_5207

{ System.out.println("Echo Server bi loi: "+ie );

}

}

}

}

* Ch ng trình Client:ươ// Khai báo th vi n nh p xu t d li u.ư ệ ậ ấ ữ ệimport java.io.*

// Xây d ng l p PipedEchoClient k th a các ph ng th c và thu c tính c a l p Threadự ớ ế ừ ươ ứ ộ ủ ớpublic class PipedEchoClient extends Thread

{

PipedInputStream readPipe;

PipedOutputStream writePipe;

PipedEchoClient(PipedInputStream readPipe, PipedOutputStream writePipe)

{

this.readPipe = readPipe;

this.writePipe = writePipe;

System.out.println("Client dang ket noi");

start(); }

// Xây d ng ph ng th c ghi đè run() đ g i và đ c k t qu lên màn hình.ự ươ ứ ể ử ọ ế ả public void run()

{

while(true)

{ try

{

int ch=System.in.read();

writePipe.write(ch);

ch = readPipe.read();

System.out.print((char)ch);

} catch(IOException ie)

{ System.out.println("Echo Client Error: "+ie );

}

}

}

}

* Ch ng trình PipedEchoươ .

// Khai báo th vi n nh p xu tư ệ ậ ấimport java.io.*;

public class PipedEcho

Page 14: baithuchanh_5207

{

// Xây d ng ph ng th c main đ th c thi ng d ng PipedEcho là t o ra 2 ng d nự ươ ứ ể ự ứ ụ ạ ố ẫ

giúp Client và Server có th trao đ i thông tin v i nhau.ể ổ ớ public static void main(String args[])

{

try{

PipedOutputStream cwPipe = new PipedOutputStream();

PipedInputStream crPipe = new PipedInputStream();

PipedOutputStream swPipe = new PipedOutputStream(crPipe);

PipedInputStream srPipe = new PipedInputStream(cwPipe);

PipedEchoServer server = new PipedEchoServer(srPipe,swPipe);

PipedEchoClient client = new PipedEchoClient(crPipe,cwPipe);

} catch(IOException ie)

{ System.out.println("Pipe Echo Error:"+ie); }

}

}

// K t quế ảKhi ch y PipedEchoạ

Server bat đau lăng nghe. . .

Client dang ket noi

123qw

234rx

II.2. Bài t pậCâu 1: Hãy xây d ng m t ch ng trình ghi m t m ng byte cho tr c lên ng d n Pipe.ự ộ ươ ộ ả ướ ố ẫ

Đ c d li u t ng d n r i hi n th k t qu ra màn hình.ọ ữ ệ ừ ố ẫ ồ ệ ị ế ảCâu 2: Hãy xây d ng m t ng d ng cho d ch v ph n h i thông tin b ng ng d nự ộ ứ ụ ị ụ ả ồ ằ ố ẫ

(Pipe) theo mô hình Client-Server theo yêu c u sau:ầ- Client nh p m t m ng ký t t bàn phím r i g i đ n Server, đ i nh n k t quậ ộ ả ự ừ ồ ử ế ợ ậ ế ả

tr v và in ra màn hình.ả ề- Server s nh n d li u t Client g i sang, ki m tra ký t đó n u là ký t s sẽ ậ ữ ệ ừ ử ể ự ế ự ố ẽ

g i tr v cho Client.ử ả ề

Page 15: baithuchanh_5207

III. SOCKETIII.1. Bài t p m u.ậ ẫIII.1. 1.L p trình TCPậIII.1.1.1.Xây d ng ch đ ph c v tu n t .ự ế ộ ụ ụ ầ ựCâu 1: Vi t ch ng trình theo mô hình Client-Server s d ng Socket ch đ n iế ươ ử ụ ở ế ộ ố

k t(TCP)ếa) Ch ng trình phía Server.ươ

- L ng nghe và ch p nh n k t n i t i c ng 1234ắ ấ ậ ế ố ạ ổ- Khi nh n m t chu i t Client s chuy n chu i đó thành ch hoa và g i k t qu tr l iậ ộ ỗ ừ ẽ ể ỗ ữ ử ế ả ả ạ

cho Client.

- Đóng k t n iế ốb) Ch ng trình phía máy khách.ươ

- K t n i đ n Server có c ng k t n i 1234.ế ố ế ổ ế ố- Đ c chu i t bàn phím r i g i đ n Server ch và nh n k t qu hi n th ra màn hìnhọ ỗ ừ ồ ở ế ờ ậ ế ả ệ ị- Đóng k t n i.ế ố* Trình t ho t đ ng c a máy ch (Server) :ự ạ ộ ủ ủimport java.io.*;

// Khai báo th vi n cho l p m ngư ệ ớ ạimport java.net.*;

public class TCPServer

{

public static void main(String[]args)

{

try

{

// Bi n sv thu c ki u d li u ServerSocket đang l ng nghe t i c ng 1234ế ộ ể ữ ệ ắ ạ ổ ServerSocket sv = new ServerSocket(1234);

// sv ch p nh n k t n iấ ậ ế ố Socket client = sv.accept();

// br dùng đ đ c d li u trên socketể ọ ữ ệ BufferedReader br = new BufferedReader(new

InputStreamReader(client.getInputStream()));

// pw ghi d li u lên socketữ ệ PrintWriter pw = new PrintWriter(client.getOutputStream());

String s1 = br.readLine();

s1=chuHoa(s1);

pw.write(s1+ "\n");

pw.flush();

Page 16: baithuchanh_5207

pw.close();

br.close();

client.close();

sv.close();

}catch(IOException ex) {}

}

// Hàm chuy n đ i chu i thành chu i hoaể ổ ỗ ỗ public static String chuHoa(String s)

{

s=s.toUpperCase();

return s;

}

}

* Trình t ho t đ ng c a máy kháchự ạ ộ ủ (Client) :

import java.io.*;

import java.net.*;

public class TCPClient {

public static void main(String[]args)

{

try

{

// Client k t n i đ n Server có đ a ch IP “127.0.0.1”, c ng 1234.ế ố ế ị ỉ ổ Socket client = new Socket("127.0.0.1",1234);

BufferedReader br = new BufferedReader(new

InputStreamReader(client.getInputStream()));

BufferedReader br1 = new BufferedReader(new InputStreamReader(System.in));

PrintWriter pw = new PrintWriter(client.getOutputStream());

System.out.println("Ban hay nhap mot chuoi vao");

String s;

// G i chu i đ n Serverử ỗ ế while((s=br1.readLine())!="1")

{

pw.write(s + "\n");

pw.flush();

if(s=="1")break;

}

System.out.println("chuoi nhan ve la");

String s1 = br.readLine();

System.out.println(s1);

Page 17: baithuchanh_5207

br.close();

pw.close();

client.close();

}catch(IOException ex)

{}

}

}

III.1.1.2. Xây d ng Server ch đ ph c v song song (m t ngu n nhi u khách).ự ế ộ ụ ụ ộ ồ ềCâu 1

a) Ch ng trình phía máy chươ ủ- L ng nghe và ch p nh n các k t n i đ n trên c ng 9999ắ ấ ậ ế ố ế ổ- T o ra m i tuy n cho m t k t n i riêng bi t đ đáp ng các yêu c u c a cácạ ỗ ế ộ ế ố ệ ể ứ ầ ủ

máy khách đ ng th iồ ờ- Khi nh n đ c m t dòng do máy khách g i đ n máy ch s x lý nh sau:ậ ượ ộ ử ế ủ ẽ ử ư

+ N u dòng nh n đ c là “quit” (không phân bi t ch hoa ch th ng) máy chế ậ ượ ệ ữ ữ ườ ủ

s đóng k t n i v i máy kháchẽ ế ố ớ+ N u dòng nh n đ c m t chu i s chuy n chu i v ch hoa sau đó tr v choế ậ ượ ộ ỗ ẽ ể ỗ ề ữ ả ề

Client.

b) Ch ng trình phía máy kháchươ- K t n i đ n ch ng trình máy ch đã nêu trong câu aế ố ế ươ ủ- Đ c m t dòng t bàn phím và g i dòng đ c đ c đ n máy chọ ộ ừ ử ọ ượ ế ủ- N u dòng đ c đ c là “quit” (không phân bi t ch hoa ch th ng) thì ng t k tế ọ ượ ệ ữ ữ ườ ắ ế

n i v i máy ch và k t thúc ch ng trìnhố ớ ủ ế ươ- Đ c k t qu tr v và in ra màn hìnhọ ế ả ả ề

* Trình t ho t đ ng c a Server:ự ạ ộ ủ// khai báo th vi n nh p xu tư ệ ậ ấimport java.io.*;

// Khai báo th vi n cho các l p m ngư ệ ớ ạimport java.net.*;

// Xây d ng l p TCPServerự ớ// Ph n 1 l ng nghe t i c ng 9999, khi có client k t n i thì nó s t o ra m t lu ng m iầ ắ ạ ổ ế ố ẽ ạ ộ ồ ớ

đ x lý yêu c u c a Client.ể ử ầ ủpublic class TCPServer

{

public static void main(String[]args)

{

try

{

System.out.println("Server lang nghe ket noi tai cong 9999");

Page 18: baithuchanh_5207

ServerSocket svsk = new ServerSocket(9999);

// N u quá trình l ng nghe t i c ng 9999 c a Server là đúng thì l p l i công vi c ế ắ ạ ổ ủ ặ ạ ệCh p nh n k t n i c a client và t o ra lu ng m i đ x lý thông đi p mà client g iấ ậ ế ố ủ ạ ồ ớ ể ử ệ ở

đ n.ế while(true)

{

Socket sk1 = svsk.accept();

MyThread mt = new MyThread(sk1);

}

}catch(IOException ex)

{}

}

}

// Xây d ng l p MyThread k th a t l p Thread đ nh n và x lý thông đi p t Clientự ớ ế ừ ừ ớ ể ậ ử ệ ừclass MyThread extends Thread

{

Socket sk;

public MyThread(Socket sk)

{

this.sk=sk;

this.start();

}

public void run()

{

try

{

BufferedReader br = new BufferedReader(new InputStreamReader(sk.getInputStream()));

PrintWriter pw = new PrintWriter(sk.getOutputStream());

// L p l i quá trình nh n thông tin và x lý thông tin đ g i tr l i cho Client.ặ ạ ậ ử ể ở ả ạ while(true)

{ String s = br.readLine();

String s1 = s.toUpperCase();

if(s.equals("quit"))break;

else

{

pw.println(s1);

pw.flush();

}

Page 19: baithuchanh_5207

}

// Đóng k t n iế ố br.close();

pw.close();

sk.close();

* Trình t ho t đ ng c a Client.ự ạ ộ ủimport java.io.*;

import java.net.*;

public class TCPClient

{

public static void main(String[] args)

{

try

{

// bi n sk thu c ki u d li u ki u Socket đ t o k t n i đ n máy ch t i c ng 9999ế ộ ể ữ ệ ể ể ạ ế ố ế ủ ạ ổ Socket sk = new Socket("127.0.0.1",9999);

// bi n br thu c ki u d li u BufferedReader đ đ c d li u trên socketế ộ ể ữ ệ ể ọ ữ ệ BufferedReader br = new BufferedReader(new

InputStreamReader(sk.getInputStream()));

BufferedReader br1 = new BufferedReader(new InputStreamReader(System.in));

// bi n pw thu c ki u d li u PrintWriter đ ghi d li u lên socketế ộ ể ữ ệ ể ữ ệ PrintWriter pw = new PrintWriter(sk.getOutputStream());

// L p l i quá trình nh p chu i đ g i cho Server n u chu i nh p vào là “quit” s thoátặ ạ ậ ỗ ể ở ế ỗ ậ ẽ

kh i quá trình nh p ng c l i s in k t qu ra màn hìnhỏ ậ ượ ạ ẽ ế ả while(true)

{

System.out.println("ban hay nhap mot chuoi vao");

String s = br1.readLine();

pw.println(s);

pw.flush();

if(s.equals("quit"))break;

else

System.out.println("chuoi nhan ve tu Server la" + br.readLine());

}

// Client đóng k t n iế ố br.close();

pw.close();

sk.close();

Page 20: baithuchanh_5207

}catch(IOException ex)

{}

}

}

III.1.2. L p trình v i UDP.ậ ớBài T p 1 : Vi t ch ng trình k t n i Client – Server. Sau đó g i các 1 thông đi p tậ ế ươ ế ố ử ệ ừ

máy khách đ n máy ch . Máy ch hi n th ra [ IP Address – Port – Thông đi p ] t máyế ủ ủ ể ị ệ ừ

khách g i đ n?ử ế* Trình t ho t đ ng c a UDPServerự ạ ộ ủ .

import java.io.*;

import java.net.*;

class UDPServer

{

public static void main(String[] args) throws Exception

{

byte []buffer = new byte[1024];

int port = 2812;

try

{

// T o ra m t socket c a UDP đang l ng nghe k t n i c ng port.ạ ộ ủ ắ ế ố ở ổDatagramSocket socket = new DatagramSocket(port);

// Bi n packet thu c ki u d li u DatagramPacket đ đóng gói d li u đ c ch a trongế ộ ể ữ ệ ể ữ ệ ượ ứ

buffer có đ dài buffer.length.ộDatagramPacket packet = new DatagramPacket(buffer,buffer.length);

// Nh n gói d li u vậ ữ ệ ềsocket.receive(packet);

// L y đ a ch IP c a Client.ấ ị ỉ ủInetAddress ipClient = packet.getAddress();

// L y s hi u c ng c a Clientấ ố ệ ổ ủint portClient = packet.getPort();

// Chuy n d li u nh n v thành ki u chu iể ữ ệ ậ ề ể ỗString st = new String(packet.getData(),0,packet.getLength());

// Hi n th chu i nh n v t client và đ a ch ip c a client.ệ ị ỗ ậ ề ừ ị ỉ ủSystem.out.println("receive : '" + st + "' from " + ipClient);

packet.setLength(buffer.length);

}catch (UnknownHostException evt)

{evt.printStackTrace();}

}

Page 21: baithuchanh_5207

}

* Trình t ho t đ ng c a UDPClient.ự ạ ộ ủimport java.io.*;

import java.net.*;

class UDPClient

{

public static void main(String[] args) throws Exception

{

BufferedReader in = new BufferedReader(new

InputStreamReader(System.in));

// T o ra m t s UDPSocket đ k t n i đ n Serverạ ộ ể ế ố ếDatagramSocket socket = new DatagramSocket();

//L y đ a ch ip c a máy ch (“localhost”)ấ ị ỉ ủ ủInetAddress ipServer = InetAddress.getByName("localhost");

int port = 2812;

byte []sendData;

System.out.print("\nNhap chuoi bat ky : ");

String st=in.readLine();

sendData = st.getBytes();

// sendPacket đ đóng gói d li u v i các tham s truy n vào m ng byteể ữ ệ ớ ố ề ả

(sendData), s l ng byte(sendData.length), đ a ch ip c a Server, S c ng c aố ượ ị ỉ ủ ố ổ ủ

Server c n k t n i đ n(port).ầ ế ố ếDatagramPacket sendPacket = new

DatagramPacket(sendData,sendData.length,ipServer,port);

// G i d li u đ n Serverử ữ ệ ếsocket.send(sendPacket);

// Đóng k t n iế ốsocket.close();

}

}

III.2. Bài t p:ậCâu 1:

a) Ch ng trình phía máy ch :ươ ủ- L ng nghe và ch p nh n k t n i trên c ng 1234ắ ấ ậ ế ố ổ- Khi nh n đ c m t dòng do máy khách g i đ n máy ch s x lý nh sau:ậ ượ ộ ử ế ủ ẽ ử ư

+ N u dòng nh n đ c ế ậ ượ “OP DS1 DS2” (Trong đó “OP” là m t phép toán s h cộ ố ọ

có th là: “+”, “-”, “*”, “/”. DS1, DS2 là đ i s c a phép toán. Các thành ph n cáchể ố ố ủ ầ

nhau b i m t d u cách) Server s th c hi n phép toán ở ộ ấ ẽ ự ệ DS1 OP DS2 r i g i k t quồ ử ế ả

tr v Client.ả ề

Page 22: baithuchanh_5207

+ N u dòng nh n đ c là “quit” (không phân bi t là ch hoa hay ch th ng)ế ậ ượ ệ ữ ữ ườ

máy ch s đóng k t n i.ủ ẽ ế ố+ N u dòng thông đi p nh n đ c không ph i là các tr ng h p trên thì máyế ệ ậ ượ ả ườ ợ

ch s g i v m t dòng thông báo “Unkown command”ủ ẽ ử ề ộb) ch phía máy khách:

- K t n i ð n máy ch t i c ng 1234.ế ố ế ủ ạ ổ- Ð c m t dòng t bàn phím và g i ð n cho Server.ọ ộ ừ ử ế- N u dòng đ c đ c là “quit” (không phân bi t là ch hoa hay ch th ng) Client sế ọ ượ ệ ữ ữ ườ ẽ

đóng k t n i.ế ố- Đ c k t qu tr v và in ra màn hìnhọ ế ả ả ề

Câu 2:

a) Ch ng trình phía máy chươ ủ- L ng nghe và ch p nh n các k t n i đ n trên c ng 9999ắ ấ ậ ế ố ế ổ- T o ra m i tuy n cho m t k t n i riêng bi t đ đáp ng các yêu c u c a các máyạ ỗ ế ộ ế ố ệ ể ứ ầ ủ

khách đ ng th iồ ờ- Khi nh n đ c m t dòng do máy khách g i đ n máy ch s x lý nh sau:ậ ượ ộ ử ế ủ ẽ ử ư

+ N u dòng nh n đ c là “GetTime” (không phân bi t ch hoa ch th ng) máyế ậ ượ ệ ữ ữ ườ

ch s l y v gi hi n t i c a máy và g i v máy kháchủ ẽ ấ ề ờ ệ ạ ủ ử ề+ N u dòng nh n đ c là “GetDate” (không phân bi t ch hoa ch th ng) máyế ậ ượ ệ ữ ữ ườ

ch s l y v ngày hi n t i c a máy và g i v máy kháchủ ẽ ấ ề ệ ạ ủ ử ề+ N u dòng nh n đ c là “quit” (không phân bi t ch hoa ch th ng) máy ch ế ậ ượ ệ ữ ữ ườ ủs đóng k t n i v i máy kháchẽ ế ố ớ+ N u dòng thông đi p nh n đ c không ph i là các tr ng h p trên thì máy chế ệ ậ ượ ả ườ ợ ủ

s g i v m t dòng thông báo “Unkown command”ẽ ử ề ộb) Ch ng trình phía máy kháchươ

- K t n i đ n ch ng trình máy ch đã nêu trong câu aế ố ế ươ ủ- Đ c m t dòng t bàn phím và g i dòng đ c đ c đ n máy chọ ộ ừ ử ọ ượ ế ủ- N u dòng đ c đ c là “quit” (không phân bi t ch hoa ch th ng) thì ng t k tế ọ ượ ệ ữ ữ ườ ắ ế

n i v i máy ch và k t thúc ch ng trìnhố ớ ủ ế ươ- Đ c k t qu tr v và in ra màn hìnhọ ế ả ả ề

Câu 3. Vi t ch ng trình v i yêu c u sau:ế ươ ớ ầa) Ch ng trình phía máy chươ ủ

- L ng nghe và ch p nh n các k t n i đ n trên c ng 9999ắ ấ ậ ế ố ế ổ- T o ra m i tuy n cho m t k t n i riêng bi t đ đáp ng các yêu c u c a cácạ ỗ ế ộ ế ố ệ ể ứ ầ ủ

máy khách đ ng th iồ ờ- Khi nh n đ c m t dòng do máy khách g i đ n máy ch s x lý nh sau:ậ ượ ộ ử ế ủ ẽ ử ư

+ N u dòng nh n đ c là “GetLength” (không phân bi t ch hoa ch th ng)ế ậ ượ ệ ữ ữ ườ

máy ch s đ c ti p m t dòng và đ n xen dòng thông đi p đó g m có bao nhiêuủ ẽ ọ ế ộ ế ệ ồ

t và tr v cho máy kháchừ ả ề

Page 23: baithuchanh_5207

+ N u dòng nh n đ c là “quit” (không phân bi t ch hoa ch th ng) máy chế ậ ượ ệ ữ ữ ườ ủ

s đóng k t n i v i máy kháchẽ ế ố ớ+ N u dòng thông đi p nh n đ c không ph i là các tr ng h p trên thì máy chế ệ ậ ượ ả ườ ợ ủ

s g i v m t dòng thông báo “Unkown command”ẽ ử ề ộ

b) Ch ng trình phía máy kháchươ- K t n i đ n ch ng trình máy ch đã nêu trong câu aế ố ế ươ ủ- Đ c hai dòng l nh t bàn phím và g i dòng đ c đ c đ n máy chọ ệ ừ ử ọ ượ ế ủ- N u dòng đ c đ c là “quit” (không phân bi t ch hoa ch th ng) thì ng t k tế ọ ượ ệ ữ ữ ườ ắ ế

n i v i máy ch và k t thúc ch ng trìnhố ớ ủ ế ươ- Đ c k t qu tr v và in ra màn hìnhọ ế ả ả ề

Câu 4: Vi t ch ng trình theo mô hình Client-Server s d ng Socket ch đ khôngế ươ ử ụ ở ế ộ

n i k t:ố ếa) Ch ng trình phía máy ch :ươ ủ- L ng nghe k t n i trên c ng 1111ắ ế ố ổ- Nh n m t chu i r i chuy n ki u thành (double) tính căn b c 2 r i g i tr v choậ ộ ỗ ồ ể ể ậ ồ ử ả ề

client.

- Đóng k t n i.ế ốb) Ch ng trình phía máy khách:ườ- K t n i đ n c ng 1111.ế ố ế ổ- Đ c m t chu i t bàn phím, g i chu i đ n Server và nh n k t qu tr v hi n trênọ ộ ỗ ừ ử ỗ ế ậ ế ả ả ề ệ

màn hình.

- Đóng k t n i.ế ốCâu 5: Vi t ch ng trình chat per to per, cho phép 2 máy tính g i tr c ti p các thôngế ươ ử ự ế

đi pệ cho nhau

Page 24: baithuchanh_5207

IV. PRC và RMI.IV.1. Bài t p m u:ậ ẫBài 1: Xây d ng m t ng d ng tính t ng c a 1 m ng đ c g i t xa.ự ộ ứ ụ ổ ủ ả ượ ọ ừ* Xây d ng ph ng th c đ c g i t xa c a các đ i t ng.ự ươ ứ ượ ọ ừ ủ ố ượ// Khai báo th vi n c a rmiư ệ ủimport java.rmi.*;

\\ Xây d ng l p Tong đ c k th a t l p Remoteự ớ ượ ế ừ ừ ớpublic interface Tong extends Remote

{

// Đ nh nghĩa m t remote Interface có tên là tong(int[])ị ộ public int tong(int[]a) throws RemoteException;

}

* T o l p cài đ t cho giao di n khai báo ()ạ ớ ặ ệimport java.rmi.*;

public class Tongipl implements Tong

{

// Xây d ng hàm đ tính t ng c a m t m ng.ự ể ổ ủ ộ ả public int tong(int[]a) throws RemoteException

{

System.out.println("may khach yeu cau");

int tong =0;

for(int i=0; i<a.length;i++ )

{

tong+=a[i];

}

return tong;

}

}

* Xây d ng ch ng trình phía Serverự ươ// Khai báo th vi n cho Serverư ệimport java.rmi.server.*;

import java.rmi.*;

public class Server

{

public static void main (String[] args)

{

try

{

Page 25: baithuchanh_5207

// T o đ i t ng Tongipl th c s .ạ ố ượ ự ự Tongipl t=newTongipl ();

// Thông báo s hi n di n c a đ i t ng cho máy áo javaự ệ ệ ủ ố ượUnicastRemoteObject.exportObject(t);

// Đăng ký đ i t ng v i b quán lý c a rmiố ượ ớ ộ ủNaming.bind("rmi://localhost/MyT",t);

System.out.println("Register Thanh cong!");

}

catch(Exception e)

{}

}

}

* Xây d ng ch ng trình phía Client.ự ươimport java.io.*;

public class Client

{

public static void main(String[] args)

{

try

{

System.out.println(" tim doi tuong truy xuat theo ten");

Tong = (Tong)Naming.lookup("rmi://localhost/MyT");

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

System.out.println("Ban hay nhap so phan tu cua mang vao");

int n = Integer.parseInt(br.readLine());

int[]a= new int[n];

for(int i=0; i<a.length;i++)

{

System.out.println("Nhap phan tu a[ "+i+ "] " );

a[i]=Integer.parseInt(br.readLine());

}

// G i ph ng th c c a đ i t ngọ ươ ứ ủ ố ượ System.out.println("TONG "+ c.tong(a));

}

catch(IOException ex)

{}

catch(Exception e)

{ System.out.print(e); }

}

Page 26: baithuchanh_5207

}

* Biên d ch các file java ngu nị ồ .(Ví d ụ T t c các file đ u n m trong th m cấ ả ề ằ ư ụ

(E:\\RMI))).

+ E:\RMI> javac Tong.java.

+ E:\RMI> javac Tongipl.java.

+ E:\RMI> javac Server.java.

+ E:\RMI> javac Client.java.

* Sinh l p trung gian STUB và SKETLETONớ+ E:\RMI> rmi Tongipl

* Ch y ch ng trình rmiregistry.exeạ ươ+ E:\RMI> rmiregistry.exe.

* Kh i đ ng đ i t ng Serverở ộ ố ượ (m m t c a s m i c a msdos ch y ch ng trìnhở ộ ử ổ ớ ủ ạ ươ

c a Server).ủ+ E:\RMI> java Server

K t quế ảRegister Thanh cong

* Kh i đ ng đ i t ng Clientở ộ ố ượ (m m t c a s m i c a msdos ch y ch ng trình c aở ộ ử ổ ớ ủ ạ ươ ủ

Client).

+ E:\RMI>java Client.

K t quế ả

IV. 2. Bài t p:ậCâu 1: Xây d ng m t ng d ng đ o chu i đ c g i t xa. ự ộ ứ ụ ả ỗ ượ ọ ừCâu 2: Xây d ng m t ng d ng tr ra GetTime(), GetDate c a máy ch tr v cho máyự ộ ứ ụ ả ủ ủ ả ề

g i t xa.ọ ừCâu 3: Xây d ng m t ng d ng chát Client_Server s d ng k thu t l p trình phân tán.ự ộ ứ ụ ử ụ ỹ ậ ậ