3. Họ và tên giáo viên hướng dẫn: TS Nguyễn Trường Thịnh
5.3. Xây dựng phần mềm server quản lý phương tiện, ứng dụng giao thức TCP/IP
5.3.1 Ứng dụng giao thức TCP/IP trong việc liên kết các user qua mạng
internet.
5.3.1.1. Sơ lược về TCP server.
Đây là chương trình trên máy tính dùng để truyền nhận các gói TCP giữa các thiết bị và máy tính được kết nối với đường truyền internet công cộng. Phần mềm do nhóm tự thiết kế và thực hiện.
Phần mềm này thực hiện bằng công cụ socket cho phép ta biết được địa chỉ của server mà thiết bị cần kết nối, để thực hiện các thao tác sau này.
Trong quá trình truyền dữ liệu qua mạng internet có 2 giao thức là UDP và TCP dùng để truyền nhận dữ liệu. TCP có ưu điểm hơn là: Đảm bảo độ tin cậy của gói dữ liệu được truyền đi do quá trình kết nối và bắt tay chặt chẽ giữa client (trong trường hợp này là module SIM548) và server. Tuy tốc độ chậm nhưng vẫn phù hợp với các ứng dụng. Vì thế nhóm chọn giao thức TCP để kết nối trong hệ thống.
5.3.1.2. Đơn vị điều khiển socket
Đây là công cụ được lựa chọn để xây dựng ứng dụng server. Thực tế quá trình khảo sát cho thấy một số hạn chế sau:
Số lượng socket hạn chế: Có thể tạm hiểu một socket là một liên kết. Khi một client thiết lập một kết nối với server, chương trình ứng dụng sẽ phải mở một socket (hay một liên kết) để thao tác với kết nối đó. Do số lượng socket có hạn (65535 socket), bên cạnh đó số lượng client trong hệ thống là rất lớn, do đó cần quản lí thật chặt các liên kết, hủy bỏ các kết nối không hiệu quả, không truyền nhận dữ liệu sau một khoảng thời gian ngắn.
Thời gian xử lí khá chậm: Do giao thức TCP/IP đòi hỏi một quy trình bắt tay chặt chẽ, gói dữ liệu trước khi truyền nhận phải chờ thông tin phản hồi của gói dữ liệu trước đó, nên thời gian xử lí một gói TCP/IP lên đến khoảng 200 ms. Do đó cần có sự cân đối giữa thời gian truyền nhận và số lượng liên kết cho phép.
5.3.1.3. Quy trình tạo một server trên máy tính sử dụng socket
Tạo một phần mềm server có khả năng mở socket liên kết, khả năng trao đổi dữ liệu giữa server và client, chức năng hiển thị các liên kết và điều khiển các client.
Sau khi có được phần mềm, ta phải tạo một ứng dụng chạy trên mạng NAT ( mạng ảo hóa nội bộ) chỉ đến server, bằng cách mở một Port trên modem chỉ đến máy
95
tính đang chạy phần mềm server. Port này chứa IP của máy tính chạy server trên mạng LAN.
Sau đó thông báo địa chỉ IP của modem ADSL cho client được biết. Cách biết được IP của một kết nối, truy cập vào website www.IP2location.com.
Client sẽ dùng địa chỉ IP này để kết nối đến server.
5.3.2 Giải pháp ứng dụng của module Sim548 trong việc kết nối server- client
5.3.2.1. Đối với server.
Đầu tiên, Server thực hiện thao tác lắng nghe yêu cầu kết nối. Khi có một yêu cầu thực hiện kết nối, thì cho phép thực hiện kết nối.
Khi kết nối thành công thì cho phép truyền nhận dữ liệu, nhưng nếu user ngắt kết nối, kết nối sẽ bị hủy nhằm tiết kiệm tài nguyên. Qua thực tế kiểm nghiệm các mạng GPRS hiện hành, mặc dù kết nối đã bị hủy bởi hệ thống mạng, nhưng phía module và Server vẫn không nhận biết được trạng thái đường truyền đã bị hủy. Thao tác này giúp giảm bớt rủi ro của các liên kết truyền nhận dữ liệu trong quá trình vận hành hệ thống.
Xây dựng giao thức liên kết dữ liệu: Tùy theo mục đích sử dụng của dữ liệu, ta có thể xây dựng một giao thức phù hợp. Đây là giao thức được sử dụng trong quá trình thử nghiệm ứng dụng GPRS login: UserID, password dùng cho thao tác login_data, nội dung dữ liệu dùng cho quá trình truyền nhận dữ liệu. Có thể bổ sung thêm các cấu trúc dùng cho các thao tác điều khiển, nhận biết.
5.3.2.2. Module Sim548
Chú ý thời gian thực thi của mỗi lệnh và đặt thời gian “time-out” hợp lí. Đặc biệt chú ý các lệnh “AT+CIPSTART” và “AT+CIPSEND”. Nếu thời gian thực thi lâu hơn thời gian khảo sát, kết quả thực thi các lệnh này chắc chắn thất bại.
Do phía server đã chủ động được các liên kết, nên khi nhận được chuỗi “<CR><LF>CLOSED<CR><LF>”, nếu có nhu cầu tiếp tục truyền nhận thông tin, cần khởi tạo kết nối với server và “login” trong khoảng thời gian 1 phút kể từ khi kết nối được thực hiện.
Nếu quá trình khởi tạo kết nối gặp khó khăn, nên reset lại module (bằng lệnh “AT+CFUN=0” và “AT+CFUN=1”) và bắt đầu khởi tạo lại kết nối.
Khi nhận được chuỗi “<CR><LF>+CGREG: 0<CR><LF>” thông báo vị trí hiện tại của module không được hỗ trợ sóng GPRS, nên tạm thời ngắt kết nối GPRS
96
cho đến khi chuyển đến vị trí có sóng GPRS (nhận biết bằng chuỗi <CR><LF>+CGREG: 1<CR><LF>), hoặc chuyển sang phương pháp truyền nhận dữ liệu khác, chẳng hạn như SMS.
5.3.3 Khả năng và mức độ đáp ứng của Server
Trên lý thuyết mức độ hỗ trợ của server có thể lên đến hàng ngàn user một lúc. Tuy nhiên trong điều kiện đồ án này, nhóm chưa thực nghiệm được cụ thể, hiện mới chỉ thử nghiệm với 3 user thật và 2-3 user ảo và hệ thống hoàn toàn đáp ứng.
Để có thể duy trì hệ thống thì cần có kế hoạch trong việc truyền và nhận dữ liệu. Đặt các cơ chế cập nhật thời gian một cách chính xác và tiết kiệm. Hiện nay các dữ liệu của user được cập nhật liên tục.
Tốc độ truyền nhận dữ liệu giữa module và server là khá nhanh, đạt mức 20kbps.
5.3.4 Vấn đề bảo mật của hệ thống
Có thể hình dung GPRS như một mạng LAN sử dụng đường truyền vô tuyến thay cho đường truyền bằng cáp mạng. Mọi kết nối với mạng internet bên ngoài đều thông qua 1 Gateway. Do đó mạng internet bên ngoài không thể “nhìn thấy” được địa chỉ IP của thiết bị bên trong (trong trường hợp này là module SIM548), mà chỉ “nhìn thấy” được địa chỉ IP của Gateway của mạng GPRS của nhà cung cấp dịch vụ.
Như vậy, server không thể phân biệt được module nào vừa thực hiện kết nối với Server nếu chỉ dựa vào địa chỉ IP. Muốn làm được điều đó, thì sau khi thực hiện được liên kết, module user phải gửi các gói dữ liệu cung cấp thông tin về module đó cho server. Khi xây dựng hệ thống, để phân biệt được thông tin nhận được từ module nào gửi đến, phải qui định cho mỗi module một “ID”, chẳng hạn như mã xe mà module đó đang được gắn lên. Công việc này đồng nghĩa với việc ta đang xây dựng một lớp ứng dụng dựa trên lớp TCP. Quy trình cung cấp thông tin về module cho Server tương tự như một quy trình “đăng nhập” thường thấy trong các ứng dụng liên quan đến mạng internet như Yahoo.
Tuy nhiên, module Sim548 lại có thể “nhìn thấy” địa chỉ IP của Server. Khi module SIM548 nhận được gói dữ liệu được truyền đi từ Server, địa chỉ IP của Server được hiển thị trong phần header của gói dữ liệu đó. Thông tin này giúp module phân biệt được các gói dữ liệu nhận được và có được phương thức xử lí phù hợp.
Về phía Server, nếu chỉ dừng lại ở việc quy định “ID” cho mỗi module SIM548 thì vẫn có nhiều chỗ hở trong vấn đề bảo mật, vì chỉ cần nắm được thông tin về ID,
97
một thiết bị bên ngoài hệ thống đang xây dựng vẫn có thể kết nối, đăng nhập vào Server và gây ra những khó khăn cho hệ thống. Vì thế để tăng cường phương thức bảo mật hệ thống, sản phẩm được áp dụng một số giải pháp sau:
- Xây dựng một “tường lửa” (firewall): Tức là chỉ cho phép một số địa chỉ IP được thực hiện kết nối với Server, bao gồm địa chỉ IP của các gateway của nhà cung cấp dịch vụ (địa chỉ IP của mạng Viettel là “203.113.138.98”, của mạng Mobi Fone là “210.245.59.148”), một số địa chỉ IP có thể nhận biết được và không cho phép các địa chỉ IP lạ đăng nhập vào hệ thống. Hạn chế của “tường lửa” là không phân biệt được thiết bị có thuộc hệ thống hay không, ví dụ như một “hacker” có thể sử dụng một module SIM548 và dùng mạng GPRS của Viettel để đăng nhập vào hệ thống, khi đó “tường lửa” sẽ không phân biệt được đâu là module của “hacker”, đâu là module của hệ thống, vì cả hai đều có chung một địa chỉ IP mà “tường lửa” cho phép vượt qua, đó là địa chỉ IP của gateway của mạng Viettel, và “hacker” đã vượt qua được “tường lửa” một cách dễ dàng.
- Xây dựng cơ chế “login”: Đây là bước sàng lọc tiếp theo sau “tường lửa”. Sau khi đã thực hiện được kết nối với Server, các module phải cung cấp ID và password phù hợp để Server nhận diện, và có thể được mã hóa/giải mã nếu cần thiết.
- Xây dựng một giao thức riêng cho lớp ứng dụng: Cơ chế này phục vụ cho quá trình sàng lọc thông tin được gửi đến từ các module SIM548. Những gói dữ liệu không phù hợp với giao thức sẽ bị loại bỏ, vì dữ liệu đó chắc chắn không phải do các module SIM548 trong hệ thống gửi đến.
- Xây dựng cơ chế mã hóa và giải mã dữ liệu: Cơ chế này chỉ nên được sử dụng trong những hệ thống yêu cầu tính bảo mật cao, vì sẽ tiêu tốn nhiều tài nguyên, và tăng gánh nặng về xử lí thuật toán cho các hệ nhúng được sử dụng trong hệ thống.
5.3.5 Giải pháp GPRS
Ứng dụng GPRS trong truyền nhận dữ liệu mang lại nhiều ưu thế hơn so với SMS:
- Chi phí duy trì hệ thống thấp hơn rất nhiều lần so với SMS. - Tốc độ nhanh, dung lượng thông tin cho phép truyền tải lớn. - Độ tin cậy cao.
98 - Chủ động được trạng thái đường truyền.
- Tương thích với nhiều mô hình ứng dụng, từ đơn giản đến phức tạp.
Tuy nhiên trong thực tế, hạn chế của GPRS là vùng phủ sóng, độ ổn định, nhưng hiện nay các mạng cung cấp dịch vụ GPRS tại Việt Nam phủ sóng GPRS ở hầu hết các khu vực từ thành phố đến nông thôn. Phương thức này có khả năng mang lại một giải pháp hoàn thiện cho ứng dụng.
GPRS là một công nghệ khá hoàn thiện và phổ biến hiện nay, việc lựa chọn sử dụng GPRS hoàn phù hợp và đáp ứng được yêu cầu đặt ra cũng như yêu cầu công nghệ hiện nay.
Ngoài ra, ta còn kết hợp sử dụng GPRS và SMS để làm toàn diện hơn ứng dụng. Đôi khi do điều kiện trí hiện tại của module không được hỗ trợ sóng GPRS, môi trường, lỗi mạng ta không thể kết nối và sử dụng GPRS có thể tạm thời thay thế đường truyền dữ liệu GPRS bằng dịch vụ SMS. Giải pháp này vừa tiết kiệm chi phí duy trì hệ thống, vừa hoàn thiện ứng dụng.
5.4. Xây dựng phần mềm Server dùng Java
5.4.1 Java và lịch sử phát triển
Java là ngôn ngữ lập trình hướng đối tượng (tựa C++) do sun Microsystem đưa ra vào giữa thập niên 90. Chương trình viết bằng ngôn ngữ lập trình java có thể chạy trên bất kỳ hệ thống nào có cài máy ảo java (Java Virtual achine).
Ngôn ngữ lập trình Java do James Gosling và các công sự của Công ty Sun Microsystem phát triển. Đầu thập niên 90, Sun Microsystem tập hợp các nhà nghiên cứu thành lập nên nhóm đặt tên là Green Team. Nhóm Green Team có trách nhiệm xây dựng công nghệ mới cho ngành điện tử tiêu dùng. Để giải quyết vấn đề này nhóm nghiên cứu phát triển đã xây dựng một ngôn ngữ lập trình mới đặt tên là Oak tương tự như C++ nhưng loại bỏ một số tính năng nguy hiểm của C++ và có khả năng chạy trên nhiều nền phần cứng khác nhau. Cùng lúc đó world wide web bắt đầu phát triển và Sun đã thấy được tiềm năng của ngôn ngữ Oak nên đã đầu tư cải tiến và phát triển. Sau đó không lâu ngôn ngữ mới với tên gọi là Java ra đời và được giới thiệu năm 1995.
99
5.4.2 Các khối chức năng thực hiện yêu cầu đặt ra
Hiển thị Bản đồ offlineHiển thị
Hiển thị vị trí thông tin xe và trạm chờ Nhận và xử lý dữ liệu Lắng nghe, chờ yêu cầu Kết nối Điều khiển Gửi tín hiệu tới xe bus, trạm chờ xe bus
Hình 5.4 Sơ đồ khối Server
Khối kết nối: Thực hiện thao tác lắng, chờ yêu cầu kết nối từ user và sau khi có yêu cầu kết nối thì thực hiện thao tác kết nối Server với user.
Khối xử lý dữ liệu: Dữ liệu khi được các user gửi về Server sẽ được phân tích và tách thành các mục riêng biệt nhờ vào các hàm tách và phân chia dữ liệu. Dữ liệu về vị trí, tốc độ. .. Dữ liệu về vị trí được quy đổi thành các tọa độ bao gồm: Kinh độ và vĩ độ. Sau đó các dữ liệu này được lưu lại sử dụng.
Khối hiển thị: Sẽ tự động cập nhật các thông tin của phương tiện và hiển thị. Khối hiển thị thông tin, vị trí xe buýt và trạm chờ trên bản đồ.
Khối điều khiển: dữ liệu sau khi xử lý sẽ được tính toán khoảng cách rồi thông báo cho xe buýt và trạm chờ xe buýt.
5.4.3. Các công việc thực hiện để xây dựng phần mềm Server
Server thực hiện thao tác lắng nghe, chờ yêu cầu kết nối từ user và sau khi có yêu cầu kết nối thì thực hiện thao tác kết nối Server với user.
Sau khi Server đã được kết nối với user, Server thực hiện nhận và xử lý dữ liệu từ user gửi về. Dữ liệu user gửi về là một chuỗi các thông tin, gồm có kinh độ, vĩ độ, tốc độ,...ta thực hiện các thao tác để tách riêng từng dữ liệu cần thiết thành các mảng riêng biệt. Dữ liệu này sẽ phục vụ cho các khối hiển thị và khối điều khiển.
100
5.4.3.1. Xây dựng bản đồ offline
Bản đồ offline là một bản đồ tĩnh, mỗi khu vực nhất định được hiển thị bằng một bản đồ, trong đồ án chúng em thực hiện sử dụng khảo sát khu vực Trường ĐH Sư phạm kỹ thuật Thành Phố Hồ Chí Minh.
Từ tọa độ thật của phương tiện để hiển thị chính xác vị trí của phương tiện trên bản đồ ta phải dựa và thuật toán cụ thể.
Thuật toán xác định vị trí phương tiện trên bản đồ:
Im.Width Im .H e ig h t (Lngmax,Latmax) Longitude Latitude X Y
Hình 5.5 Tọa độ của đối tượng trên bản đồ
Đầu tiên, xác định tọa độ của bốn vị trí trên góc bản đồ, khi biết được tọa độ của đối tượng, sử dụng công thức sau để xác định vị trí:
. ( )* .
. (5.1)
.
Im Width X Lngmin X Lngmin Map width Im Width
Map Width Lngmax Lngmin Lngmax Lngmin
. ( )* . . (5.2) .
Im Height Y Latmin Y Latmin Map Height
Im Height
Map Height Latmax Latmin Latmax Latmin
101
Map.Width là chiều rộng của bản đồ, Map.Height là chiều dài của bản đồ Với vị trí của bốn góc bản đồ được lấy thực tế có tọa độ như sau:
latmax = 10.853750, lngmin = 106.771320 latmin=10.850996, lngmax=106.774484
5.4.3.2. Xây dựng thuật toán tính khoảng cách
Điểm mốc
Điểm mốc được lấy như trên hình vẽ, được coi là điểm xuất phát của xe. Con đường được chia ra thành nhiều đoạn bằng nhau,mỗi đoạn cách nhau 10m. Tọa độ của mỗi đoạn được đi lấy thực tế bằng module GPS.Chiều dài bus đi được tính từ mốc bằng chiều dài của số đoạn bus đã đi qua nhân cho 10.
Latitude, longitude là vị trí thực của xe buýt gửi về qua module sim548. Dùng hàm tính khoảng cách từ vị trí thực của xe tới tọa độ của con đường. Khoảng cách được so sánh nếu nhỏ hơn 5m thì sẽ lấy tọa độ đang xét là tọa độ của xe buýt.
Công thức tính khoảng cách hai điểm theo kinh độ và vĩ độ:
Dist=6378000*acos(sin(latA)*sin(latB)+cos(latA)*cos(latB)*cos(lonB-lonA)) Dist: là khoảng cách giữa hai điểm.
latA,lonA: Vĩ độ, kinh độ của điểm A. latB,lonB: Vĩ độ, kinh độ của điểm B.
102
CHƯƠNG 6: KẾT QUẢ THỰC NGHIỆM