6et4280 - nhom 3 - phan mem chat tren android
TRANSCRIPT
ĐẠI HỌC BÁCH KHOA HÀ NỘI
Báo cáo Project
Môn học: Kỹ thuật mạng nâng cao
Đề tài: Phần mềm chat trong mạng LAN trên Android
Giảng viên hướng dẫn: T.S Trần Minh Trung
Nhóm thực hiện: Nhóm 3
Họ tên Mã số sinh viên Lớp Nguyễn Thế Mạnh 20091740 Điện Tử Viễn Thông 11 – K54 Nguyễn Duy Khánh 20091439 Điện Tử Viễn Thông 11 – K54 Nguyễn Văn Hưng 20091384 Điện Tử Viễn Thông 11 – K54 Nguyễn Bá Nguyên 20091932 Điện Tử Viễn Thông 11 – K54
Hà Nội, tháng 12, năm 2013
1
MỤC LỤC LỜI GIỚI THIỆU ......................................................................................................................................... 2
I. GIỚI THIỆU ĐỀ TÀI VÀ LẬP KẾ HOẠCH THỰC HIỆN .......................................................... 3
1. Giới thiệu đề tài ............................................................................................................................... 3
2. Lập kế hoạch thực hiện .................................................................................................................. 3
II. PHÂN TÍCH YÊU CẦU VÀ PHÂN CÔNG NHIỆM VỤ ........................................................... 3
1. Yêu cầu chức năng của phần mềm ................................................................................................ 3
2. Yêu cầu phi chức năng của phần mềm.......................................................................................... 5
3. Phân chia công việc cho các thành viên ........................................................................................ 5
III. GIỚI THIỆU VỀ LẬP TRÌNH ỨNG DỤNG ANDROID ........................................................... 6
1. Hệ điều hành Android .................................................................................................................... 6
2. Lập trình ứng dụng trên Android ................................................................................................. 7
3. Lập trình ứng dụng mạng .............................................................................................................. 7
IV. THIẾT KẾ CHƯƠNG TRÌNH ...................................................................................................... 8
1. Thiết kế giao diện ............................................................................................................................ 8
2. Truyền dữ liệu giữa các thiết bị. .................................................................................................... 9
2.1. Socket. ............................................................................................................................................ 9
2.2.Truyền dữ liệu. ............................................................................................................................... 9
2.3. Kịch bản trao đổi bản tin giữa các thiết bị trong mạng ............................................................. 10
3. Phân chia các module chức năng ................................................................................................. 12
4. Module tìm kiếm thiết bị trong mạng LAN ................................................................................ 12
5. Module thực hiện chức năng chat text ........................................................................................ 13
6. Module tính toán khoảng cách từ thiết bị tới bộ phát WiFi ...................................................... 14
7. Module thực hiện chức năng truyền/nhận file ........................................................................... 18
V. TRIỂN KHAI THỰC HIỆN ............................................................................................................ 19
1. Module tìm kiếm các thiết bị có trong mạng LAN ..................................................................... 19
2. Các loại bản tin thông báo truyền giữa các thiết bị ................................................................... 21
3. Thực hiện chức năng trò chuyện bằng văn bản (chat text) ....................................................... 22
4. Thực hiện tính toán khoảng cách thiết bị tới bộ phát sóng WiFi ............................................. 22
5. Thực hiện chức năng truyền và nhận file thông qua socket ...................................................... 22
6. Truyền và nhận file sử dụng WiFi P2P ....................................................................................... 23
VI. KẾT QUẢ VÀ ĐÁNH GIÁ .......................................................................................................... 24
2
LỜI GIỚI THIỆU Khi đời sống được nâng cao cùng với khoa học kỹ thuật phát triển, nhu cầu giải trí
cũng đá dạng lên. Các loại hình giải trí không ngừng gia tăng và ngày càng phong phú, đa
dạng với một loạt ứng dụng như: nghe nhạc, xem phim, mạng xã hội, chat… Trong bối
cảnh Internet bùng nổ cùng với sự xuất hiện của những thiết bị di động như: điện thoại
Smart Phone, máy tính bảng… Điều này đã đem lại những lợi ích không thể phủ nhận
như kết nối hàng triệu người chỉ với kết nối mạng, trao đổi thông tin nhanh chóng, tiện
lợi, liên lạc với đối tác trong công việc… Con người đang ngày càng có nhu cầu giao tiếp
không chỉ trực tiếp mà còn ngay cả ở trên mạng.
Với sự phát triển vượt bậc và những lợi ích của nó, có thể nói hiện nay các thiết bị
di động Android đang có mặt khắp nơi từ những văn phòng cho đến khu giải trí. Xuất
phát từ ý tưởng đó, nhóm em lựa chọn đề tài thiết kế một ứng dụng Chat trên thiết bị
Android. Ứng dụng này ra đời nhằm phục vụ cho những nhân viên văn phòng có nhu cầu
trao đổi với nhau trong công việc và giải trí. Với thiết bị di động và truy cập vào cùng
một mạng Wifi, người dùng có thể trao đổi với nhau dễ dàng, nhanh chóng và thuận lợi.
Trong ứng dụng, các phòng chat được phân chia giúp người dùng dễ dàng lựa chọn cùng
với chức năng chat thoại rút ngắn thời gian trao đổi. Có thể nói ứng dụng đáp ứng được
những yêu cầu cơ bản của một ứng dụng Chat trên thiết bị di động.
Qua việc thực hiện ứng dụng này, chúng em hiểu thêm kiến thức về mạng, thiết bị
Android và áp dụng được kiến thức lập trình đã học. Do trình độ kiến thức và thời gian
hạn chế nên ứng dụng vẫn còn nhiều thiếu sót. Vì vậy nhóm em rất mong nhận được ý
kiến đóng góp của thầy giáo và các bạn để chúng em hoàn thiện kiến thức hơn.
Chúng em xin chân thành cảm ơn thầy T.S Trần Minh Trung đã nhiệt tình hướng
dẫn nhóm em hoàn thành đề tài này!
3
I. GIỚI THIỆU ĐỀ TÀI VÀ LẬP KẾ HOẠCH THỰC HIỆN
1. Giới thiệu đề tài
Đề tài nhóm chúng em đã lựa chọn là: Phát triển phần mềm chat trong mạng
LAN qua WiFi chạy trên điện thoại Android.
Chức năng chính của phần mềm này là gửi tin nhắn trò chuyện dạng văn bản
giữa các thiết bị Android kết nối với nhau trong một mạng cục bộ thông qua
WiFi. Người dùng sử dụng phần mềm này có thể tìm kiếm được các người dùng
khác cũng đang sử dụng phần mềm này trong mạng LAN, hiển thị danh sách các
phòng chat (chat room) do mình cũng như các người dùng khác tạo ra. Người
dùng tham gia vào các phòng chat để trò chuyện với các người dùng khác.
Ngoài chức năng chính là gừi tin nhắn trò chuyện dạng văn bản, phần mềm
còn có các chức năng khác như chia sẻ file giữa các người dùng với nhau, trò
chuyện bằng lời nói (voice chat), tính toán gần đúng khoảng cách từ thiết bị của
người dùng tới bộ phát sóng WiFi.
2. Lập kế hoạch thực hiện
Dưới đây là bản kế hoạch thực hiện project mà nhóm đã đề ra:
Hình 1: Bảng kế hoạch thực hiện project
II. PHÂN TÍCH YÊU CẦU VÀ PHÂN CÔNG NHIỆM VỤ
1. Yêu cầu chức năng của phần mềm
a. Chức năng kết nối
Các thiết bị yêu cầu phải được kết nối vào cùng một mạng LAN của
một WiFi access point
Người dùng phải kết nối vào mạng LAN trước khi sử dụng được các
chức năng khác
4
b. Tạo, quản lý và tham gia phòng chat (chat room)
Cho phép tạo các phòng chat để mọi người có thể tham gia vào đó
Người tạo phòng có thể xóa phòng mà mình đã tạo
Hiển thị danh sách các phòng hiện có (do mình tạo và do các thành viên
khác tạo) trong mạng
Tự động cập nhật danh sách phòng chat theo định kì thời gian. Người
dùng cũng có thể trực tiếp ra yêu cầu cập nhật danh sách phòng.
Người dùng có thể tham gia và rời khỏi phòng (do mình hoặc do thành
viên khác tạo) theo ý muốn
c. Quản lý danh sách thành viên
Sau khi đã kết nối vào mạng, người dùng có thể xem danh sách các
thành viên đang cùng sừ dụng phần mềm này trong mạng
Khi tham gia vào một phòng chat, người dùng có thể xem danh sách các
thành viên khác đang ở trong cùng phòng với mình
d. Gửi và nhận tin nhắn chat dạng text
Từ danh sách thành viên, người dùng bấm chọn một thành viên bất kì để
bắt đầu thực hiện lượt chat với thành viên đó
Hoặc từ danh sách phòng, người dùng chọn một phòng mà mình muốn
tham gia để bắt đầu thực hiện lượt chat trong phòng đó
Từ giao diện chương trình, người dùng nhập nội dung tin nhắn, ấn nút
“Gửi” để gửi tới các thành viên đang chat với mình
e. Chức năng chat voice
Được thực hiện giữa 2 người với nhau
Người dùng chọn một thành viên bất kì để gửi yêu cầu thực hiện lượt
chat voice tới thành viên đó. Nếu phía bên kia chấp nhận yêu cầu thì
phiên chat được bắt đầu.
f. Chức năng gửi/nhận file
Cho phép gửi và nhận file trong khi đang chat
Người dùng nhấn biểu tượng nút “Gửi file” trên giao diện, chọn file
muốn gửi. Những thành viên khác có thể chọn nhận hoặc không nhận
file. Nếu chấp nhận thì quá trình truyền file mới được bắt đầu.
5
g. Chức năng xác định khoảng cách giữa các thiết bị
Dựa vào cường độ tín hiệu sóng WiFi mà thiết bị thu được, phần mềm
có thể tính toán được khoảng cách gần đúng từ thiết bị của người dùng
đến các access point trong không gian xung quanh
Từ đó mục tiêu là đưa ra công thức tính khoảng cách gần đúng giữa các
thành viên trong mạng với nhau.
2. Yêu cầu phi chức năng của phần mềm
- Phần mềm chạy trên các thiết bị điện thoại, máy tính bảng sử dụng hệ điều
hành Android phiên bản 2.3 trở lên
- Thiết lập kết nối giữa các thiết bị nhanh chóng, kết nối ổn định trong quá
trình sử dụng
- Phần mềm dễ sử dụng: giao diện trực quan, phù hợp với thiết bị di động,
người sử dụng có thể di chuyển giữa các tác vụ một cách đơn giản.
3. Phân chia công việc cho các thành viên
Qua những phân tích về chức năng như trên, nhóm chúng em đã phân chia
nhiệm vụ thực hiện cho từng thành viên trong nhóm như sau:
Thành Viên Nhiệm vụ
Nguyễn Thế Mạnh Quản lý project, phân chia công việc
Phân tích chức năng
Thiết kế giao diện
Lập trình các chức năng Client – Server và chức năng chat văn bản, truyền file qua Socket
Lập trình chức năng quản lý danh sách phòng chat và danh sách thành viên trong mạng
Nguyễn Duy Khánh Phân tích chức năng
Lập trình phần truyền file qua WiFi P2P
Lập trình module tìm kiếm thiết bị trong mạng
Lập trình chức năng xác định khoảng cách giữa các thiết bị
Nguyễn Văn Hưng Lập bảng kế hoạch thời gian thực hiện dự án
Phân tích chức năng
Phân tích và mô tả kịch bản kết nối và trao đổi
6
dữ liệu giữa các thiết bị trong khi chat.
Lập trình chức năng của server
Nguyễn Bá Nguyên Phân tích chức năng
Nghiên cứu lý thuyết và đưa ra phương pháp lý thuyết tính khoảng cách gần đúng từ thiết bị đến các access point.
Lập trình chức năng tính toán khoảng cách
III. GIỚI THIỆU VỀ LẬP TRÌNH ỨNG DỤNG ANDROID
1. Hệ điều hành Android
Android là hệ điều hành dựa trên nền tảng Linux được thiết kế dành cho các
thiết bị di động như điện thoại thông minh (smartphone), máy tính bảng
(tablet),… Hiện nay, Android được hỗ trợ, phát triển bởi Google và Liên minh
thiết bị cầm tay mở (Open Handset Alliance).
Android có mã nguồn mở và Google phát hành mã nguồn theo Giấy phép
Apache. mã nguồn mở cùng với một giấy phép không có nhiều ràng buộc đã cho
phép các nhà phát triển thiết bị, mạng di động và các lập trình viên nhiệt huyết
được điều chỉnh và phân phối Android một cách tự do. Ngoài ra, Android còn có
một cộng đồng lập trình viên đông đảo chuyên viết các ứng dụng để mở rộng
chức năng của thiết bị, bằng một loại ngôn ngữ lập trình Java có sửa đổi. Những
yếu tố này đã giúp Android trở thành nền tảng điện thoại thông minh phổ biến
nhất thế giới, chiếm 81.0% thị trường hệ điều hành smartphone tính đến quý 3
năm 2013 (theo số liệu của IDC).
Hình dưới đây mô tả kiến trúc tổng quan của hệ điều hành Android:
7
Hình 2: Kiến trúc hệ điều hành Android
2. Lập trình ứng dụng trên Android
Để tạo ứng dụng cho hệ điều hành Android, ta có nhiều phương pháp khác
nhau để lựa chọn. Trong đó, phương pháp chính do Google đề xuất và hỗ trợ là
sử dụng Android SDK và ngôn ngữ lập trình Java.
Android SDK là bộ công cụ phát triển phần mềm của Android, do Google
cung cấp. Android SDK cung cấp thư viện API và các công cụ cho lập trình viên
phát triển, gỡ lỗi và kiểm thử phần mềm cho Android.
Ngôn ngữ được sử dụng chính để lập trình ứng dụng cho Android là ngôn ngữ
Java. Tất cả các ứng dụng trên nền tảng Android trước khi chạy đều được biên
dịch thành một dạng mã trung gian có tên là Dalvik bytecode. Mã trung gian này
sau đó sẽ được thực thi qua máy ảo Dalvik Virtual Machine. Thư viện API do
Android SDK được viết bằng ngôn ngữ Java. Lập trình viên sử dụng các hàm
trong API để viết mã nguồn.
3. Lập trình ứng dụng mạng
Android Framework cung cấp cho người lập trình nhiều thư viện hỗ trợ cho
việc lập trình các ứng dụng liên quan tới mạng.
- java.net: là package chứa các class hỗ trợ cho lập trình mạng của Java API.
8
- org.apache: thư viện do Apache Software Foundation phát triển và cung
cấp, tập trung chủ yếu vào HTTP và các giao thức liên quan.
- android.net: thư viện của Android Framework
IV. THIẾT KẾ CHƯƠNG TRÌNH
1. Thiết kế giao diện
Dưới đây là một số hình phác họa thiết kế giao diện của chương trình:
Hình 3: Màn hình chính
Hình 4: Màn hình danh sách phòng
chat
9
Hình 5: Màn hình danh sách thành
viên
Hình 6: Màn hình chat văn bản
2. Truyền dữ liệu giữa các thiết bị.
2.1. Socket.
- Socket là một lớp nằm giữa lớp Application và lớp presentation trong mô
hình 7 lớp OSI. Nó cho phép phân phát dữ liệu tới các ứng dụng với 1 cổng
xác định. Tổ hợp giữa địa chỉ IP và số cổng tạo thành địa chỉ SOCKET.
- Mỗi thiết ứng dụng sẽ có gắn với 1 cổng nhất định. Ứng dụng sẽ nghe
ngóng trên cổng đó, khi có yêu cầu kết nối tới, nếu cổng rảnh thì sẽ chấp
nhận 1 kết nối. Kết nối sẽ được thiết lập giữa 2 thiết bị, nếu đã tồn tại kết
nối giữa 2 cổng này, thì kết nối đến sau sẽ không được kết nối.
2.2.Truyền dữ liệu.
10
- Để truyền dữ liệu, chúng ta sử dụng socket. Khi ứng dụng Chat được bật
nên, nó sẽ tạo ra 1 socket tại một port có số hiệu cố định được chọn trước.
Mỗi khi có yêu cầu kết nối tới, phần mềm sẽ chấp nhận kết nối, sau khi kết
nối thành công, phần mềm sẽ tự động chuyển kết nối sang 1 cổng khác
(cổng có sẵn) để nhường lại cổng cố định của server cho việc nghe kết nối
từ các thiết bị khác.
2.3. Kịch bản trao đổi bản tin giữa các thiết bị trong mạng
Sau khi tạo server để lắng nghe và chấp nhận các yêu cầu kết nối từ các máy
khác, ta cần quy định các bước cần phải thực hiện khi trao đổi dữ liệu giữa các
thiết bị, cũng như định dạng các loại bản tin cho từng mục đích thông tin khác
nhau để thuận tiện cho quá trình truyền đạt và phân tích thông tin. Các mục dưới
đây trình bày các bước để truyền/nhận thông tin giữa các máy, phân chia theo
từng chức năng cụ thể.
a. Tìm kiếm và quản lý danh sách thành viên trong mạng cùng sử dụng phần
mềm
- Sơ đồ thuật toán.
Hình 7:Thuật toán tìm kiếm các thiết bị cùng sử dụng phần mềm trong
mạng
- Khi bắt đầu mở ứng dụng, nó sẽ tự động quét các địa chỉ IP trong mạng,
sau khi quét xong, phần mềm sẽ gửi bản tin thông báo đến tất cả các máy.
Nếu máy nào có cài đặt phần mềm và phần mềm đang chạy, nó sẽ gửi lại
bản tin phản hồi. Dựa vào bản tin phản hồi, các máy sẽ cập nhật lại danh
sách thành viên online (Sẵn sàng chat).
- Trong khi chạy ứng dụng, phần mềm sẽ tự động gửi bản tin thông báo đến
tất cả các máy có trong list, các máy nhận được bản tin thông báo sẽ gửi lại
11
phản hồi. Khi nhận được phản hồi, phần mềm sẽ tự động cập nhật lại danh
sách.
Hình 8: Thuật toán cập nhật danh sách thành viên
b. Tạo, quản lý và tham gia phòng chat
Lập phòng Chat.
- Người lập phòng chat sẽ gửi bản tin thông báo về phòng chat mới tới tất
cả các máy trong list. Các máy nhận được sẽ hiển thị phòng chat trong
list.
- Người dùng gửi bản tin tìm phòng chat. Những máy trong mạng có
phòng chat sẽ phản hổi lại. Người dùng sẽ cập nhật danh sách phòng
chat dựa vào các bản tin phản hồi
Tham gia phòng chat.
- Một máy có khả năng tham gia nhiều phòng chat. Mỗi phòng chat sẽ có
1 ID xác định. Khi tham gia phòng chat, người dùng sẽ gửi yêu cầu tới
chủ phòng chat. Chủ phòng sẽ lưu lại địa chỉ người mới vào và thêm
người đó và danh sách thành viên của phòng.
c. Trò chuyện bằng tin nhắn văn bản
Khi người dùng gửi tin nhắn:
- Người dùng không phải là chủ phòng sẽ gửi tin nhắn đó cho chủ phòng
chat. Chủ phòng chat nhận được tin nhắn sẽ truyền lại cho các thành
viên còn lại.
12
- Người dùng là chủ phòng sẽ gửi tin nhắn cho tất cả các thành viên trong
phòng.
d. Gửi/nhận file giữa các thành viên
- Người muốn gửi file gửi một tin nhắn dưới dạng tin nhắn trò chuyện
văn bản thông thường với một thuộc tính kèm theo chỉ ra đó là tin nhắn
mời thành viên khác nhận file. Đồng thời sẽ mở thêm một server port
khác để lắng nghe các yêu cầu truyền file từ các máy khác.
- Các thành viên còn lại khi nhận được tin nhắn có thuộc tính cho biết đó
là tin nhắn mời nhận file, nếu muốn tải file đó về máy mình thì sẽ tạo
socket kết nối tới server port phía người gửi dành để phục vụ cho việc
truyền file. Sau khi kết nối thành công, quá trình truyền/nhận file sẽ
được diễn ra giữa 2 thiết bị.
3. Phân chia các module chức năng
Để thực hiện các yêu cầu chức năng đã đề ra, phần mềm được thiết kế và triển
khai thành các module chức năng chính như sau:
- Module thực hiện chức năng tìm kiếm thiết bị có phần mềm đang hoạt động
trong cùng mạng LAN.
- Module thực hiện chức năng chat text
- Module thực hiện tính toán khoảng cách từ thiết bị Android tới điểm phát
sóng của WiFi Access Point.
- Module thực hiện chức năng truyền/nhận file
Các mục tiếp theo sẽ trình bày chi tiết hơn về từng module.
4. Module tìm kiếm thiết bị trong mạng LAN
Khi người dùng bật ứng dụng lên, module này có chức năng tìm kiếm các
thiết bị có trong cùng mạng LAN nhằm gửi bản tin thông báo đến các thiết bị
khác về sự có mặt của nó.
Thuật toán của module:
13
Hình 9. Thuật toán tìm kiếm các thiết bị có trong mạng LAN
5. Module thực hiện chức năng chat text
Module này thực hiện các chức năng sau:
Lập phòng chat
Quản lý danh sách phòng chat
Quản lý danh sách các thành viên tham gia vào phòng chat
14
Gửi tin nhắn trò chuyện dạng text giữa các thành viên
Sử dụng kĩ thuật lập trình mạng bằng Socket trong Java, ta thực hiện
truyền, nhận các bản tin mang thông tin thông báo và nội dung tin nhắn trò
chuyện giữa các thiết bị trong mạng.
Các bước cơ bản để tạo và tham gia một phòng chat:
Hình 10: Các bước tạo và tham gia phòng chat của chủ phòng và các thành
viên khác (khách)
Các bước để các thành viên trong một phòng chat gửi tin nhắn trò chuyện
với nhau được mô tả trong mục 2.3.c.
6. Module tính toán khoảng cách từ thiết bị tới bộ phát WiFi
a. Giới thiệu Việc định vị thiết bị smartphone trong khu vực thông qua wifi của
access point giúp cho việc quản lý mọi người trong một phạm vi nhỏ dễ dàng hơn
với chi phí thấp
Trong tương lai, khi mà hệ thống mạng wifi phát triển mạnh mẽ và có
quy hoạch rõ ràng, chúng em tin rằng khả năng định vị của smartphone thông qua
15
access point wifi sẽ càng phát triển mạnh, gia tăng số lượng ứng dụng tiện ích và
có những ưu điểm vượt trội so với hệ thống GPS
b. Cơ sở lý thuyết Khi truyền sóng vô tuyến trong không gian, cường độ tín hiệu nhận được
tại máy thu sẽ bị suy hao bởi môi trường truyền sóng, khoảng cách truyền và tần
số truyền sóng
Theo nghiên cứu ta có được công thức suy hao của tín hiệu vô tuyến
trong không gian là:
PL (dbm) = 32,44 + 10nlogf + 10nlogD + αD (1)
Trong đó f : tần số sóng vô tuyến, đơn vị GHz( với sóng wifi f = 2,4 GHZ)
D: khoảng cách truyền sóng, đơn vị m
α: hệ số suy hao môi trường, đơn vị dbm/m ( tùy thuộc vào điều kiện
môi trường như mưa bão, khói bụi.. với môi trường đang xét trong văn phòng,
trường học thì α ≈ 0 )
n: hệ số suy hao đường truyền( phụ thuộc môi trường)
Môi trường Hệ số suy hao n
Không gian tự do 2
Đô thị 2,7 – 3,5
Trong nhà nhìn thẳng 1,6 – 1,8
Trong nhà có vật cản 4-6
Bảng 1: Hệ số suy hao của sóng vô tuyến theo môi trường
Cường độ tín hiệu nhận được tại máy thu ( ở đây là smartphone android )
được tính theo công thức:
RSSI (dbm) = Ptx + Gtx – PL + Grx (2)
Trong đó :
- RSSI : Cường độ tín hiệu nhận được (Received signal strength
indication )
- Ptx : Công suất phát của access point, đơn vị dbm
- Gtx : Tăng ích của access point, đơn vị dbm
- Grx : Tăng ích của máy thu ( smartphone), đơn vị dbm
- PL : Path Loss, suy hao đường truyền trong không gian
Ở đây Ptx, Gtx, Grx là các tham số cố định phụ thuộc vào từng loại
access point và smartphone. Do đó có thể thấy cường độ tín hiệu RSSI nhận được
của smartphone phụ thuộc chủ yếu vào khoảng cách của thiết bị với máy thu
access point
Từ (1) và (2) ta có công thức :
16
RSSI (dbm) = Ptx +Gtx + Grx – 32,44 – 10nlogf – 10nlogD
Để đơn giản ta có thể viết lại là:
RSSI (dbm) = A + KlogD (3)
Trong đó A và K là hằng số, phụ thuộc vào loại thiết bị và môi trường
truyền sóng, ta có thể đo được A và K bằng kết quả thực nghiệm
Từ (3) ta có thể suy ra khoảng cách giữa điện thoại và access point:
D = 10(-A+RSSI)/K (m)
c. Các vấn đề gây nhiễu Các vấn đề gây nhiễu làm ảnh hưởng đến kết quả đo : shadowing và fading
- Shadowing : hiện tượng tín hiệu thu được bị suy giảm do có sự che khuất của vật cản
Bảng 2: Cường độ tín hiệu suy giảm qua các chất liệu
- Fading : Cường độ tín hiệu thu dao động nhanh khi MS dịch chuyển một khoảng cách nhỏ, nguyên nhân gây pha đinh nhanh là do tín hiệu thu là tổng hợp của nhiều thành phần đền từ nhiều hướng khác nhau với cường độ,
pha hoặc tần số khác nhau, ngẫu nhiên theo thời gian
17
Hình 11: Hiện tượng fading, multipath
Hình 12: Mô hình suy hao fading sử dụng
Qua biểu đồ trên ta thấy các ảnh hưởng do shadowing và fading làm cho
thông số RSSI thu được có sai lệch khá lớn ± 10dbm
18
» Do đó để giảm sai số khuyến nghị khoảng cách thực hiện tính toán nên
nhỏ hơn hoặc bằng 30m và đo trong tầm nhìn thẳng không có vật cản
d. Kết quả thực nghiệm Vì các thông số Ptx, Gtx, Grx của acess point và mobile không thể xác định
trực tiếp bằng các công cụ có sẵn trên mobile, hơn nữa nhà sản xuất cũng không
công bố các thông tin trên của thiết bị vì thế chúng em xin phép được tối ưu các
thông số trên thông qua các phép đo thực nghiệm
Thực nghiệm quá trình đo với môi trường trong phòng không có vật cản,
thiết bị sử dụng là Access point: tenda w311r, smartphone: lenovo A390
Khoảng cách D(m)
Lần đo 1 RSSI( dbm)
Lần đo 2 RSSI (dbm)
Lần đo 3 RSSI(dbm)
Giá trị sử dụng (dbm)
1 -36 -36 -35 -35 2 -42 -43 -42 -42 3 -45 -46 -46 -46
Bảng 3: Kết quả thực nghiệm đo cường độ RSSI
Từ các kết quả đo ứng với khoảng cách 1m và 2m ta được hệ phương trình
là:
RSSI(1m)= A + Klog1
RSSI(2m)= A + Klog2
Suy ra A = -36
K = -20
Thay lại A= -36, K = -20, vào công thức với D= 3m ta được:
RSSI= -45,54 ≈ -46 dbm ( thỏa mãn)
Vậy ta có công thức tính khoảng cách từ smartphone Lenovo A390 tới
acess point tenda w311r là:
RSSI(dbm)= -36 - 20logD
Suy ra
D = 10-(RSSI + 36)/20 m
7. Module thực hiện chức năng truyền/nhận file
7.1. Truyền file bằng Socket
Khi người dùng đang trò chuyện với các người dùng khác bằng tin nhắn
văn bản, người dùng có thể lựa chọn một tập tin bất kì trong bộ nhớ của thiết bị
và gửi lời mời nhận file tới các thành viên khác đang tham gia cùng phòng chat
với mình. Module chức năng này đảm nhận thực hiện quá trình gửi các bản tin
thông báo liên quan đến việc gửi file và việc truyền, nhận file giữa các thiết bị.
19
Việc gửi, nhận các bản tin thông báo và việc truyền, nhận dữ liệu của file
vẫn được thực hiện dựa trên kĩ thuật lập trình Socket trong Java. Ở đây, ngoài
server phục vụ cho việc truyền nhận các bản tin thông báo và tin nhắn văn bản, ta
còn tạo và duy trì một Server Socket trên thiết bị muốn gửi file để đóng vai trò là
server phục vụ các máy có nhu cầu nhận file.
7.2. Truyền file sử dụng WiFi P2P
WiFi P2P (WiFi Direct) là một tính năng mới được hỗ trợ trên Android từ
phiên bản Android 4.0 (API level 14) với điều kiện thiết bị có phần cứng hỗ trợ.
WiFi P2P cho phép các thiết bị kết nối với nhau trực tiếp qua WiFi mà không cần
thông qua một access point trung gian. Sử dụng WiFi P2P, ta có thể tìm kiếm và
kết nối, cũng như truyền dữ liệu giữa các thiết bị được hỗ trợ tính năng này với
nhau.
V. TRIỂN KHAI THỰC HIỆN
1. Module tìm kiếm các thiết bị có trong mạng LAN
Hình 13. Thuật toán tìm kiếm các thiết bị có trong mạng LAN
20
Bước 1: Tìm dải địa chỉ tìm kiếm:
- Xác định địa chỉ IP của mạng con.
- Xác định số bit địa chỉ dùng cho Net ID và Host ID.
- Xác định dải địa chỉ để tìm kiếm là dải địa chỉ tương ứng với Host ID.
Bước 2: Xét từng địa chỉ IP trong dải tìm kiếm, thực hiện lần lượt các
phương thức để xác định thiết bị có trong mạng tương ứng với địa chỉ IP
Bước 2.1. Đọc trong file ARP lần 1:
- Xác định được địa chỉ của Router bằng cách đọc trong file ARP được lưu ở
đường dẫn /proc/net/arp.
- Nếu tìm thấy địa chỉ MAC trong bảng ARP thì thêm đối tượng với địa chỉ IP
này vào.
Bước 2.2. Ping
Ping đến địa chỉ IP này, nếu nhận được phản hồi trước khi timeout thì thêm đối
tượng với địa chỉ IP này vào.
Bước 2.3. Đọc trong file ARP lần 2:
- Đọc trong file ARP được lưu ở đường dẫn /proc/net/arp.
- Nếu tìm thấy địa chỉ MAC trong bảng ARP thì thêm đối tượng với địa chỉ IP
này vào.
Bước 2.4. Dùng phương thức TCP
Kết nối TCP qua các cổng 139, 445, 22 và 80, nếu nhận được phản hồi kết nối
thành công thì thêm đối tượng với địa chỉ IP này vào.
Trong đó:
- Port 139 và 445 được sử dụng để truy cập vào tài nguyên share trên máy tính
khác cùng trong mạng Lan theo giao thức BIOS và TCP
139: NetBIOS Session Service
445: Microsoft-DS SMB file sharing
21
- Port 22: Secure Shell (SSH) — used for secure logins, file transfers (scp, sftp)
and port forwarding
- Port 80: HTTP
Bước 2.5. Đọc trong file ARP lần 3:
- Đọc trong file ARP được lưu ở đường dẫn /proc/net/arp.
- Nếu tìm thấy địa chỉ MAC trong bảng ARP thì thêm đối tượng với địa chỉ IP
này vào.
Bước 3: Tiếp túc thực hiện như vậy đến hết dải tìm kiếm ta được một danh
sách các đối tượng với địa chỉ IP đang ở trong cùng mạng LAN Wifi.
2. Các loại bản tin thông báo truyền giữa các thiết bị
Để các thiết bị trao đổi bản tin mang nội dung các lời yêu cầu cũng như
phản hồi cho các yêu cầu, các thông tin thông báo về trạng thái, các bản tin trao
đổi giữa các thiết bị được chia làm các loại sau:
HELLO_WORLD: là bản tin mà thiết bị gửi tới tất cả các thiết bị khác
trong mạng để thông báo sự có mặt của mình trong mạng khi mới tham
gia vào mạng
ADV_SELF: bản tin mang thông tin về cá nhân mình trong mạng. Các
thông tin bao gồm tên, danh sách các phòng chat do mình lập, khoảng
cách từ vị trí của mình tới các bộ phát sóng WiFi gần đó
ADV_ROOM: bản tin chứa danh sách các phòng chat do mình lập,
được gửi tới các người dùng khác để thông báo về các phòng do mình
quản lý
ADV_NEW_ROOM: bản tin chứa thông tin về 1 phòng chat vừa được
tạo. Khi người dùng tạo ra một phòng chat mới, người dùng sẽ gửi bản
tin này tới tất cả các người dùng khác để thông báo về một phòng mới
được tạo.
ADV_FILE: bản tin chứa thông tin về tên file và kích thước file mà ta
muốn truyền cho các thành viên khác trong phòng chat.
REQ_UPDATE_ROOM: lời yêu cầu cập nhật danh sách phòng chat
mới nhất, được gửi cho tất cả các người dùng trong mạng để cập nhật
danh sách phòng chat đang có trong mạng.
22
REQ_JOIN_ROOM: là lời yêu cầu tham gia vào một phòng chat mà ta
gửi tới người quản lý phòng đó để thông báo về việc mình muốn tham
gia vào phòng chat đó.
ALLOW_JOIN_ROOM: bản tin mà người quản lý phòng chat phản hồi
lại cho bản tin REQ_JOIN_ROOM của một thành viên khác gửi tới để
thông báo cho thành viên đó được phép tham gia vào phòng chat.
TEXT_MESSAGE: là bản tin chứa nội dung tin nhắn trò chuyện văn
bản giữa các thành viên trong phòng chat với nhau.
3. Thực hiện chức năng trò chuyện bằng văn bản (chat text)
Module chức năng chat text được triển khai thực hiện dựa trên thuật toán và
phương thức được mô tra trong mục 2.3, phần IV. Khi triển khai sử dụng các loại
bản tin được mô tả trong mục 2 ở trên.
4. Thực hiện tính toán khoảng cách thiết bị tới bộ phát sóng WiFi
- Từ nghiên cứu lý thuyết và đo thực nghiệm, ta xây dựng được công thức
tính khoảng cách từ thiết bị đến Access Point như sau:
D = 10^[-(RSSI + 36)/20] m
- Tìm danh sách các Access Point, tương ứng với mỗi Access Point ta thu
được cường độ tín hiệu thu RSSI. Áp dụng công thức trên ta tính toán được
khoảng cách từ thiết bị đến các Access Point xung quanh nó.
- Theo một chu kỳ định sẵn, thiết bị sẽ gửi bản tin mang thông tin về
khoảng cách giữa nó với các Access Point cho các thiết bị khác.
- Thông tin về khoảng cách từ một thiết bị tới các bộ phát sóng được bao
gồm trong bản tin ADV_SEFL mà thiết bị gửi tới cho các máy khác. Các máy
khác khi nhận được bản tin này sẽ phân tích và đọc được kết quả.
5. Thực hiện chức năng truyền và nhận file thông qua socket
Khi một máy muốn truyền file cho các máy khác trong mạng, máy đó sẽ
đóng vai trò là server. Các máy trong mạng muốn nhận được file thì sẽ kết nối với
máy server đó trong vai trò client. Server sẽ xử lý yêu cầu của từng client trong
từng thread riêng biệt. Dưới đây là sơ đồ flow chart mô tả các bước xử lý của
chức năng này:
23
Hình 14: Các bước xử lý của File Server Hình 15: Các bước xử lý của client
Các class thực hiện chức năng server và client tương ứng là
FileServerThread và FileClient.
6. Truyền và nhận file sử dụng WiFi P2P
Trước hết, để sử dụng tính năng WiFi P2P, ta cần thay đổi yêu cầu phiên
bản SDK tối thiểu từ phiên bản10 (Android 2.3.3) lên phiên bản 14 (Android 4.0).
Các hàm API do Android cung cấp giúp việc thực hiện kết nối 2 thiết bị dễ dàng
hơn và không yêu cầu người lập trình phải viết nhiều mã nguồn.
Chức năng này được triển khai thực hiện dựa trên hướng dẫn trên website
Android Developer
(www.developer.android.com/guide/topics/connectivity/wifip2p.html).
24
VI. KẾT QUẢ VÀ ĐÁNH GIÁ Sau khi hoàn thành các bước phân tích, thiết kế, lập trình và phát triển ứng
dụng, nhóm tiến hành chạy thử ứng dụng để kiểm nghiệm và sửa lỗi nếu phát
sinh.
Qua một thời gian chạy thử và kiểm nghiệm, chúng em nhận thấy kết quả
của ứng dụng như sau:
- Về cơ bản, thực hiện được các yêu cầu chức năng đề ra.
- Hoạt động chính xác
- Phần mềm chạy nhanh, gặp ít lỗi.
- Phần mềm có giao diện dễ sử dụng và chiếm ít tài nguyên của thiết bị.
Trên đây là kết quả đã đạt được trong thời gian thực hiện đề tài này. Tuy đã
đạt được một số mục tiêu ban đầu nhưng phần mềm còn một số điểm chưa hoàn
thiện như :
- Chưa có chức năng chat voice
- Chưa lưu được lịch sử hoạt động của người dùng, của phòng chat
- Việc tính toán khoảng cách ở giá trị lớn còn bị sai số cao.
- Trong khi hoạt động còn có thể gặp một số bug nhỏ tuy nhiên không ảnh
hưởng lớn tới quá trình sử dụng của người dùng.
Trong thời gian tiếp theo, mục tiêu của chúng em là tiếp tục phát triển thêm
với các tính năng :
- Thêm chức năng chat voice.
- Lưu lại lịch sử các phòng chat, các cuộc đối thoại.
- Cải tiến giao diện thêm sinh động, bắt mắt người dùng.
- Thêm các icon biểu cảm sinh động trong khi chat text.
- Tăng độ chính xác của thuật toán tính toán khoảng cách.
- Tối ưu thuật toán, cải thiện tốc độ khởi động chương trình
- Tối ưu mã nguồn của phần mềm.
Ngoài những kết quả đạt được của phần mềm, qua việc thực hiện project
này, chúng em đã thu nhận và củng cố được thêm nhiều kiến thức về: mạng máy
tính, lập trình mạng, lập trình Android.
Trên đây là những kết quả đạt được, đánh giá của chúng em về kết quả đó
và mục tiêu phát triển tiếp theo cho đề tài. Qua việc thực hiện đề tài này, chúng
25
em đã đạt được nhiều kết quả hữu ích: nâng cao và củng cố kiến thức về mạng
máy tính; tìm hiểu về lập trình ứng dụng cho hệ điều hành Android; kinh nghiệm
làm việc nhóm và quy trình phát triển một sản phẩm phần mềm.
Cuối cùng, chúng em xin dành lời cảm ơn chân thành đến thầy giáo Tiến Sĩ
Trần Minh Trung đã tận tình hướng dẫn nhóm em trong suốt thời gian thực hiện
đề tài để đạt được kết quả này.
26
VII. TÀI LIỆU THAM KHẢO
[1] Slide bài giảng Quản trị mạng TCP/IP, thầy Trần Minh Trung.
[2] TCP/IP Network Administration, O’Reilly, Second Edition 1997.
[3] TCP/IP Network Application Guide, SunSoft.
[4] TCP/IP Tutorial and Technical Overview, IBM RedBooks.
[5] http://developer.android.com/index.html