BỘ GIÁO DỤC VÀ ĐÀO TẠO
ĐẠI HỌC ĐÀ NẴNG
-----o0o-----
BÁO CÁO
TIỂU LUẬN MÔN HỌC
HỆ PHÂN TÁN
ĐỀ SỐ 17
I. Trật tự từng phần và vấn đề đồng bộ hóa các tiến trình
II. Tự mình đặt ra 1 bài toán (ví dụ giải phương trình bậc 2), lập trình
giải trên máy đơn rồi trên mạng máy tính. Hãy rút ra những kết luận quan
trọng về phân tán.
Giáo viên hướng dẫn:
PGS TS Lê Văn Sơn
Học viên :
Bùi Tấn Ngọc
Đà Nẵng – 2012
Tiểu luận môn học Hệ phân tán
Lời mở đầu
Ngày nay, công nghệ thông tin đang phát triển rất mạnh mẽ. Từ các quốc gia có
nền kinh tế kém phát triển đến các cường quốc kinh tế cũng đều có nhu cầu rất lớn về
xử lý thông tin. Nhu cầu thu thập thông tin có thể xuất phát từ nhiều nguồn khác nhau
và ở cách xa nhau. Vấn đề đặt ra là làm thế nào chúng ta có thể xử lý thông tin ở cách
xa nhau một cách nhanh nhất và hiệu quả nhất giữa các hệ thống tin học, mà không
xảy ra tranh chấp trong việc thu thập và xử lý thông tin giữa các hệ thống tin học ở
khắp nơi trên thế giới.
Để giải quyết vấn đề này thì việc thiết kế các chiến lược đồng bộ hóa các tiến
trình trong các hệ thống tin học phân tán là rất cần thiết và được quan tâm chú ý rất
nhiều.
Phân tán hóa các quá trình xử lý, tạo nên ưu thế của hệ có thể đáp ứng việc giải
quyết các bài toán lớn, một cách nhanh chóng. Nhưng cũng tạo tính phức tạp, nan giải
trong các yêu cầu thiết lập hệ. Việc hợp lực của các thành viên trong hệ, dẫn đến hàng
loạt các vấn đề như: định danh, cấp phát tài nguyên dùng chung (đảm bảo tránh tương
tranh), giải quyết sự cố tạo nên tính tin cậy của hệ. Để đảm bảo tính gắn bó của hệ,
yêu cầu đặt ra trước hết là đồng bộ hóa các tiến trình. Với hệ phân tán (không có bộ
nhớ chung, bộ tạo xung đồng hồ chung), khả năng gắn bó và việc đồng bộ hóa cho hệ
chỉ dựa trên phương tiện duy nhất là truyền thông điệp, nên lời giải cho yêu cầu đồng
bộ hóa thường chỉ dừng lại ở mức chấp nhận được đối với mỗi hệ .
Trong phạm vi của tiểu luận này tôi chỉ đề cập đến một khía cạnh nhỏ trong hệ
tin học phân tán đó là “Trật tự từng phần và vấn đề đồng bộ hóa các tiến trình”,
và viết chương trình giải phương trình bậc hai bằng máy đơn và bằng hệ phân tán.
Để hoàn thành tiểu luận này, tôi xin chân thành cám ơn sự chỉ bảo tận tình của
Thầy giáo: PGS.TS.Lê Văn Sơn và các bạn học viên trong lớp . Tuy nhiên chắc hẳn
vẫn còn nhiều thiếu sót, kính mong sự góp ý của thầy giáo và các bạn .
Học viên: Bùi Tấn Ngọc
1
Tiểu luận môn học Hệ phân tán
PHẦN I: LÝ THUYẾT
TRẬT TỰ TỪNG PHẦN
VÀ VẤN ĐỀ ĐỒNG BỘ HÓA CÁC TIẾN TRÌNH
CHƯƠNG 1: TỔNG QUAN VỀ HỆ PHÂN TÁN
1. Định nghĩa hệ p
1.1. Hệ phân tán là một hệ thống. Trong đó, các chức năng và dữ liệu được phân tán
trên các trạm kết nối với nhau thông qua một mạng máy tính
1.2 Hệ phân tán là tập hợp các máy tính độc lập, được kết nối với nhau bởi một mạng
máy tính và được cài đặt phần mềm phân tán.
Học viên: Bùi Tấn Ngọc
2
Tiểu luận môn học Hệ phân tán
Hệ phân tán = Mạng máy tính + phần mềm phân tán
1.3
Hệ phân tán là một tập hợp các bộ đôi vi xử lí + bộ nhớ được kết nối qua mạng
truyền thông và tích hợp logic bằng hệ điều hành phân tán hay một hệ cơ sở dữ liệu
phân tán.
Ví dụ về các hệ phân tán:
– Tổ hợp các Web server: cơ sở dữ liệu phân tán cho siêu văn bản và tài
liệu đa phương tiện
– Hệ thống file phân tán trong một mạng LAN
– Dịch vụ tên miền (Domain Name Service - DNS)
– Cray XT5 & CLE (multiprocessor quy mô lớn)
Học viên: Bùi Tấn Ngọc
3
Tiểu luận môn học Hệ phân tán
Như vậy, hệ tin học phân tán có thể bao gồm bốn thực thể như sau:
Phần
cứng
Dữ
liệu
Phần
mềm
Truyền
thông
Tóm lại: Hệ tin học phân tán (hệ phân tán) là hệ thống xử lý thông tin bao gồm nhiều
bộ xử lý hay vi xử lý nằm tại các vị trí khác nhau và được liên kết với nhau thông qua
phương tiện viễn thông dưới sự điều khiển thống nhất của một hệ điều hành.
Hệ phân tán có các ưu điểm căn bản so với hệ tập trung, như sau:
-
Tăng tốc độ bình quân trong tính toán, xử lý.
Cải thiện tình trạng luôn sẵn sàng của các loại tài nguyên.
Tăng độ an toàn cho dữ liệu.
Đa dạng hoá các loại hình dịch vụ tin học.
Đảm bảo tính toàn vẹn của thông tin.
2. Ưu và nhược
-
Cơ
-
à
Học viên: Bùi Tấn Ngọc
4
Tiểu luận môn học Hệ phân tán
- Thời hạn truyền thông tin trong hệ không giống nhau, các thông điệp có thể bị mất
trong quá trình chuyển tải, các thông điệp có thể được truyền kép và hệ thống có thể
rơi vào sự cố.
- Một (hay nhiều) máy tính cấu thành của hệ phân tán có thể bị sự cố và hoạt động
của toàn hệ trở nên kém hiệu quả.
-
phân
liên
à
Học viên: Bùi Tấn Ngọc
5
Tiểu luận môn học Hệ phân tán
CHƯƠNG 2:
TRẬT TỰ TỪNG PHẦN
VÀ VẤN ĐỀ ĐỒNG BỘ HÓA CÁC TIẾN TRÌNH
1.
Đồng bộ tiến trình
1.1 Bài toán đồng bộ hóa
Công việc không thể được tiến hành nếu nó không được bộ xử lý tiếp nhận và thực
hiện: bộ xử lý là một tài nguyên của hệ thống được sử dụng để hoàn thành công việc.
Có thể coi chương trình đang thực hiện như một tiến trình.
Các tiến trình không tồn tại một cách độc lập trong máy tính, chúng hợp tác với
nhau để thực hiện các công việc của người sử dụng và chúng cạnh tranh với nhau để
sử dụng chung các tài nguyên hữu hạn: các bộ xử lý hoặc các file thông tin. Hai đặc
trưng hợp tác và cạnh tranh dẫn tới sự cần thiết của các liên lạc giữa các tiến trình.
Để làm rõ tính quan trọng của việc đồng bộ hóa tiến trình chúng ta xét ví dụ sau:
Giả sử rằng:
- Một chương trình có biến counter = 5
- Người sử dụng 1 và 2 thực thi đồng hành câu lệnh “counter++” và “counter--”.
- Sau việc thực thi hai câu lệnh này, giá trị của biến counter có thể là 4, 5 hay 6?
- Kết quả chỉ đúng khi biến counter == 5, được tạo ra đúng nếu tiến trình người sử
dụng 1 và 2 thực thi riêng biệt.
Chúng ta có thể minh hoạ giá trị của counter có thể không đúng như sau :
register1 = counter
register1 = register1 + 1
counter = register1
Học viên: Bùi Tấn Ngọc
6
Tiểu luận môn học Hệ phân tán
Ở đây register1 là một thanh ghi CPU cục bộ. Tương tự, câu lệnh “counter--” được
cài đặt như sau:
register2 = counter
register2 = register2 - 1
counter = register2
Ở đây register2 là thanh ghi CPU cục bộ. Dù là register1 và register2 có thể dùng
cùng thanh ghi vật lý, nhưng nội dung của thanh ghi sẽ được lưu lại và lấy lại bởi bộ
quản lý ngắt.
Thực thi đồng hành của “counter++” và “counter--” là tương tự như thực thi tuần
tự ở đây các câu lệnh cấp thấp hơn được hiện diện trước bị phủ lắp trong thứ tự bất kỳ.
Một sự phủ lắp là:
T0: Người 1 thực thi register1 = counter {register1 = 5}
T1: Người 1 thực thi register1 = register1 + 1 {register1 = 6}
T2: Người 2 thực thi register2 = counter {register2 = 5}
T3: Người 2 thực thi register2 = register2 – 1{register2 = 4}
T4: Người 1 thực thi counter = register1 {counter = 6}
T5: Người 2 thực thi counter = register2 {counter = 4}
Chú ý rằng, chúng ta xem xét tình trạng không đúng “counter == 4”, theo đó có 4
vùng đệm đầy, nhưng thực tế khi đó có 5 vùng đệm đầy. Nếu chúng đổi ngược lại thứ
tự của câu lệnh T4 và T5, chúng ta sẽ có trạng thái không đúng “counter == 6”.
Chúng ta đi đến trạng thái không đúng này vì chúng ta cho phép cả hai quá trình
thao tác đồng thời trên biến counter. Trường hợp tương tự, ở đây nhiều quá trình truy
xuất và thao tác cùng dữ liệu đồng hành và kết quả của việc thực thi phụ thuộc vào thứ
tự xác định trong đó việc truy xuất xảy ra, được gọi là điều kiện cạnh tranh (race
condition). Để ngăn chặn điều kiện cạnh tranh ở trên, chúng ta cần đảm bảo rằng chỉ
một quá trình tại một thời điểm có thể được thao tác biến counter. Để thực hiện việc
Học viên: Bùi Tấn Ngọc
7
Tiểu luận môn học Hệ phân tán
đảm bảo như thế, chúng ta yêu cầu một vài hình thức đồng bộ hoá quá trình. Những
trường hợp như thế xảy ra thường xuyên trong các hệ điều hành khi các phần khác
nhau của hệ thống thao tác các tài nguyên và chúng ta muốn các thay đổi không gây
trở ngại một sự thay đổi khác.
1.2 Miền găng
Xét một hệ thống gồm n tiến trình (P0, P1, … ,Pn-1 ). Mỗi tiến trình có một phân
đoạn mã, được gọi là miền găng, trong đó quá trình này có thể thay đổi những biến
dùng chung, cập nhật một bảng, viết đến tập tin...Đặc điểm quan trọng của hệ thống là
ở chỗ, khi một quá trình đang thực thi trong vùng tương trục, không có tiến trình nào
khác được phép thực thi trong vùng tương trục của nó. Do đó, việc thực thi của các
vùng tương trục bởi các tiến trình là sự loại trừ hỗ tương. Vấn đề miền găng là thiết kế
một giao thức mà các quá trình có thể dùng để cộng tác. Mỗi tiến trình phải yêu cầu
quyền để đi vào vùng tương trục của nó. Vùng mã thực hiện yêu cầu này là phần đi
vào (entry section). Vùng tương trục có thể được theo sau bởi một phần kết thúc (exit
section). Mã còn lại là phần còn lại (remainder section). Cấu trúc chung của một quá
trình điển hình P i:
do {
entry section
critical section
exit section
remainder section
} while (1);
Một giải pháp đối với vấn đề miền găng phải thoả mãn ba yêu cầu sau:
Loại trừ hỗ tương: Nếu quá trình Pi đang thực thi trong miền găng của nó thì không
tiến trình nào khác đang được thực thi trong miền găng đó.
Progress: nếu không có tiến trình nào đang thực thi trong miền găng và có vài tiến
trình muốn vào miền găng thì chỉ những tiến trình không đang thực thi phần còn lại mới
Học viên: Bùi Tấn Ngọc
8
Tiểu luận môn học Hệ phân tán
có thể tham gia vào việc quyết định tiến trình nào sẽ đi vào vùng găng tiếp theo và chọn
lựa này không thể trì hoãn vô hạn định.
Chờ đợi có giới hạn (bounded wait): giới hạn số lần các tiến trình khác được phép
đi vào miền găng sau khi một tiến trình thực hiện yêu cầu để đi vào miền găng của nó và
trước khi yêu cầu đó được gán.
1.3 Vấn đề đồng bộ hóa các tiến trình trong hệ phân tán
Trình tự và đồng bộ các tiến trình chỉ ra các vấn đề đồng bộ có thể dẫn đến phải
thiết chế một trật tự tổng quát của các sự kiện diễn ra trong hệ. Cần xác định mối liên
hệ trao đổi thông qua các thông điệp với thời hạn truyền khác nhau, những thông tin
tạm thời trao đổi không có giá trị tuyệt đối và trình tự tổng quát cần phải được thể hiện
bằng phương tiện giải thuật đảm bảo hoạt động nhịp nhàng giữa các tiến trình có liên
quan.
Trong tất cả các hệ thống tin học, đồng bộ hóa các tiến trình mang tính cấp thiết về
mặt nguyên lý và kỹ thuật thể hiện ở hai nguyên do cơ bản sau đây:
Các tiến trình kể cả các tiến trình xuất phát từ các ứng dụng độc lập muốn
truy cập vào tài nguyên với các số lượng vốn rất hạn chế hay truy cập vào thông
tin dùng chung cùng một lúc. Trường hợp này gọi là truy cập tương tranh. Vì vậy,
tương tranh là nguyên nhân chính của các xung đột giữa các tiến trình muốn truy
cập vào tài nguyên dùng chung.
Các tiến trình của cùng một hệ ứng dụng hoạt động theo kiểu hợp lực để giải
quyết các bài toán đặt ra và cho kết quả nhanh chóng nhất. Điều này cho phép tăng
hiệu năng sử dụng thiết bị và hiệu quả hoạt động của chương trình. Vì vậy hợp lực
là nguyên nhân chính của sự tác động tương hỗ được lập trình giữa các tiến trình
nhằm cho phép chúng tham gia vào các hoạt động chung.
2.
Đồng bộ hóa bằng phương pháp trật tự từng phần
Trong các hệ thống tin học tập trung vấn đề đồng bộ hóa được giải quyết thông
qua cơ chế loại trừ tương hỗ. Cơ chế này cho phép xác lập trật tự hoàn toàn các sự
Học viên: Bùi Tấn Ngọc
9
Tiểu luận môn học Hệ phân tán
kiện. Trong thực tiễn, có một số hệ thống vấn đề về đồng bộ hóa chỉ đòi hỏi trật tự
từng phần. Chính vì vậy trật tự hóa từng phần giữa các sự kiện mà các tiến trình của
nó cần phải đồng bộ là vấn đề cần quan tâm giải quyết.
Trong các hệ thống phân tán, việc đồng bộ hóa chỉ đặt ra duy nhất vấn đề thiết
lập một trật tự giữa các sự kiện. Giữa các trạm khác nhau, trật tự đó chỉ thể hiện được
thông qua việc trao đổi các thông điệp với nhau.
Giả sử rằng ta có thể xác định một trật tự giữa các sự kiện của hệ phân tán nhờ
vào quan hệ được ký hiệu là và gọi là “có trước”. Quan hệ này tối thiểu phải thỏa
mãn được các ràng buộc thể hiện qua hai cách:
+ Nếu A và B là hai sự kiện của cùng một trạm và nếu A được thực hiện trước B
thì theo trật tự cục bộ của trạm ta có: A B.
+ Nếu A là phát thông điệp bởi một trạm nào đó và nếu B là thu của thông điệp
này thì ta có A B.
Trật tự từng phần của các sự kiện
A1
B1
A1A2A3A4A5
A2
B2
B1B2B3B4B5
A3
B3
Trao đổi thông điệp
A4
B4
A5
B5
A2B2 và B3A4
t
Chuyển qua
A1A2B2B3B4 B5
Ví dụ: Mô tả trật tự từng phần
B1B2B3A4A5
A1A2B2B3A4A5
Xét mô hình quen thuộc trong phần nguyên lý hệ điều hành là người sản xuấtngười tiêu thụ, trong đó khả năng tiêu thụ là nguyên nhân chính hạn chế số lượng
hàng hóa sản xuất ra để nó không vượt quá số lượng tiêu thụ một giá trị lớn hơn N.
Người sản xuất P và người tiêu thụ C là hai người nằm trên hai trạm cách xa nhau.
Học viên: Bùi Tấn Ngọc
10
Tiểu luận môn học Hệ phân tán
Giả sử rằng NP là số lượng sản xuất ra và NC là số lượng tiêu thụ tại thời điểm
khởi sự. C chỉ tiêu thụ được một sản phẩm, nếu sản xuất sản phẩm đó đã diễn ra, có
nghĩa là, nếu
NP – NC > 0
Tương tự, P chỉ sản xuất một thông tin, nếu
NP – NC < N
Hai quan hệ này thể hiện các điều kiện của việc đồng bộ hóa và có thể mô tả
trong hình sau:
P1
C1
P2
C2
Pi : Sản xuất thứ i
Pi
Ci
Ci : Tiêu thụ thứ i
Ci+1
Pi+N
Pi+N+1
Hình 2: Quan hệ có trước trong mô hình
người sản xuất- người tiêu thụ
Học viên: Bùi Tấn Ngọc
11
Tiểu luận môn học Hệ phân tán
Trong hệ thống tin học phân tán, người ta có thể vận dụng hợp lực này theo kiểu như
sau:
- Ta đưa vào:
Diễn giải
STT
1
2
Trên trạm P một biến NP thể hiện số lượng chính xác sản xuất
đã có.
Trên trạm C một biến NC thể hiện số lượng chính xác tiêu thụ
đã thực hiện.
- Ta đưa vào:
STT
Diễn giải
1
Trên trạm P một biến NC’ ảnh của NC mà P gia tăng mỗi một
lần nó nhận được thông điệp từ C báo cho nó biết là tiêu thụ
mới đã diễn ra.
2
Trên trạm C một biến NP’ ảnh của NP mà C gia tăng mỗi một
lần nó nhận thông điệp từ P báo cho nó biết một sản xuất mới đã
diễn ra.
Ta sẽ chứng minh rằng một sự đồng bộ hóa chính xác được đảm bảo bằng việc
xác nhận trên mỗi trạm các điều kiện sau đây:
1/ Trên trạm sản xuất:
NP’ – NC > 0
2/ Trên trạm tiêu thụ:
NP – NC’ < N
Ta có thể viết:
NP = NP’ + np, với np > 0
trong đó, np số lượng thông tin đã sản xuất bởi P mà C không biết,
Học viên: Bùi Tấn Ngọc
12
Tiểu luận môn học Hệ phân tán
NC = NC’ + nc, với nc > 0
trong đó, nc số lượng thông tin đã tiêu thụ bởi C mà P không biết.
Ta có thể khái quát hóa phương pháp này cho điều kiện đồng bộ hóa bằng công thức:
C i Xi > K
(theo i)
trong đó, Ci và K là các hằng số. Ta hoàn toàn có khả năng và điều kiện mạnh hơn
bằng cách thay thế tất cả các Xi mà hệ số của nó là đại lượng dương bằng các ảnh của
nó X’i , nếu và chỉ nếu các Xi là các biến không lùi.
Vì nguyên nhân xa cách giữa người sản xuất và người tiêu thụ mà trật tự tổng
quát này không cần thiết và chỉ cần sủ dụng để đồng bộ hóa các bản sao các biến trạng
thái gần đúng là đủ.
Trong hệ thống người sản xuất - người tiêu thụ, nếu N = 1, thì có sự liên kết chặt
chẽ giữa hai tiến trình cho phép xác định một trật tự chặt chẽ giữa các sự kiện.
Cơ chế đồng bộ ở đây là dùng các công tơ sự kiện phù hợp với từng vấn đề đặt
ra. Mỗi một công tơ, biến nguyên không lùi, được kết hợp với một nhóm đặc biệt các
sự kiện.
Trên một công tơ sự kiện nào đó có phối hợp với nhóm E nào đó, được xác định
bởi ba hàm nguyên thủy:
+ Tang_len(E) : Tăng nội dung công tơ lên 1 đơn vị, cũng có nghĩa là một
sự kiện nhóm E đến.
+ Truy_van(E) : Cung cấp giá trị hiện hành của công tơ phối hợp với E
+ Cho(E,n) : Treo tiến trình gọi chừng nào giá trị công tơ còn nhỏ hơn n.
Mỗi công tơ được khởi động ngay khi thành lập nó.
Với bài toán người sản xuất - người tiêu thụ, cần định nghĩa:
Hai công tơ sự kiện NP’ và NC’, được khởi động bằng giá trị 0.
Hai biến nguyên NP và NC, khởi sự là 0, là cục bộ đối với tiến trình người sản
xuất P và người tiêu thụ C.
Các tiến trình có thể viết như sau:
Học viên: Bùi Tấn Ngọc
13
Tiểu luận môn học Hệ phân tán
Người sản xuất
Người tiêu thụ
Vòng lặp
Vòng lặp
cho(NC’, NP-N+1)
cho(NP’, NC+1)
{Chuyển khi NP - NC’ < N}
{Chuyển khi NP’ - NC > 0}
san_xuat
tieu_thu
tang(NP’)
tang(NC’)
NP := NP+1
NC := NC+1
Kết thúc vòng lặp
Học viên: Bùi Tấn Ngọc
Kết thúc vòng lặp
14
Tiểu luận môn học Hệ phân tán
PHẦN II: BÀI TẬP
Đề bài: Tự mình đặt ra 1 bài toán (ví dụ giải phương trình bậc 2), lập trình giải
trên máy đơn rồi trên mạng. Hãy rút ra những kết luận quan trọng về phân tán.
1.Chương trình giải phương trình bậc hai, viết bằng ngôn ngữ Java chạy trên
máy đơn
import java.util.Scanner;
import java.lang.Math;
public class PT_BAC_2 {
public static void main(String[] args) {
double a, b, c, x1, x2, delta;
Scanner input = new Scanner(System.in);
do {
System.out.print("Nhap he so a = "); a = input.nextFloat();
} while (a == 0);
System.out.print("Nhap he so b = "); b = input.nextFloat();
System.out.print("Nhap he so c = "); c = input.nextFloat();
delta = (b*b) - (4*a*c);
if(delta < 0) System.out.println("Phuong trinh vo nghiem ");
else if (delta == 0) { x1 = -b/(2*a);
System.out.println("Phuong trinh co nghiem duy nhat" + x1); }
else {
x1 = (-b + Math.sqrt(delta))/(2*a);
x2 = (-b - Math.sqrt(delta))/(2*a);
Học viên: Bùi Tấn Ngọc
15
Tiểu luận môn học Hệ phân tán
System.out.println("Phuong trinh co 2 nghiem" );
System.out.println(" x1 = " + x1);
System.out.println(" x2 = " + x2);
} } }
Chạy chương trình, kết quả như hình sau:
Nhận xét:
- Đây là mô hình hệ tin học tập trung.
- Chương trình chỉ chạy trên máy đơn, chương trình sử dụng các tài nguyên
trên một máy đơn (bộ vi xử lý, bộ nhớ…) để xử lý và cho kết quả, mà không cần phải
truy cập mạng hay sử dụng tài nguyên của các hệ thống khác.
Học viên: Bùi Tấn Ngọc
16
Tiểu luận môn học Hệ phân tán
2. Chương trình giải PT bậc hai trên mạng theo mô hình Client – Server:
2.1 Tìm hiểu sơ bộ cách lập trình mạng Client-Server:
Lập trình Client-Server: Là viết ứng dụng gồm hai chương trình: Chương trình Client
và chương trình Server. Chương trình Client gởi yêu cầu đến chương trình Server.
Chương trình Server xử lý yêu cầu và trả kết quả về cho chương trình Client, rồi
Client in kết quả ra màn hình
Client
Client
Gởi yêu cầu
Client
Nhận kết quả
Server
Client
Chương trình Server phải có khả năng phục vụ đồng thời nhiều client bằng cách tạo ra
nhiều thread, mỗi thread phục vụ một client
Thread t1, t2 phục vụ các yêu cầu của Client1, Client 2. Các thread t1, t2 được hệ
điều hành hoặc ngôn ngữ lập trình cho thực thi đồng thời bằng cách chia xẻ CPU
2.2 Các bước viết chương trình mô hình Client - Server bằng java sử dụng giao
thức TCP.
- Bước 1 : Thiết lập các thông số kết nối cho Server
ServerSocket sksv = new ServerSocket(6789);
Học viên: Bùi Tấn Ngọc
17
Tiểu luận môn học Hệ phân tán
// 6789 là số hiệu cổng sẽ truyền thông với Client, số hiệu cổng trên Client phải giống
trên Server
- Bước 2 : Thiết lập cho Client để kết nối tới Server
Socket skcl = new Socket("Tên_máy_chủ", 6789);
// Tên_máy_chủ có thể thay bằng IP máy chủ
- Bước 3 : Server chấp nhận kết nối từ Client
Socket client = sksv.accept();
- Bước 4: Khi Client và Server đã có thể truyền thông với nhau thì bắt đầu thực hiện
các yêu cầu của bài toán.
2.3 Viết chương trình giải phương trình bậc 2 bằng Java sử dụng giao thức TCP
2.3.1 Chương trình Client
import java.io.*;
import java.net.*;
public class PT_BAC2_TCP_CLIENT {
public static void main(String[] args) throws Exception
{
while(true){
// Tao socket ket noi den Server có IP: 192.168.1.10
Socket skcl = new Socket("192.168.1.10", 6789);
DataInputStream input = new DataInputStream(System.in);
double a,b,c;
// Nhap cac he so a,b,c
do // Nhap he so a<>0, neu a=0 nhap lai
{ System.out.print("Nhap he so a = ");
a = Double.parseDouble(input.readLine().trim());
} while(a == 0);
Học viên: Bùi Tấn Ngọc
18
Tiểu luận môn học Hệ phân tán
System.out.print("Nhap he so b = ");
b = Double.parseDouble(input.readLine().trim());
System.out.print("Nhap he so c = ");
c = Double.parseDouble(input.readLine().trim());
// Sau khi nhap xong, gui len Server qua doi tuong DataOutputStream
DataOutputStream toServer = new DataOutputStream(skcl.getOutputStream());
// Gui tung so a, b, c len Server
toServer.writeDouble(a);
toServer.writeDouble(b);
toServer.writeDouble(c);
// Nhan ket qua tra ve tu Server
DataInputStream fromServer = new DataInputStream(skcl.getInputStream());
// Doc chuoi ket qua tra ve tu Server
String ketqua = fromServer.readUTF();
// In ra man hinh ket qua
System.out.println(ketqua);
// Dong ket noi
skcl.close();
} }
}
2.3.2 Chương trình Server
import java.io.*;
import java.net.*;
public class PT_BAC2_TCP_SERVER {
public static void main(String[] args) throws Exception {
// Tao socket Server de nhan yeu cau tu Client qua cong 6789
Học viên: Bùi Tấn Ngọc
19
- Xem thêm -