Ứng dụng chat được xây dựng theo mô hình lai giữa Client-server và P2P: hệ thống có một server trung tâm dùng cho việc đăng ký người sử dụng và quản lý danh mục người sử dụng đang online
Trang 1BÀI TẬP LỚN 1
Môn học: Mạng Máy tính 1
1 Nhi ệ m v ụ :
Xây dựng ứng dụng chat theo một protocol được cung cấp sẵn, sử dụng giao thức
TCP/IP
2 Yêu c ầ u :
a Ứng dụng cho phép hai người sử dụng ở hai máy khác nhau có thể chat với nhau
b Một người có thể chat với nhiều người khác
c Ứng dụng chat được xây dựng theo mô hình lai giữa Client-server và P2P: hệ thống có một server trung tâm dùng cho việc đăng ký người sử dụng và quản lý danh mục người sử dụng đang online, quá trình chat được thực hiện trực tiếp giữa các client
d Ứng dụng cho phép truyền tải file trong quá trình chat giữa hai người
e Ứng dụng phải sử dụng Chat Proprocol được mô tả chi tiết ở phần dưới
3 Tri ể n khai:
Làm việc theo nhóm
Lớp KSTN mỗi nhóm có 3 bạn cùng chung nhóm thực hành
Các lớp còn lại mỗi nhóm có 4 bạn cùng chung nhóm thực hành
4 S ả n ph ẩ m ph ả i n ộ p:
a Báo cáo (hard và softcopy) gồm các nội dung sau:
i Chi tiết các yêu cầu về chức năng của ứng dụng
ii Chi tiết phương án và quá trình hiện thực ứng dụng iii Thiết kế chi tiết ứng dụng
iv Đánh giá kết quả hiện thực
v Các chức năng mở rộng của hệ thống ngoài các yêu cầu được qui định ở phần 2
vi Hướng dẫn sử dụng ứng dụng
b Mã nguồn chương trình (softcopy)
c Ứng dụng chat (softcopy) được biên dịch từ mã nguồn
5 Đánh giá:
Bài tập lớn 1 có giá trị bằng 10% điểm số của môn học
6 Th ờ i h ạ n n ộ p bài:
Trước 17g00 thứ sáu, ngày 30/10/2014
7 P2P Chat protocol:
Giao thức chat này chỉ qui định cách giao tiếp trong quá trình chat (giữa client – client)
a Đăng ký tài khoản chat với server
Khởi đầu client gởi đăng ký lên server theo định dạng sau:
<SESSION>
<PEER_NAME>Username</PEER_NAME>
Trang 2<PORT>port number</PORT>
</SESSION>
55
“Port number” là port mà Peer sẽ sử dụng để chat
b Thông báo server tình trạng online
Định kỳ sau 15s, client gửi cập nhật trạng thái cho biết mình vẫn còn online
<SESSION_KEEP_ALIVE>
<PEER_NAME>Username</PEER_NAME>
<STATUS>ALIVE</STATUS>
</SESSION_KEEP_ALIVE>
c Thông báo server tình trạng offline
Trước khi client offline, client sẽ thông báo cho server theo định dạng sau
<SESSION_KEEP_ALIVE>
<PEER_NAME>Username</PEER_NAME>
<STATUS>OOPS >>>WILL BE KILLED<<< </STATUS>
</SESSION_KEEP_ALIVE>
Trong trường hợp peer offline mà không thông báo cho server, server sẽ đóng kết nối và xóa ra khỏi danh sách thành viên nếu không nhận được thông báo tình trạng online từ client
trong 1 phút.
d Phản hồi đăng ký từ phía server khi có client đăng ký
Server sẽ kiểm tra Username đăng ký có bị trùng hay không
Nếu Username đó bị trùng Server sẽ gửi thông báo từ chối
<SESSION_DENY />
Nếu Username không bị trùng thì Server sẽ gửi phản hồi là danh sách các người dùng trong mạng theo cú pháp sau
<SESSION_ACCEPT>
<PEER>
<PEER_NAME>Username 1</PEER_NAME>
<IP>IP address 1</IP>
<PORT>port number 1</PORT>
</PEER>
<PEER>
<PEER_NAME>Username 2</PEER_NAME>
<IP>IP address 2</IP>
<PORT>port number 2</PORT>
</PEER>
Trang 3<PEER>
<PEER_NAME>Username n</PEER_NAME>
<IP>IP address n</IP>
<PORT>port number n</PORT>
</PEER>
</SESSION_ACCEPT>
e Gửi yêu cầu kết nối chat giữa client – client
<CHAT_REQ>
<PEER_NAME>Username</PEER_NAME >
</CHAT_REQ>
Username là tên của bên gửi yêu cầu
f Phản hồi của client với một yêu cầu chat từ client khác
Client không chấp nhận chat
<CHAT_DENY />
Client chấp nhận chat
<CHAT_ACCEPT />
g Gửi một chat message
<CHAT_MSG>Chat message</CHAT_MSG>
h Yêu cầu chuyển file
Nội dung Mục đích sử dụng Ghi chú
<FILE_REQ>File
trình chat “File Name” là tên của file cần chuyển
Sau khi chat session được khởi tạo giữa hai peer, cả hai peer đều có thể gởi yêu cầu chuyển file
khi có có yêu cầu chuyển file
<FILE_REQ_ACK>
<PORT>port number</PORT>
</FILE_REQ_ACK>
Xác nhận yêu cầu chuyển file
từ phía nhận Port number là port mà phía nhận sẽ sử dụng
để nhận file
Chỉ được sử dụng sau khi có có yêu cầu chuyển file
Trang 4<FILE_DATA_BEGIN /> Bắt đầu chuyển file, được đưa
ra từ phía chuyển
Quá trình chuyển file chỉ có thể được thực hiện sau khi bên gửi
và nhận đồng ý Trong quá trình chuyển file, hai phía đều có thể gửi những chat message
<FILE_DATA> File data unit in
Trong trường hợp file lớn, file
có thể cắt thành nhiều đoạn
nhỏ và chuyển từng đoạn Lưu
ý: kích thước tối đa mỗi message là MAX_MSG_SIZE.
Có thể chuyển được file nhị phân và file
văn bản Lưu ý: tất
cả nội dung của file được chuyển dưới dạng binary.
ra
sử dụng bởi bất kỳ bên chat nào
Không thể gửi được chat message và chuyển file sau khi đã đóng chat session Nếu một bên đưa ra yêu cầu đóng, trong khi bên kia vẫn còn đang chat hoặc chuyển file, thì dữ liệu không được xử
lý và bị mất
một message (không
kể các tag), áp dụng cho nội dung chat và
dữ liệu trong quá trình truyền file
Ghi chú: trong trường hợp cần sử dụng các thông tin về các thông số về địa chỉ IP và port
mà chúng không được chỉ rõ trong các trường của protocol, thì các thông tin này được lấy
ra từ socket gửi tới
Lưu ý : Hai ký tự ‘<’ và ‘>’ là hai ký tự đặc biệt đối với P2P Chat protocol Nếu hai ký tự
này được sử dụng trong nội dung dữ liệu được truyền tải nội dung chat, cần phải sử dụng escape character theo qui tắc sau:
- Để chuyển một ký tự ‘<’ trong nội dung, cần thêm một ký tự ‘<’ đi kèm trước nó
- Để chuyển một ký tự ‘>’ trong nội dung, cần thêm một ký tự ‘>’ đi kèm phía trước
Trang 5- Ví dụ:
o Để chuyển chuỗi: “Tag <CHAT_MSG> dùng cho chat message” trong nội dung chat Chuỗi trên sẽ được chuyển thành: “Tag <<CHAT_MSG>> dùng cho chat message”
o Để chuyển chuỗi: “ a >> b”, chuỗi sẽ được chuyển thành: “a >>>>b”