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

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ẽ

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

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ẽ

{
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");

(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);
}

// 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.

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;

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:

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


Nhờ tải bản gốc

Tài liệu, ebook tham khảo khác

Music ♫

Copyright: Tài liệu đại học © DMCA.com Protection Status