Tải bản đầy đủ (.docx) (29 trang)

Ứng dụng cơ chế đồng bộ các process cho bài toán Sản xuất – Tiêu dùng Xây dựng ứng dụngtrên máy điện thoại quản lý thu chi, chương trình cho phép người dùng gửi dữ liệu đến email để lưu gi

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (600.01 KB, 29 trang )

ĐẠI HỌC ĐÀ NẴNG
TRƯỜNG ĐẠI HỌC BÁCH KHOA
KHOA CÔNG NGHỆ THƠNG TIN
----------

ĐỒ ÁN CƠ SỞ NGÀNH MẠNG
ĐỀ TÀI:
Phần Ngun lí hệ điều hành: Ứng dụng cơ chế đồng bộ các process cho bài tốn
Sản xuất – Tiêu dùng
Phần Lập trình mạng: Xây dựng ứng dụngtrên máy điện thoại quản lý thu chi,
chương trình cho phép người dùng gửi dữ liệu đến email để lưu giữ.

1


MỤC LỤC
.................................................................................................................................................................
ĐẠI HỌC ĐÀ NẴNG..........................................................................................................................1
NHẬN XÉT CỦA GIẢNG VIÊN.........................................................................................................2
CHƯƠNG 1. GIỚI THIỆU TỔNG QUAN ĐỀ TÀI..........................................................................4
1. Nội dung đề tài.........................................................................................................................4
Vận dụng cơ chế đồng bộ các process để xây dựng bài toán sản xuất-tiêu dùng, tránh tranh chấp
tài nguyên khi dùng chung một biến semaphore............................................................................4
2. Mục tiêu....................................................................................................................................4
3. Môi trường áp dụng.................................................................................................................4
CHƯƠNG 2. CƠ SỞ LÝ THUYẾT..................................................................................................4
1. Tiến trình..................................................................................................................................4
2. Đồng bộ tiến trình....................................................................................................................7
3. Giới thiệu Semaphore..............................................................................................................7
CHƯƠNG 3. CÀI ĐẶT VÀ TRIỂN KHAI.....................................................................................12
PHẦN II: LẬP TRÌNH MẠNG..........................................................................................................14


CHƯƠNG 1 . GIỚI THIỆU TỔNG QUAN ĐỀ TÀI.......................................................................14
1. Nội dung đề tài.......................................................................................................................14
Xây dựng ứng dụng trên máy điện thoại quản lý thu chi. Chương trình cho phép người dùng
nhập, quản lý thu chi theo ngày/tháng; gửi dữ liệu đến email để lưu giữ.....................................14
2. Mục tiêu..................................................................................................................................14
3. Môi trường áp dụng...............................................................................................................14
CHƯƠNG 2. CƠ SỞ LÝ THUYẾT................................................................................................14
1. SMTP:.....................................................................................................................................15
2. POP3:......................................................................................................................................16
3. IMAP:.....................................................................................................................................17
4. So sánh POP3 và IMAP:.......................................................................................................17
CHƯƠNG 3 . PHÂN TÍCH THIẾT KẾ HỆ THỐNG....................................................................19
1. Bài tốn và u cầu:...............................................................................................................19
2. Phân tích hệ thống:................................................................................................................19
3. Xây dựng ứng dụng...............................................................................................................23
CHƯƠNG 4. TRIỂN KHAI VÀ ĐÁNH GIÁ KẾT QUẢ..............................................................24
KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN...........................................................................................29

2


PHẦN I: NGUYÊN LÝ HỆ ĐIỀU HÀNH
Ứng dụng cơ chế đồng bộ các process cho bài toán
Sản xuất – Tiêu dùng

CHƯƠNG 1.GIỚI THIỆU TỔNG QUAN ĐỀ TÀI
1. Nội dung đề tài
Vận dụng cơ chế đồng bộ các process để xây dựng bài toán sản xuất-tiêu dùng,
tránh tranh chấp tài nguyên khi dùng chung một biến semaphore
2. Mục tiêu

Tìm hiểu được cơ chế hoạt động của semaphore, ứng dụng semaphore vào bài
tốn thực tế
3. Mơi trường áp dụng
Chương trình mơ phỏng sẽ được viết bằng ngôn ngữ Java chạy trên môi trường
lập trình của Eclipse

CHƯƠNG 2. CƠ SỞ LÝ THUYẾT
1. Tiến trình
a) Khái niệm
Tất cả các máy tính hiện đại đều có thể thực hiện nhiều việc cùng một lúc.
Trong khi thực hiện chương trình của người sử dụng, máy tính có thể đọc dữ liệu từ
đĩa và đưa ra màn hình hoặc máy in.
Để hổ trợ hoạt động đa nhiệm, hệ thống máy tính cần phải có khả năng thực
hiện nhiều tác vụ xử lý đồng thời nhưng việc điều khiển hoạt động song hành ở cấp
độ phần cứng là rất khó khăn.Vì vậy,các nhà thiết kế hệ điều hành đề xuất một mơ
hình song hành giả lập bằng cách chuyển đổi bộ xử lý qua lại giữa các chương trình
để duy trì hoạt động của nhiều chương trình phải cùng một thời điểm.
Trong mơ hình này các chương trình của hệ thống được tổ chức thành các tiến
trình(process). Như vậy có thể coi tiến trình là một chương trình đang xử lý, nó sử

3


dụng một con trỏ lệnh, tập các thanh ghi và các biến. Để hồn thành nhiệm vụ của
mình, các tiến trình cịn có thể u cầu một số tài ngun hệ thống như: CPU, bộ nhớ
và các thiết bị. Chúng ta cần phân biệt rõ tiến trình và chương trình.
Chương trình là một thực thể thụ động chưa các chỉ thị điều khiển máy tính thi
hành một tác vụ cụ thể nào đó. Khi thực hiện các chỉ thị này, chương trình được
chuyển thành các tiến trình là một thực thể hoạt động, với con trỏ lệnh xác định kèm
them tài nguyên phục vụ cho hoạt động.

Vậy tiến trình là một bộ phận của một chương trình đang thực hiện, đơn vị thực
hiện tiến trình là processer.
b) Đặc điểm của tiến trình
Điều phối hoạt động của các tiến trình là một vấn đề rất phức tạp, đòi hỏi hệ
điều hành khi giải quyết phải xem xét nhiều yếu tố khác nhau để có thể đạt được
những mục tiêu đề ra. Một số đặc tính của tiến trình cần được quan tâm như tiêu
chuẩn điều phối :

 Tính hướng xuất / nhập của tiến trình ( I/O-boundedness):
Khi một tiến trình nhận được CPU, chủ yếu nó chỉ sử dụng CPU đến khi phát
sinh một yêu cầu nhập xuất? Hoạt động của các tiến trình như thế thường bao gồm
nhiều lượt sử dụng CPU , mỗi lượt trong một thời gian khá ngắn.

 Tính hướng xử lý của tiến trình ( CPU-boundedness):
Khi một tiến trình nhận được CPU, nó có khuynh hướng sử dụng CPU đến khi
hết thời gian dành cho nó? Hoạt động của các tiến trình như thế thường bao gồm một
số ít lượt sử dụng CPU, nhưng mỗi lượt trong một thời gian đủ dài.

 Tiến trình tương tác hay xử lý theo lô :
Người sử dụng theo kiểu tương tác thường yêu cầu được hồi đáp tức thời đối
với các yêu cầu của họ, trong khi các tiến trình của tác vụ được xử lý theo lơ nói
chung có thể trì hỗn trong một thời gian chấp nhận được.

 Độ ưu tiên của tiến trình :
Các tiến trình có thể được phân cấp theo một số tiêu chuẩn đánh giá nào đó,
một cách hợp lý, các tiến trình quan trọng hơn (có độ ưu tiên cao hơn) cần được ưu
4


tiên hơn.


 Thời gian đã sử dụng CPU của tiến trình :
Một số quan điểm ưu tiên chọn những tiến trình đã sử dụng CPU nhiều thời
gian nhất vì hy vọng chúng sẽ cần ít thời gian nhất để hồn tất và rời khỏi hệ thống .
Tuy nhiên cũng có quan điểm cho rằng các tiến trình nhận được CPU trong ít thời
gian là những tiến trình đã phải chờ lâu nhất, do vậy ưu tiên chọn chúng.

 Thời gian cịn lại tiến trình cần để hồn tất :
Có thể giảm thiểu thời gian chờ đợi trung bình của các tiến trình bằng cách cho
các tiến trình cần ít thời gian nhất để hoàn tất được thực hiện trước. Tuy nhiên đáng
tiếc là rất hiếm khi biết được tiến trình cần bao nhiêu thời gian nữa để kết thúc xử lý.
c) Trạng thái của tiến trình
Trạng thái của tiến trình tại một thời điểm được xác định bởi hoạt động hiện
thời của tiến trình tại thời điếm đó. Trong q trình sống một tiến trình thay đổi
trạng thái do nhiều nguyên nhân như: phải chờ một sự kiện nào đó xảy ra, hay đợi
một thao tác nhập xuất hoàn tất, buộc phải dừng hoạt động do hết thời gian xử
lý……
Tại một thời điểm một tiến trình có thể nhận một trong các trạng thái sau :
* Mới tạo (new): tiến trình đang được tạo lập.
* Running: các chỉ thị của tiến trình đang được xử lý.
* Blocked: tiến trình chờ được cấp phát tài nguyên, hay chờ một sự kiện xảy
ra.
* Ready (ready): tiến trình chờ được cấp phát CPU để xử lý.
* Waiting (đợi): tiến trình phải dừng vì thiếu tài nguyên hoặc chờ một sự kiện
nào đó.
* Kết thúc(halt) : tiến trình hồn tất xử lý.
d) Các loại tiến trình
Các tiến trình trong hệ thống có thể chia thành hai loại: tiến trình tuần tự và
tiến trình song song.


5


 Tiến trình tuần tự là các tiến trình mà điểm khởi tạo của nó là điểm kết thúc
của tiến trình trước đó.Tiến trình tuần tự xuất hiện trong các hệ điều hành đơn nhiệm
như hệ điều hành MSDOS.
 Tiến trình song song là các tiến trình mà điểm khởi tạo của tiến trình này nằm
ở thân của các tiến trình khác, tức là có thể khởi tạo một tiến trình mới khi các tiến
trình đó chưa kết thúc. Các tiến trình song song xuất hiện trong hệ điều hành đa
nhiệm.
2. Đồng bộ tiến trình
a.Mục tiêu của đồng bộ
- Đảm bảo truy xuất độc
- Đảm bảo cơ chế phối hợp giữa các tiến trình.
b.Nguyên tắc đồng bộ
- Tại một thời điểm chỉ có một tiến trình trong miền găng.
- Khơng có sự ràng buộc về tốc độ của các tiến trình và số bộ xử lý trong hệ
thống.
- Một tiến trình tạm dừng bên ngồi miền găng khơng được ngăn cản tiến trình
khác vào miền găng.
- Khơng có tiến trình chờ vô hạn để vào miền găng.
3. Giới thiệu Semaphore
Semaphore là một biến được bảo vệ (hay là một kiểu dữ liệu trừu tượng), tạo
thành một phương pháp để hạn chế truy nhập tới tài nguyên dùng chung trong môi
trường đa lập trình(multiprogramming). Đây là một phát minh của Edsger Dijkstra
và được sử dụng lần đầu tiên trong hệ điều hành THE. Giá trị của semaphore được
khởi tạo bằng số các tài nguyên tương đương được chia sẻ cái mà cài đặt điều khiển.
Trong trường hợp đặc biệt, khi mà chỉ có một tài nguyên tương đương được chia sẻ,
semaphore được gọi là semaphore nhị phân. Trong trường hợp khái quát, semaphore
thường được gọi là biến đếm semaphore.

Phân loại.
Có hai loại Semaphore:
6


Semaphore nhị phân chỉ có 2 giá trị là 0 và 1. Nếu Semaphore có hai giá trị hay
là semaphore nhị phân thì nó có vai trị như Mutex trong tương tác các luồng.
Semaphore nhị phân thường được khởi tạo tại giá trị 1. Khi tài nguyên đang được sử
dụng, luồng truy nhập gọi P(S) để giảm giá trị của nó về 0, và khơi phục giá trị 1
bằng tốn tử V khi tài nguyên sẵn sàng được được thả ra.
Semaphore khác có các giá trị nhiều hơn 2.
a) Khởi tạo Semahore
Có hai cách khai báo semaphore:
 Semaphore(int num)
 Semaphore(int num,boolean how)
Trong đó: num: chỉ định số giấy phép ban đầu. Do đó, nó chỉ định số luồng có
thể truy cập tài nguyên được chia sẻ cùng một lúc. Nếu nó là một, thì chỉ có một
luồng có thể truy cập tài nguyên tại một thời điểm. Theo mặc định, tất cả các chuỗi
chờ được cấp giấy phép theo thứ tự không xác định. Bằng cách đặt cách thực hiện, ta
có thể đảm bảo rằng các chuỗi chờ được cấp giấy phép theo thứ tự mà chúng yêu cầu
quyền truy cập.
Tham số “how” có nghĩa là các thread sau sẽ được đẩy vào tiếp theo hình thức
FIFO (first-in first-out), tức là Semaphores sẽ tống tất cả các thread muốn truy cập
vào hàm xử lý vào một queue dạng FIFO và cứ lấy ra num thread một ra xử lý, xong
rồi lại lấy tiếp num thread tiếp theo và cứ thế.

b) Các hàm trong Semaphore:
Modifier and Type

Method and Description


void

accquire()

void

release()

 public void acquire() throw InterruptedException:
Có được một giấy phép từ semaphore này, ngăn chặn cho đến khi có sẵn, hoặc
thread bị gián đoạn.

7


Có được giấy phép, nếu có sẵn và trả về ngay lập tức, giảm số lượng giấy phép
có sẵn một giấy phép.
Nếu khơng có giấy phép thì thread hiện tại sẽ bị vơ hiệu hóa cho các mục đích
lập lịch trình thread và nằm im cho đến khi một trong hai điều xảy ra:
• Một số luồng khác gọi phương thức release () cho semaphore này và luồng hiện
tại tiếp theo được gán một giấy phép.
• Một số luồng khác làm interrupts luồng hiện tại.
Nếu thread hiện tại:
• Có trạng thái ngắt được đặt khi nhập vào phương thức này; hoặc bị gián đoạn
trong khi chờ giấy phép, thì sau đó InterruptedException được ném và trạng thái ngắt
của luồng hiện tại sẽ bị xóa.
 public void release() :
Hàm này phát hành một giấy phép, trả lại nó cho semaphore.
Phát hành một giấy phép, tăng số lượng giấy phép có sẵn bằng một. Nếu bất kỳ

thread đang cố gắng để có được một giấy phép, sau đó một được chọn và đưa ra giấy
phép vừa được phát hành.
4. Thread
Luồng (Thread) là một phần của tiến trình sở hữu riêng ngăn xếp (stack) và
thực thi độc lập ngay trong mã lệnh của tiến trình.
Trong mỗi tiến trình có thể tạo ra nhiều luồng hoạt động song song với nhau
(như cách tiến trình hoạt động song song)
Ưu điểm của luồng là hoạt động trong cùng khơng gian địa chỉ của tiến trình.
Khi chương trình chính bắt đầu chính là một luồng (thread)
Luồng điều khiển hàm main() của chương trình được gọi là luồng chính. Các
luồng khác do tiến trình tạo ra được gọi là luồng phụ.
5. Xây dựng bài toán thực tế - Phịng khám bệnh
- Bệnh nhân đóng vai trị là những nhà sản xuất
- Bác sĩ có vai trị như 1 nhà tiêu dùng
- Cả 2 dùng chung tài nguyên đó là các ghế chờ khám(tài nguyên dùng chung)
8


- Bài toán giải quyết vấn đề với 1 người tiêu dùng và nhiều nhà sản xuất
- Phòng khám sẽ có các ghế chờ như 1 hàng đợi: bệnh nhân sẽ ngồi chờ khám ở
ghế và bác sĩ lấy bệnh nhân từ đó mà khám bệnh
-Vấn đề cần giải quyết là bác sĩ sẽ không khám khi các hàng đợi trống, và bệnh
nhân sẽ không được vào hàng đợi khi các ghế chờ đã đầy chỗ, cả 2 không được tranh
chấp tài nguyên dùng chung
- Sơ đồ:

Hình 1: Sơ đồ phịng khám bệnh
-Mơ tả thuật tốn:
Với giải pháp Semaphore, ta khai báo các biến:
Semaphore medical_chair ;


// Ghế khám bệnh

Semaphore chairs;

// Số ghế chờ khám bệnh

Semaphore medical;

// bác sĩ khám bệnh

int waiting_customers; // Theo dõi số lượng bệnh nhân chờ đợi
int number_of_chair; // Đếm số lượng ghế chờ hiện tại sẵn sàng
int MEDICAL_TIME = 5000; // thời gian khám bệnh

9


Hình 2: Sơ đồ thuật tốn Phịng khám bệnh
a) Khởi tạo constructor ban đầu:
Ban đầu khi chưa có khách hàng thì ghế khám bệnh trống và bác ngủ sĩ ngủ chờ
khách hàng vào khám bệnh; ghế chờ trống:
medical_chair = new Semaphore(1, true);
chairs = new Semaphore(0, true);
medical = new Semaphore(0, true);
number_of_chairs = chair_number;
waiting_customers = 0;

b) Khách hàng muốn khám bệnh:
if(medical_chair.availablePermits() <= 0)

customerSitDown(c);
if(c.wantsmedical()) {
barber_chair.acquire();
medical(c);
}

c) Khách hàng khám bệnh:
if(waiting_customers < number_of_chairs) {
waiting_customers++;
chairs.acquire();
10


}
} else {
System.out.println(c + " rời đi vì phịng khám đã đầy
khách");
c.wantsToLeave();
}

d) Bác sĩ sẵn sàng:
barber.release();
//nếu có khách hàng xếp trên ghế thì người đầu tiên sẽ tiếp
tục
chairs.release();

e) Khám bệnh:
if(waiting_customers > 0)
waiting_customers--;
medical.acquire();

Thread.sleep(MEDICAL_TIME);
medical_chair.release();
medicalReady();

CHƯƠNG 3. CÀI ĐẶT VÀ TRIỂN KHAI
Kết quả demo.

Hình 3: Kết quả chạy chương trình Phịng khám bệnh

11


Hình 4: Kết quả chạy chương trình Phịng khám bệnh

Hình 5: Kết quả chạy chương trình Phịng khám bệnh

KẾT LUẬN
- Hiểu thêm về cơ chế đồng bộ các process, thread
- Ứng dụng được bài toán thực tế

12


PHẦN II: LẬP TRÌNH MẠNG
Xây dựng ứng dụng trên máy điện thoại quản lý thu chi.
Chương trình cho phép người dùng nhập, quản lý thu chi theo ngày/tháng; gửi
dữ liệu đến email để lưu giữ.

CHƯƠNG 1.GIỚI THIỆU TỔNG QUAN ĐỀ TÀI
1. Nội dung đề tài

Xây dựng ứng dụng trên máy điện thoại quản lý thu chi. Chương trình cho phép
người dùng nhập, quản lý thu chi theo ngày/tháng; gửi dữ liệu đến email để lưu giữ.
2. Mục tiêu
Tìm hiểu được các hoạt động trong một ứng dụng di động, các giao thức email:
SMTP, POP3, IMAP; áp dụng kỹ thuật này vào các trường hợp cần thiết khi xây dựng
ứng dụng.
3. Mơi trường áp dụng
Chương trình mơ phỏng sẽ được viết bằng ngôn ngữ Java.
Trong đồ án môn học này, em sử dụng phần mềm Android Studio để phát triển
ứng dụng
CHƯƠNG 2.CƠ SỞ LÝ THUYẾT
Nhờ sự phát triển của công nghệ thơng tin nói chúng và Internet nói riêng, nhiều
cơng việc, tác vụ của con người đã có thể thực hiện một cách dễ dàng hơn. Trong đó,
vấn đề quản lí các thông tin cá nhân hàng ngày như lịch sinh hoạt, chi tiêu, sinh hoạt
hàng ngày đang ngày càng được quan tâm.
Bên cạnh đó, việc sử dụng các ứng dụng sử dụng trên nền tảng điện thoại giúp
tăng cao tính ứng dụng, tiện lợi khi có thể cập nhật bất cứ lúc nào. Một vấn đề được ra
là làm thế nào nếu các thông tin dữ liệu trong di động xảy ra hỏng hóc, hay đơn giản

13


là khi người sử dụng muốn tiếp tục lưu lại những thơng tin mình đã dùng trước đó khi
lần nữa cài đặt lại phần mềm.
Trong bài đồ án này sẽ tập trung tìm hiểu về một ứng dụng di động trong quản lí
thu chi cá nhân theo ngày, và được sao lưu, phục hồi dữ liệu thơng qua Email. Có các
giao thức đang được triển khai phổ biến hiện nay là SMTP, IMAP và POP3 .
1. SMTP:
a) Khái quát:
SMTP (tiếng Anh: Simple Mail Transfer Protocol - giao thức truyền tải thư tín

đơn giản) là một chuẩn truyền tải thư điện tử qua mạng Internet. SMTP được định
nghĩa trong bản RFC 821 (STD 10) và được chỉnh lý bằng bản RFC 1123 (STD 3),.
Giao thức hiện dùng được là ESMTP (extended SMTP - SMTP mở rộng), được định
nghĩa trong bản RFC 2821.
Mặc dầu các Server và các phần mềm quản lí thư điện tử sử dụng SMTP để gửi
và nhận thư, nhưng ở cấp độ người dùng cá nhân, trong các phần mềm Client để nhận
gửi thư thì STMP chỉ ứng dụng để gửi thư mà thôi, việc nhận thư thường dùng các
giao thức khác là IMAP hay POP3.
SMTP sử dụng port 25 để giao tiếp giữa cái Mail Server với nhau. Cịn đối với
các Client thì thường truyền thư đến Server thơng qua port 587. Cũng có ngoại lệ một
số nhà cung cấp dịch vụ dùng port 465 thay vì tuân theo tiêu chuẩn (port 587) cho
mục đích kể trên.
Kết nối SMTP được đảm bảo an toàn bằng SSL, thường được biết đến với tên là
SMTPS.
Mặc dầu những hệ thống Mail Server hay các Web Mail dùng các chuẩn riêng
của họ để cho phép các tài khoản truy cập vào hòm thư trong hệ thống của họ, tất cả
đều sử dụng giao thức SMTP để gửi hoặc nhận email từ phạm vi bên ngồi hệ thống.
b) Q trình email di chuyển trong MTS(Mail Taransfer System) bằng SMTP:
Bản thân các ứng dụng gửi email đóng vai trị các MUA (Mail User Agent). Khi
người thực hiện gửi, email sẽ được chuyển tới MSA (Mail Submit Agent) cũng chính
là MTA (Mail Transfer Agent) biên đầu, thường thì MSA và MTA biên đầu cùng

14


chạy trên một máy. Email sau đó tiếp tục được chuyển tiếp (relay) thông qua các
MTA trong một trường mạng cho tới khi chạm MTA biên cuối. MTA này có nhiệm
vụ thực hiện truy vấn DNS để tìm ra MX (Mail Exchanger) Server thích hợp dựa trên
tên miền đằng sau dấu @ (vd: @gmail.com) và chuyển tiếp tới các MX record có
trong kết quả tìm được. Email cuối cùng sẽ được chuyển và lưu trữ tại MDA (Mail

Delivery Agent) theo định dạng mailbox. Vậy, nhiệm vụ SMTP là thực hiện vận
chuyển email từ email client (MUA) tới hộp thư của người nhận (MDA).

Quá trình chuyển email

Một khi đã chuyển thư đến Mail Server cục bộ, mail sẽ được người dùng đọc
thông qua giao thức IMAP hoặc POP3
2. POP3:
POP3 (Post Office Protocol version 3, RFC 1939) là giao thức nhận email, cho
phép người dùng tải thư về máy, đọc và quản lý thư trên máy cục bộ. Thư sau khi tải
về sẽ có thể được xóa khỏi máy chủ hoặc lưu trữ dưới dạng bản sao do dung lượng lưu
trữ trên máy chủ hạn chế. POP3 sử dụng port mặc định là 110 để thực hiện thủ tục
nhận mail. Tuy nhiên, có thể sử dụng port 995 để mã hóa kết nối trên kênh truyền
SSL. Thủ tục nhận mail trên POP3 diễn ra như sau:
 Người dùng thông qua Email Client gửi yêu cầu kết nối tới Email Server
(MDA), quá trinh bắt tay 3 bước diễn ra để tạo kết nối TCP

15


 Email Server yêu cầu xác thực người dùng trước khi truy cập hộp thư
 Duyệt và tải email về máy
 Người dùng thực hiện đọc, xóa hoặc lưu bản sao của email trên MDA (lưu ý,
mọi thao tác bấy giờ chỉ là đánh dấu – mark)
 Kết thúc phiên, toàn bộ yêu cầu chỉnh sửa thực sự được thực thi
 Email Server chủ động ngắt kết nối, giải phóng tài nguyên
Một giao thức khác có chức năng thay thế là IMAP (Message Access Protocol).
3. IMAP:
IMAP (Internet Message Access Protocol, RFC 3501) cũng là giao thức nhận
Email, ra đời sau POP3, hỗ trợ thêm nhiều tính năng và khắc phục được một số nhược

điểm, do đó phức tạp hơn POP3. Dung lượng lưu trữ khơng cịn là vấn đề lớn nên
IMAP cho phép thư được giữ tại server, có thể tải về trên nhiều máy và được đồng bộ
hóa dữ liệu với nhau. Điều này khiến việc thao tác chỉnh sửa biên tập trên ứng dụng
Email được áp dụng đối với hòm thư ngay khi trực tuyến. Hòm thư trên server được
chia thành nhiều thư mục (hộp thư đến, thư đã gửi,…) và hỗ trợ người dùng tạo thư
mục riêng. Với mỗi Email, IMAP cho phép gắn cờ để theo dõi trạng thái của thư đó và
tải vể một phần hoặc toàn bộ. IMAP sử dụng port mặc định là 143, port cho kênh
truyền mã hóa SSL là 993. Một phiên làm việc với IMAP cũng tương tự POP3, khác
nhau ở các bước
 Thực hiện duyệt email (theo cấu trúc thư mục và trạng thái), tải về đọc một
phần hoặc toàn bộ email (bản sao)
 Mọi chỉnh sửa biên tập (xóa, di chuyển, thay đổi cờ,…) đều được áp dụng ngay
sau khi thực hiện lệnh, miễn còn trong chế độ trực tuyến
4. So sánh POP3 và IMAP:
 Ưu điểm của POP
Là giao thức thời đầu, POP tuân theo một ý tưởng đơn giản là chỉ một máy
khách yêu cầu truy cập mail trên server và việc lưu trữ mail cục bộ là tốt nhất. Điều
này dẫn tới những ưu điểm sau:

16


Mail được lưu cục bộ, tức ln có thể truy cập ngay cả khi khơng có kết nối
Internet.
 Kết nối Internet chỉ dùng để gửi và nhận mail.
 Tiết kiệm không gian lưu trữ trên server.
 Được lựa chọn để lại bản sao mail trên server.
 Hợp nhất nhiều tài khoản email và nhiều server vào một hộp thư đến.

 Ưu điểm của IMAP

IMAP được tạo ra để cho phép truy cập từ xa email lưu trên một server đầu xa.
Ý tưởng là cho phép nhiều máy khách hay người dùng quản lý cùng một hộp thư đến.
Vì vậy, dù bạn có đăng nhập từ máy tính tại nhà hay máy tính cơng ty thì bạn sẽ ln
thấy cùng email và cấu trúc thư mục do chúng được lưu trên server và tất cả những
thay đổi bạn tạo ra với các bản sao cục bộ ngay lập tức được đồng bộ với server.
Kết quả là, IMAP có những ưu điểm như sau:
 Mail được lưu trên server đầu xa, tức có thể truy cập từ nhiều địa điểm khác
nhau.
 Cần kết nối Internet để truy cập mail.
 Xem nhanh hơn khi chỉ có các tiêu đề mail được tải về đến khi nội dung được
yêu cầu rõ ràng.
 Mail được dự phịng tự động trên server.
 Tiết kiệm khơng gian lưu trữ cục bộ.
 Vẫn cho phép lưu mail cục bộ.
* Trong hai giao thức mail này, IMAP là lựa chọn tốt hơn nếu User cần kiểm tra
emails từ nhiều thiết bị, như là laptop rồi đến máy bàn, đến di động… POP3 tải email
từ Server về một máy tính, rồi sau đó lại xóa mail đó trên Server, vì vậy nếu muốn
kiểm tra email từ một máy tính khác thì sẽ có tình trạng là hộp thư thiếu hoặc không
hiện ra các email.

17


CHƯƠNG 3 . PHÂN TÍCH THIẾT KẾ HỆ THỐNG
1. Bài toán và yêu cầu:
 Bài toán: Xây dựng ứng dụng trên máy điện thoại quản lý thu chi. Chương
trình cho phép người dùng nhập, quản lý thu chi gửi dữ liệu đến email để lưu giữ.
 Yêu cầu:
- Người dùng nhập thơng tin các khoản thu/chi của mình theo ngày
- Thực hiện sao lưu dữ liệu thông qua phương thức gửi dữ liệu lưu trữ lên email.

- Thực hiện đồng bộ hóa dữ liệu của lần dùng trước khi dữ liệu đã bị xóa
2. Phân tích hệ thống:
a) Chức năng:
Hệ thống chỉ có duy nhất một tác nhân là người sử dụng phần mềm, gồm các
chức năng chính sau đây:
Quản lí thu chi theo ngày: Hiển thị danh sách các khoản thu/chi theo từng ngày,
gồm các chức năng nhỏ đi kèm như:
-Thêm mới một khoản thu/chi
-Cập nhật một khoản thu/chi
-Xóa một khoản thu/chi khỏi cơ sở dữ liệu
Thống kê theo tháng: Sẽ thực hiện việc thống kê tổng khoản thu/chi của tháng
hiện tại và vẽ sơ đồ thể hiện mối tương quan giữa các khoản chi theo từng loại.
Gửi email lưu trữ dữ liệu: Hệ thống sẽ gửi email về người dùng có nội dung về
các khoản thu/chi theo ngày được chọn kèm một tệp tin chứa cơ sở dữ liệu.
Phục hồi dữ liệu: Hệ thống sẽ nhận email và thực hiện đồng bộ hóa dữ liệu để
phục hồi những dữ liệu đã bị xóa.
b) Thiết kế hệ thống
* Mơi trường cài đặt
- Hệ điều hành: Window.
- Ngôn ngữ lập trình: Android
18


- Công cụ: Android Studio
- Cơ sở dữ liệu: SQLite
- Thư viện sử dụng: JavaMail
c) Giao thức gửi mail SMTP:
* Các bước thực hiện
Quy trình cài đặt các phương thức để gửi mail gồm các bước sau đây:
Bước 1: Cài đặt Properties: thông số khởi tạo Session

Bước 2: Tạo đối tượng Session: một phiên làm việc với Server
Bước 3: Soạn thảo Message
Bước 4: Gửi Message
* Thông số kết nối
Muốn kết nối được đến một Mail Server thì cần phải xác định được địa chỉ,
cổng, các phương thức kết nối. Mỗi Mail Server sẽ có các thơng số khác nhau, được
tìm thấy ở phần thông tin của Mail Server.
Properties props = new Properties();
props.put("mail.smtp.host", s"mtp.gmail.com");
props.put("mail.smtp.socketFactory.port", "465");
props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.port", "465");
* Đối tượng Session
Session ở javamail được hiểu là 1 phiên làm việc khi Mail Client giao tiếp với
Mail Server. Khi Mail Client làm việc với cùng một Server theo các cách khác nhau
(các giao thức khác nhau cho các mục đích khác nhau) thì đối tượng Session sẽ lưu
giữ những thơng tin của phiên làm việc.
Trong Java, việc tạo đối tượng Session được tiến hành như sau:
session = Session.getDefaultInstance(props,
new javax.mail.Authenticator() {
19


//Authenticating the password
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(Config.EMAIL,
Config.PASSWORD);
}
});

Trong đó: Config.EMAIL, Config.PASSWORD chính là tài khoản email cần
đăng nhập.
* Gửi mail
Các bước khởi tạo thì sẽ dùng chung các phương thức như khi nhận mail.
Muốn gửi một email thì cần phải có các nội dung đầu vào như sau: người gửi,
mật khẩu, người nhân, subject của email, nội dung email, các attachment.
Tồn bộ các thơng tin trên được đóng gói vào một đối tượng MimeMessage rồi
được gửi đi bằng phương thức:
Transport.send(message);
d) Giao thức nhận mail IMAP
* Các bước thực hiện
Quy trình cài đặt các phương thức để nhận mail gồm các bước sau đây:
Bước 1: Cài đặt Properties: thông số khởi tạo Session
Bước 2: Tạo đối tượng Session: một phiên làm việc với Server
Bước 3: Tạo đối tượng Store, kết nối với Server
Bước 4: Lấy Message
Bước 5: If Message khác rỗng then
Đọc Message
* Thông số kết nối
Muốn kết nối được đến một Mail Server thì cần phải xác định được địa chỉ,
cổng, các phương thức kết nối. Mỗi Mail Server sẽ có các thơng số khác nhau, được
tìm thấy ở phần thông tin của Mail Server.
20



×