1. Trang chủ
  2. » Luận Văn - Báo Cáo

BÁO CÁO ĐỀ TÀI Môn học: Lập Trình Mạng.

24 899 3

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 24
Dung lượng 573,5 KB

Nội dung

Trường Đại Học Giao Thông Vận Tải TP.HCMKhoa Công Nghệ Thông Tin.  BÁO CÁO ĐỀ TÀIMôn học: Lập Trình Mạng.GVHD: Thầy Đặng Tư Cách Thành viên nhóm:1.Võ Huỳnh Lê Vũ.2.Dương Ngọc Thiện3.Nguyễn Hữu Tình4.Lý Quang Thiện5.Nguyễn Văn ThơmTP.HCM ngày 15 tháng 12 năm 2010

Trang 1

Trường Đại Học Giao Thông Vận Tải TP.HCM

Khoa Công Nghệ Thông Tin.

Trang 2

MỤC LỤC

I Giới thiệu: 3

II Cơ sở lý thuyết 3

1 Giới thiệu về J2ME: 3

1.1 Tổng quan: 3

1.2 Kiến trúc của J2ME: 4

2 Các gói đã sử dụng: 9

2.1 javax.microedition.io.Connecton: 9

2.2 javax.microedition.io.SocketConnection 11

2.3 javax.microedition.io.HttpConnection 13

2.4 com.google.api.javame 16

2.5 Các gói I/O liên quan: 17

III Hiện thực chương trình: 20

IV Hướng dẫn cài đặt và sử dụng: 22

1 Cài đặt: 22

2 Hướng dẩn sử dụng: 22

2.1 Dịch văn bản 22

2.2.Hướng dẫn cấu hình chương trình: 23

VI Kiểm tra- đánh giá: 24

Trang 3

Trên điện thoại di động thì JAVA rất phổ biến hầu như điện thoại nào cũng hỗ trợ, vì thế, chương trình sẽ sử dụng JAVA cụ thể là JAVA2ME Chương trình có thể dịch thông qua kết nối Socket hoặc Http, thông qua 1 server khác hoặc kết nối trực tiếp đến Google Translate để dịch.

Trang 4

II Cơ sở lý thuyết

1 Giới thiệu về J2ME:

- Profile: là tầng trên của Configuration, Profile mở rộng Configuration bằng cách thêm

các class để hỗ trợ cho các thiết bị với các tính năng chuyên biệt Profile được sử dụng trong J2ME là MIDP (Mobile Information Device Profile)

Trang 5

Hạn chế của MIDP:

+ Không hỗ trợ phép tính với dấu phầy động: phép tính này đòi hỏi tài nguyên hệ

thống vượt quá sự cho phép của các thiết bị dùng J2ME

+ Hỗ trợ hạn chế thao tác bắt lỗi

+ Không hỗ trợ các tính năng quản lý file và thư mục

Những tính năng chính của MIDP 1.0:

+ Các lớp và kiểu dữ liệu: các thư viện thông dụng vẫn được giữ lại để hỗ trợ người lập trình

+ Hỗ trợ Form và giao diện người dùng

+ Hỗ trợ Time và Alert

+ Tính năng RMS cho phép lưu trữ dữ liệu

+ Hỗ trợ đối tượng Display

MIDP 2.0 ra đời cũng đã hỗ trợ nhiều tính năng mới:

+ Nâng cấp khả năng bảo mật (hỗ trợ https)

+ Thêm cácAPI hỗ trợ Multimedia

+ Hỗ trợ game nhiều hơn

+ Hỗ trợ kiểu ảnh RGB

- Java Virtual Machine: J2ME dùng một máy ảo Java riêng biệt với tên gọi (KVM)

KVM là một sự rút gọn của JVM để thích hợp với các thiết bị có sự hạn chế về cấu hình Chính vì điều đó, những thiết bị nhỏ gọn chỉ hỗ trợ J2ME thì không thế chạy các ứng dụng đươc viết trên môi trường Java thuần túy được

1.2.2 Môi trường phát triển:

Có nhiều bộ công cụ hỗ trợ lập trình J2ME

Trang 7

+ Listbox.

+ Choicegroup

+ Datefield

Trang 8

+ CustomItem.

+ ImageItem

+ Ticker:

Trang 9

2 Các gói đã sử dụng:

2.1 javax.microedition.io.Connecton:

Mạng cho phép client di động gởi và nhận dữ liệu đến server Nó cho phép thiết bị di động

sử dụng các ứng dụng như tìm kiếm cơ sở dữ liệu, trò chơi trực tuyến… Trong J2ME, mạng được chia làm hai phần Phần đầu tiên là khung được cung cấp bởi CLDC và phần hai là các giao thức thật sự được định nghĩa trong các hiện trạng

Khung mạng CLDC tổng quát (Generic CLDC Networking Framework)

CLDC cung cấp một khung tổng quát để thiết lập kết nối mạng Ý tưởng là nó là đưa ra một khung mà các hiện trạng khác nhau sẽ sử dụng Khung CLDC không định nghĩa giao thức thật sự Các giao thức sẽ được định nghĩa trong các hiện trạng Hình 1 biểu diễn cách mà khung CLDC làm việc:

Khung mạng CLDC tổng quát

Kết nối mạng được xây dựng bằng phương thức open() của lớp Connector trong CLDC Phương thức open() nhận một tham số đầu vào là chuỗi Chuỗi này dùng để xác định giao thức Định dạng của chuỗi là:

protocol:address;parameters

CLDC chỉ xác định tham số là một chuỗi nhưng nó không định nghĩa bất kỳ giao thức thật sựnào Các hiện trạng có thể định nghĩa các giao thức kết nối như HTTP, socket, cổng truyền

Trang 10

thông, datagram,… Phương thức open() trả về một đối tượng Connector Đối tượng này sau

đó có thể đóng vai trò là một giao thức xác định được định nghĩa trong hiện trạng

Connector.open(“protocol : address; parameters”);

Một số giao thức ví dụ (nhưng không được hỗ trợ bởi CLDC hay MIDP):

Trả về một đối tượng Connection

Ví dụ trên minh họa kết nối socket, cổng truyền thông, datagram, file và HTTP Tất cả các kết nối mạng đều có cùng định dạng, không quan tâm đến giao thức thật sự Nó chỉ khác nhau ở chuỗi chuyển cho phương thức open() Phương thức open() sẽ trả về một đối tượng Connection đóng vai trò là lớp giao thức (ví dụ HttpConnection) để có thể sử dụng các phương thức cho giao thức đó J2ME chỉ định nghĩa một kết nối là kết nối HTTP trong MIDP

Các lớp giao diện kết nối:

Dẫn xuất từ lớp Connection là nhiều lớp giao diện con cung cấp khung kết nối mạng Các giao diện khác nhau để hỗ trợ các loại thiết bị di động khác nhau

Trang 11

2.2 javax.microedition.io.SocketConnection

Khái quát về Socket :Như chúng ta đã biết kết nối URLs và URL cung cấp cho chúng ta một

cơ cấu để truy xuất vào các tài nguyên trên Internet ở một mức tương đối cao, nhưng đôi khi chương trình của chúng ta lại yêu cầu một giao tiếp ở tầng mạng mức thấp Ví dụ khi chúng taviết một ứng dụng client- server.Trong một ứng dụng client-server thì phía server sẽ cung cấp một số dịch vụ, như: xử lí cơ sở dữ liệu, các yêu cầu bên phía client đưa ra, sau đó sẽ gửi lại cho phía client Sự giao tiếp như vậy gọi là tin cậy bởi vì dữ liệu sẽ không bị mất mát, sai lệch trong quá trình truyền, server gửi cho client thông điệp gì thì phía client sẽ nhận được thông điệp nguyên như vậy Giao thức TCP sẽ cung cấp cho chúng ta một cách thức truyền tin cậy Để có thể nói chuyện được trên TCP thì chương trình client và chương trình server phải thiếp lập một đường truyền, và mỗi chương trình sẽ phải kết nối lại với socket là điểm cuối để kết nối, client và server muốn nói chuyện với nhau thì sẽ phải thông

qua socket, mọi thông điệp sẽ phải đi qua socket Chúng ta cứ mường tượng socket ở đây là một cái cửa mọi người muốn đi ra hay đi vào đều phải thông qua cái cửa này

Socket là gì?

Một socket là một điểm cuối của thông tin hai chiều liên kết giữa hai chương trình đang chạytrên mạng Những lớp socket được dùng để đại diện cho kết nối giữa một chương trình client

và một chương trình server Trong Java gói Java.net cung cấp hai lớp Socket và

ServerSocket để thực hiện kết nối giữa client và server

Thông thường thì server sẽ chạy trên một máy đặc biệt và có một socket giới hạn trong một Port number đặc biệt Phía client: client được biếthostname của máy mà server đang chạy và port number mà server đang lắng nghe Để tạo một yêu cầu kết nối client sẽ thử hẹn gặp

Trang 12

server ở trên máy của server thông qua port number Client cũng cần xác định chính nó với server thông qua local port number

Nếu mọi thứ tốt đẹp thì server sẽ đồng ý kết nối khi đồng ý kết nối thì server sẽ tạo ra một socket mới để nói chuyện với client và cũng tạo ra một socket khác để tiếp tục lắng nghe

Sử dụng Socket trong J2ME:

Đoạn code sau sẽ thiết lập 1 kết nối để lắng nghe 1 kết nối Socket

Trang 13

dữ liệu được truyền tới.

Đoạn code tiếp theo cho phép client khởi tạo 1 kết nối Socket đến kết nối trên

Hiện trạng MIDP hỗ trợ kết nối HTTP phiên bản 1.1 thông qua giao diện HttpConnection

Hỗ trợ GET, POST, HEAD của HTTP Yêu cầu GET (GET request) được dùng để lấy dữ liệu từ server và đây là phương thức mặc định Yêu cầu POST dùng để gởi dữ liệu đến server Yêu cầu HEAD tương tự như GET nhưng không có dữ liệu trả về từ server Nó có thể

Trang 14

dùng để kiểm tra tính hợp lệ của một địa chỉ URL.

Phương thức open() của lớp Connector dùng để mở kết nối Phương thức open() trả về một đối tượng Connection sau đó có thể đóng vai trò là một HttpConnection cho phép dùng tất cảcác phương thức của HttpConnection

Một kết nối HTTP có thể ở một trong ba trạng thái khác nhau: Thiết lập (Setup), Kết nối (Connectd), hay Đóng (Close) Trong trạng thái Thiết lập, kết nối chưa được tạo Phương thức setRequestMethod() và setRequestProperty() chỉ có thể được dùng trong trạng thái thiết lập Chúng được dùng để thiết lập phương thức yêu cầu (GET, POST, HEAD) và thiết lập thuộc tính HTTP (ví dụ User-Agent) Khi sử dụng một phương thức yêu cầu gởi dữ liệu đến hay nhận dữ liệu về từ server sẽ làm cho kết nối chuyển sang trạng thái Kết nối Gọi phương thức close() sẽ làm cho kết nối chuyển sang trạng thái Đóng Hình 3 minh họa các trạng thái kết nối khác nhau:

Ví dụ HTTP GET

Phương thức HTTP GET cho phép lấy dữ liệu từ server và là phương thức mặc định nếu không xác định phương thức trong trạng thái Thiết lập

Ví dụ thực hiện một kết nối HTTP GET cơ bản:

void getViaHttpConnection(String url) throws IOException

Trang 15

int numBytes = is.read[data]; // Nếu biết chiều dàiprocessData(data);

} else {

int ch;

while ((ch = is.read()) != -1) { // đọc đến khi nào gặp -1stringBuffer.append((char)ch);

}processBuffer(stringBuffer);

Phương thức getLength() sẽ trả về chiều dài của dữ liệu gởi từ server Nếu biết được chiều dài, thì biến len sẽ chứa chiều dài dữ liệu và ta có thể đọc toàn bộ khối dữ liệu Nếu không thì len sẽ chứa giá trị -1 và dữ liệu phải được đọc từng ký tự một cho đến khi gặp đánh dấu cuối file (-1) Phương thức processData() và processBuffer() xử lý dữ liệu đến từ server Khối lệnh cuối cùng sẽ đóng tất

cả các kết nối không quan tâm đến có lỗi từ khối lệnh try ở trước hay không

Ví dụ HTTP POST

HTTP POST cho phép gởi dữ liệu đến server Dữ liệu gởi đến server qua phương thức GET chỉ giới hạn là dữ liệu chứa địa chỉ URL Phương thức POST cho phép gởi một luồng byte đến server Phương thức HTTP POST thực hiện theo cách tương tự với phương thức HTTP GET

Ví dụ thực hiện một kết nối HTTP POST:

void getViaHttpConnection(String url) throws IOException

Trang 16

// trong khi vẫn ở trạng thái Thiết lập

os.write(“Data Sent to Server\n”.getBytes());

int status = c.getResponseCode();

// Kiểm tra status

if (status != HttpConnection.HTTP_OK) throw new IOException(“not OK”);

int len = (int)c.getLength();

// Giống như ví dụ HTTP GET:

// Kiểm tra length và xử lý tương ứng

} finally {

// Đóng kết nối giống như ví dụ HTTP GET

}

}

Như ví dụ trước, phương thức postViaHttpConnection() nhận tham số đầu vào là một chuỗi

là địa chỉ URL được chuyển đến phương thức open() của lớp Connection Phương thức open() trả về một đối tượng Connection đóng vai trò là một lớp HttpConnection

Kết nối bây giờ ở trong trạng thái thiết lập và phương thức yêu cầu được đặt là POST bằng phương thức setRequestMethod() Tất cả các thuộc tính khác phải được thiết lập trong trạng thái này

Phương thức openOutputStream() sẽ làm cho kết nối chuyển sang trạng thái Kết nối Phươngthức write() và flush() sẽ gởi dữ liệu đến server

Đoạn mã còn lại giống như phương thức GET Luồng input được mở, chiều dài của dữ liệu được kiểm tra, và dữ liệu được đọc toàn bộ khối hay từng ký tự một tùy vào chiều dài được trả về Khối lệnh cuối cùng sẽ đóng kết nối

Trang 17

Trong đó "How are you" là chuỗi cần dịch, Language.ENGLISH là ngôn ngữ nguồn, Language.FRENCH là ngôn ngữ đích Các ngôn ngữ này được định nghĩa sẵn trong class Language Có hơn 40 ngôn ngữ được hỗ trợ.

2.5 Các gói I/O liên quan:

2.5.1 java.io.InputStream

InputStream cung cấp các phương thức để đọc dữ liệu từ các nguồn như là : file, kết nối mạng, hay từ bộ nhớ v.v

InputStream có 1 vài subclass được định nghĩa sẵn dựa trên nguồn dữ liệu mà ta muốn đọc

Example types of InputStream in the standard Java libraries.

Data source Type of input stream

( InputStream subclass) How to obtain

an entry in a zip file ZipFileInputStream(Internal class to ZipFile ) new ZipFile(f).getInputStream(entry)

a network socket SocketInputStream new Socket( ).getInputStream()

a network source referred to by URL Depends on the protocol new URL(url).openStream()

a byte array ByteArrayInputStream new ByteArrayInputStream(b)

InputStream cung cấp phương thức read() để có thể lấy được dữ liệu Dưới đây là 1 vài dạng của phương thức read()

Different read() methods provided by InputStream

The next unsigned byte in the file, as anint.

-1

a byte array Read bytes from the stream into the array, limited by availability and array size Number of bytes read into the array

a byte array, offset and

number of bytes to read

Read bytes from the stream into the array, starting at the given offset and limited by availability and number of bytes specified

Number of bytesread into the array

Trang 18

Ví dụ dưới đây sẽ đọc các byte liên tục từ file.

import java.io.*;

File f = new File(dir, filename);

InputStream in = new FileInputStream(f);

Ngoài ra còn có một số phương thức sau:

• available trả về số lượng byte có thể được đọc từ inputStream này

• mark đánh dấu vị trí hiện tại trong input stream

• skip không đọc n byte dữ liệu từ input stream

• reset khởi động lại việc đọc từ vị trí trong phương thức mark

• …

2.5.2 java.io.OutputStream

Ngược lại với InputStream,OutputStream dùng để ghi dữ liệu

Trang 19

OutputStream là lớp trừu tượng và cơ bản nhất để tất cả các lớp xử lý luồng xuất byte

kế thừa OutputStream có 3 phương thức chính là:

• write ghi những byte dữ liệu tới luồng xuất

• flush xả luồng để tất cả các vùng nhớ (buffer) của luồng trong trạng thái trống sẵn sàng choviệc ghi

• close đóng luồng xuất và giải phóng tất cả tài nguyên hệ thống liên quan đến luồng xuất này

ByteArrayOutputStream là một lớp kế thừa từ lớp OutputStream, nó được dùng để ghi dữ liệu trong một mảng byte, vùng nhớ (buffer) dữ liệu sẽ tự động tăng khi chúng ta ghi dữ liệu vào

Một số hàm căn bản của lớp này:

• toByteArray lấy dữ liệu từ stream trong một mảng byte

• toString lấy dữ liệu từ stream trong một chuỗi

• size lấy kích của buffer hiện tại trong stream

• reset chuyển buffer về trạng thái rỗng (count=0)

• writeTo ghi dữ liệu tới một stream khác

FileOutputStream là lớp kế thừa từ lớp OutputStream, được dùng để ghi dữ liệu tới tập tin.Dưới đây là 1 ví dụ về ghi dữ liệu với FileOutputStream

OutputStream output = new FileOutputStream("c:\\data\\output-text.txt");

Trang 20

III Hiện thực chương trình:

Tên đề tài: Xây dựng ứng dụng mô hình Client/Server thực hiên công việc sau: Client (Mobile) gửi

câu tiếng anh (text) lên server Server (Trên PC) trả về câu tiếng việt (Dùng thư viện Google).

Quá trình làm việc: nhóm sử dụng J2ME để viết phần mềm dịch chạy trên nền điện thoại di động,

Về mặc chức năng, chương trình có 2 đối tượng chính:

+ phía client: đảm nhận việc nhận và gửi các đoạn test cần dịch mà người dùng nhập vào đếnserver, chờ server xử lý, sau đó nhận kết quả trả về từ server

+ phía server: nhận dữ liệu gửi từ client, xử lý (kết nối đến server google) và sau đó trả về kết quả cho client

Trang 21

+kết nối trực tiếp đến server của google với cú pháp có sẵn và nhận được kết quả dịchđược trả về từ server của google.

+kết nối đến một server trung gian đặt tại 1 host trên internet (http://tiuliuliuliu.vnn.ms) Server này sẽ chuyển tiếp yêu cầu đến server của google sau đó nhận kết quả dịch được trả về từ server của google và trả kết quả này về cho client (tại trang web http://tiuliuliuliu.vnn.ms sẽ được viết code php để xử lý)

Vấn đề đa ngôn ngữ: chương trình hỗ trợ cho 4 ngôn ngữ và người dùng có thể lựa chọn ngôn ngữ thích hợp bằng cách sử dụng RMS để lưu cấu hình, nên tất cả các cấu hình mà

người dùng đã lựa chọn sẽ được lưu lại để đảm bảo chương trình hoạt động theo đúng ýmuốn người dùng mà không cần phải cấu hình nhiều lần

Yêu cầu: để chạy được ứng dụng này thì yêu cầu điện thoại phải có kết nối GPRS hoặc 3G

Trang 22

IV Hướng dẫn cài đặt và sử dụng:

Bạn chỉ cần doubleclick vào file *.jad thì tự động chương trình sẽ đươc thực thi trên điện thoại giả lập của Java wireless toolkit

2 Hướng dẩn sử dụng:

2.1 Dịch văn bản

Sau khi chương trình chạy thì bạn sẽ thấy giao diện như hình dưới Muốn dịch đoạn

test nào bạn chỉ cần nhập đoạn test đó vào rồi nhấn nút Translate Có thể chương trình

sẽ hỏi bạn về một số vấn đề kết nối mạng, bạn hãy chọn yes Ngay sau đó kết quả dịch

sẽ hiển thị ra ngay phía dưới

Ngày đăng: 16/10/2014, 12:28

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w