Tải bản đầy đủ (.doc) (24 trang)

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

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (442.08 KB, 24 trang )

Trường Đại Học Giao Thông Vận Tải TP.HCM
Khoa Công Nghệ Thông Tin.
  
BÁO CÁO ĐỀ TÀI
Mô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ện
3. Nguyễn Hữu Tình
4. Lý Quang Thiện
5. Nguyễn Văn Thơm
TP.HCM ngày 15 tháng 12 năm 2010
1
MỤC LỤC
MỤC LỤC 2
I. Giới thiệu: 3
II. Cơ sở lý thuyết 4
1. Giới thiệu về J2ME: 4
1.1. Tổng quan: 4
2.1javax.microedition.io.Connecton: 9
III. Hiện thực chương trình: 20
IV. Hướng dẫn cài đặt và sử dụng: 22
VI. Kiểm tra- đánh giá: 24
2
I. Giới thiệu:
Chương trình nhằm đáp ứng nhu cầu học anh văn ngày càng cao của mọi người, cụ thể là
dịch 1 từ, 1 đoạn văn bản trên 1 thiết bị rất phổ biến là điện thoại di động.
Ngày nay, các công cụ dịch từ, văn bản có trên mạng rất nhiều. Trong đó, theo mọi người
nhận xét thì Google Translate là công cụ miễn phí, dễ sử dụng, và tốt nhất. Vì thế, chương trình sẽ


thông qua các API mà Google Translate đã cung cấp sẵn để dịch.
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.
3
II. Cơ sở lý thuyết
1. Giới thiệu về J2ME:
1.1. Tổng quan:
J2ME (Java 2 Micro Edition) là ngôn ngữ nền tảng để lập trình cho các thiết bị nhỏ gọn có sự
giới hạn về dung lương bộ nhớ cũng như là kích thước màn hình.
1.2. Kiến trúc của J2ME:
1.2.1 Các thành phần chính:
- Configuration: là định nghĩa một môi trường phần mềm cho một dòng các thiết bị có
cùng các tiêu chuẩn về phần cứng.
+ Kiểu và số lượng bộ nhớ.
+ Kiểu và tốc độ bộ xử lý.
+ Kiểu mạng kết nối.
Nghĩa là Configuration sẽ xác định JVM (Java Virtual Machine) được sử dụng. Trong J2ME,
Configuration tương ứng là CLDC ( Connected Limited Device Configuration).
CLDC được thiết kế nhằm vào các thiết bị cấp thấp, các thiết bị có từ 16 đến 512 kb bộ nhớ,
dung lượng ROM và RAM của thiết bị dùng CLDC cũng rất hạn chế.
- 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).
Một số đặc tính của MIDP:
+ Dung lượng ROM nhỏ nhất phải đạt 256kb.
+ 128kb RAM.
+ Màn hình đạt độ phân giải ít nhất 96x54 pixel
+ Input bằng keypad, keyboard hoặc màn hình cảm ứng.
+ Có một kết nối mạng hai chiều (Two-way network connection).

4
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
+ Java(TM) ME Platform SDK 3.0
+ Java NetBean
+ J2ME Wireless Toolkit….
1.3. Các thành phần giao diện chính:
J2ME hỗ trợ các thành phần giao diện như :
5

+Form.
+ Textfield.
+ Textbox.
+StringItem.
+ Gauge.
6
+ Listbox.
+ Choicegroup.
+ Datefield.
7
+ CustomItem.
+ ImageItem.
+ Ticker:
8
2. Các gói đã sử dụng:
2.1javax.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ự
9
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
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):
Socket: Connector.open(“socket://199.3.122.21:1511”);
Comm port: Connector.open(“comm:0;baudrate=9600”);
Datagram: Connector.open(“Datagram://19.3.12.21:1511”);
Files: Connector.open(“file:/filename.txt”);
MIDP hỗ trợ giao thức HTTP:
HTTP: Connector.open(“”);
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.
10
2.2javax.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
ta viế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ạy
trê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
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.
11
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.
try
{
ServerSocketConnection ssc = (ServerSocketConnection)
Connector.open("socket://:9002");
StreamConnection sc = null;
InputStream is = null;
Try

{
sc = ssc.acceptAndOpen();
is = sc.openInputStream();
int ch = 0;
StringBuffer sb = new StringBuffer();
while ((ch = is.read()) != -1)
{
sb.append((char)ch);
}
System.out.println(sb.toString());
} finally
{
ssc.close();
sc.close();
is.close();
}
} catch (IOException x)
{
x.printStackTrace();
12
}
Ở đoạn code trên 1 SserverSocketConnection được mở ở port 9002, để lắng nghe tất cả các
kết nối. Nó sẽ ở trạng thái chờ khi phương thức acceptAndOpen() được gọi. Khi 1 kết
nối Socket đã được thiết lập, phương thức acceptAndOpen() sẽ return 1 instance của
SocketConnection. Sau đó nó sẽ mở 1 input stream trên kết nối này cho phép đọc các
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.
try{
SocketConnection sc = (SocketConnection)
Connector.open("socket://localhost:9002");

OutputStream os = null;
try{
os = sc.openOutputStream();
byte[] data = "Hello from a socket!".getBytes();
os.write(data);
} finally{
sc.close();
os.close();
}
} catch (IOException x){
x.printStackTrace();
}
Một SocketCOnnection được thiết lập đến localhost trên port 9002. Lúc này, trên server
phương thức acceptAndOpen() sẽ return. Sau khi kết nối được mở thành công
OutputStream sẽ được dùng để ghi "Hello from a socket!" vào stream này. Chú ý
rằng nếu không có server nào lắng nghe thì 1 exception sẽ được ném ra.
2.3javax.microedition.io.HttpConnection
Class HttpConnection được định nghĩa trong J2ME MIDP cho phép các nhà phát triển
xử lý các kết nối Http.
Kết nối HTTP
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ể
dùng để kiểm tra tính hợp lệ của một địa chỉ URL.
13
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
{
HttpConnection c = null; InputStream is = null;
try {
c = (HttpConnection)Connector.open(url); // Mở kết nối HTTP
is = c.openInputStream(); // Mở Input Stream, mặc định GET
type = c.getType();
int len = (int)c.getLength();
if (len > 0) {
byte[] data = new byte[len];
int numBytes = is.read[data]; // Nếu biết chiều dài
14
processData(data);
} else
{
int ch;
while ((ch = is.read()) != -1) { // đọc đến khi nào gặp -1
stringBuffer.append((char)ch);
}

processBuffer(stringBuffer);
}
} finally {
if (is != null) is.close();
if (c != null) c.close();
}
}
getViaHttpConnection() nhận một chuỗi là tham số đầu vào, đó là địa chỉ địa chỉ URL chuyển cho
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. Phương thức openInputStream() sẽ làm cho kết nối chuyển sang
trạng thái Kết nối. Vì không có yêu cầu phương thức nào, kết nối sẽ mặc định là một kết nối HTTP
GET.
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
{
HttpConnection c = null; InputStream is = null;
OutputStream os;
try
{
c = (HttpConnection)Connector.open(url); // Mở kết nối

// Thiết lập phương thức POST
// trong khi vẫn ở trạng thái Thiết lập
15
c.setRequestMethod(HttpConnection.POST);
// Mở luồng output stream và chuyển sang trạng thái Kết nối
os = c.openOutputStream();
// Chuyển đổi dữ liệu thành luồng byte
// và gởi đến server
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ương
thứ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.

2.4com.google.api.javame
Gói này cung cấp các API để sử dụng Google Translate trên JavaME, nó sử dụng Google
AJAX Language API dịch 1 từ hay 1 đoạn văn thông qua 1 kết nối Http.
Trang chủ : />Để dịch 1 từ hay 1 đoạn văn chỉ cần gọi phương thức static translate trong class
Translate:
Translate.translate("How are you", Language.ENGLISH, Language.FRENCH);
16
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.5Cá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
a file
FileInputStream new FileInputStream(f)
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.
Arguments Action Return value
End of stream
return value
None Read a single byte
The next unsigned
byte in the file, as an
int.
-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 bytes
read into the array
17
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);
int b;

do {
b = in.read();
if (b != -1) {
System.out.println("The next byte is " + b);
}
} while (b != -1);
in.close();
Hay có thể thay thế vòng lặp trên bằng vòng lặp ngắn ngọn hơn như sau.
int b;
while ((b = in.read()) != -1) {

}
Sau khi đọc xong chúng ta nên đóng lại hết các stream đang sử dụng, InputStream
cung cấp phương thức close() để làm việc này.Chú ý là read()và close() có thể ném các ngoại
lệ IOException.
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.
18
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 cho
việ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");
while(moreData)
{
int data = getMoreData();
output.write(data);
}
output.close();
19
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 đến
server, 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.
Client sẽ có 3 phương pháp kết nối khác nhau để có thể dịch được đoạn văn bản:

+ kết nối qua socket với server tại một port đã dựng sẵn.
20
+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 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.
21
IV. Hướng dẫn cài đặt và sử dụng:
1. Cài đặt:
- Bạn chỉ cần copy file j2me_google_translate.jar vào điện thoại của mình là đã có thể chạy
ứng dụng.
- Trường hợp chạy trên giả lập: Nếu bạn cài Java wireless Toolkit thì mặc định chương
trình đã tạo cho bạn một điện thoại giả lập. Sau khi bạn biên dịch xong thì bạn sẽ thấy 2
file: một file có phần mở rộng *.jar và một file có phàn mở rộng *.jad.
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.
22

2.2.Hướng dẫn cấu hình chương trình:
Để cấu hình chương trình, các bạn vào menu, sau đó chọn Config, ngay sau đó màn hình
Config sẽ hiện ra với các tùy chọn như hình bên dưới:
- Tại phần Translate from và Translate to bạn có thể chọn các ngôn ngữ khác nhau cho phù
hợp với nhu cầu của mình.
- Tại phần Choice Protocol: có 3 tùy chọn Socket, Http và Direct Translate ( đã giải thích ở
phần trên). Bạn sẽ chọn các phương pháp kết nối tại đây.
+ Nếu chọn Socket, bạn sẽ phải đinh ra địa chỉ IP của Server cùng với số port tương
ứng sẽ kết nối đến. để thực hiện điều này trên chương trình giả lập bạn phải khởi động
dịch vụ của server tại máy local bằng cách doubleclick vào file server.bat ( file này có
tác dụng thực thi file server.jar).
+ Nếu chọn http, bạn sẽ phải chi ra địa chỉ của server trên internet mà bạn đã cấu hình
làm trung gian, tại đây chúng tôi đã cấu hình server này mặc định tại
.
+ Nếu chọn Direct translate bạn sẽ không cần phải câu hình gì thêm cả, vì lúc này
điện thoại của bạn và server của google sẽ lien lạc trực tiếp với nhau, và tất cả những
thông số đã được cấu hình sẵn.
23
VI. Kiểm tra- đánh giá:
Về mặt kỹ thuật kết nối, chương trình đã có thể kết nối thông suốt với cả 3 kiểu kết nối, tuy
nhiên về mặt xử lý dữ liệu vẫn còn có những lỗi phát sinh ra đối với dữ liệu trả về.
VD: khi dịch từ một ngôn ngữ nước ngoài sang Tiếng Việt thì đôi khi vẫn phát sinh lỗi định dạng
Unicode,chữ hiển thị sai font hoặc là không hiển thị đúng định dạng, thiếu dấu…
Trong thời gian tơi, nhóm sẽ cố gắng để khắc phục nhược điểm này.
24

×