Chỉ sự trao đổi thông tin trong đó thông tin được gửi từ một điểm này đến một điểm khác. Có nghĩa là chỉ có một người gửi và một người nhận.
Hình 1.2: Mô hình truyền dữ liệu Unicast
Kỹ thuật lập trình Unicast sử dụng giao thức TCP, TCP là giao thức hoạt động theo hướng kết nối (connection-oriented) nghĩa là trước khi truyền dữ liệu giữa 2 máy, nó thiết lập một kết nối giữa 2 máy theo phương thức “bắt tay 3 bước (three-way-handshake)” bằng cách gửi gói tin ACK từ máy gửi sang máy nhận, trong suốt quá trình truyền gói tin, máy gửi yêu cầu máy đích xác nhận đã nhận đủ các gói tin đã gửi, nếu có gói tin bị mất, máy đích sẽ yêu cầu máy gửi gửi lại, thường xuyên kiểm tra gói tin có bị lỗi hay không, ngoài ra còn cho phép quy định số lượng gói tin được gửi trong một lần gửi (window-sizing) điều này đảm bảo máy nhận nhận được đầy đủ các gói mà máy gửi gửi đi, vì vậy nó truyền dữ liệu chậm hơn UDP nhưng đáng tin cậy hơn.
Hình 1.3: Quá trình bắt tay 3 bước (three-way-handshake)
1.3.2, Khái niệm Multicast [5] [6][7]
Multicasting là cách hữu hiệu để truyền văn bản, âm thanh, hình ảnh, video đến một nhóm người trên mạng Internet hoặc mạng nội bộ. Thay vì phải gửi thông tin tới từng cá nhân, thông tin sẽ được gửi cho cả nhóm multicast. Multicasting có thể thực hiện trên nhiều mô hình mạng.[5]
Multicasting được xây dựng dựa trên khái niệm nhóm. Một nhóm multicast là một nhóm không hạn chế các đầu cuối nhận có chung mối quan tâm đến một luồng dữ liệu cụ thể. Nhóm này không bị hạn chế về mặt vật lý cũng như vị trí
địa lý. Các host có thể nằm ở bất cứ nơi nào trên mạng Internet hay ở bất cứ
mạng riêng nào. Mỗi host muốn nhận được luồng dữ liệu của một nhóm thì phải tham gia vào nhóm thông qua giao thức quản lý nhóm IGMP (Internet Group Management Protocol). IGMP được sử dụng để đǎng ký động các host riêng lẻ trong một nhóm multicast hoặc trong một mạng LAN cụ thể. Các host xác định các thành viên trong nhóm bằng cách gửi đi các bản tin IGMP đến router multicast.[5]
Các router nghe các bản tin IGMP và định kỳ gửi đi các thông tin truy vấn để phát hiện những nhóm nào đang hoạt động hoặc không hoạt động trên một mạng con cụ thể. Chỉ khi là thành viên của nhóm, host mới có thể nhận được dữ liệu.Multicasting là cách truyền dữ liệu từ một-nhiều (one-to-many). Ngược với phương pháp unicasting - gửi thông tin trên Internet theo cách truyền dữ liệu một-một (one-to-one). Nếu multicasting có thể so sánh với cuộc gọi chung cho nhiều người (conference call) thì unicasting có thể so sánh với cuộc gọi riêng giữa hai người.[5]
Hình 1.5: Sự khác nhau giữa TCP và UDP.[7]
1.4. Tiểu kết
Sau khi hoàn thành chương I thì chúng ta đã hiểu được thế nào là lập trình mạng, phạm vi của các loại mạng, hiểu thế nào là giao thức TCP, UDP, cơ bản về lập trình Socket.
Chúng ta cũng biết được ngôn ngữ Java ra đời từ đâu và ai là người đầu tiên để ngôn ngữ Java được hình thành và quá trình phát triển của nó, hiểu được lý do vì sao ngôn ngữ này lại được sử dụng rộng rãi, và ngày càng được phổ biến, tại sao nó
lại được sinh viên, lập trình viên, ..., chọn để phục vụ cho việc học tập cũng như
công việc của mình.
Ngoài ra ta còn biết được thế nào là Unicast, Multicast, đặc điểm và ứng dụng của chúng trong thời đại công nghệ Internet ngày càng được sử dụng rộng rãi này. Như vậy, với những gì mà chúng ta đã biết ở chương I, thì nó sẽ là cơ sở lý thuyết, là tiền đề để lấy nền tảng cho việc xây dựng chương trình của chúng ta ở chương II.
CHƯƠNG II: XÂY DỰNG CHƯƠNG TRÌNH 2.1. Phân tích các các chức năng của chương trình
Chương trình gồm 2 phần : Client và Server.
2.1.1, Chức năng của Client
Hình 2.1: Sơđồ chức năng của Client
• Nhận data : Client sẽ luôn lắng nghe những tín hiệu từ server đưa xuống và khi dữ liệu được truyền xuống thì Client sẽ lưu dữ liệu vào thư mục do người sử dụng cài đặt.
• Ghi file Config : Client sẽ lấy thông tin từ file config để hiển thị dữ liệu theo yêu cầu của server.
• Hiển thị : Dữ liệu sẽ được hiển thị trên trình duyệt web bằng mã nhúng html.
2.1.2, Chức năng của Server
Hình 2.2: Sơ đồ chức năng của Server
• CheckClient: Server sẽ gửi 1 bản tin Multicast để kiểm tra xem hiện tại có bao nhiêu Client đang lắng nghe , sau đó sẽ hiển thị địa chỉ IP của host và thông tin file info.txt của từng host
• Thêm data: Cho phép người dùng chọn dữ liệu muốn gửi xuống các Client. • Xóa data: Xóa 1 hoặc nhiều file trên danh sách đã chọn.
• Gửi data: Server có thể thực hiện gửi các file đã chọn xuống các Client đang lắng nghe dưới dạng Multicast hoặc Unicast, đồng thời sẽ ghi lại thông tin gửi vào file server.txt
• Lập lịch: Server sẽ gửi thời gian thực của client và thời lượng hiển thị dữ liệu trên web browser.
2.2. Mô hình xử lý của chương trình 2.2.1, Mô hình xử lý của server 2.2.1, Mô hình xử lý của server
Hình 2.3: Mô hình xử lý của server
Server có chức năng cho phép người dùng kiểm tra hiện đang có bao nhiêu Client đang lắng nghe để nhận dữ liệu, sau khi kiểm tra thì người dùng có thể gửi file và thời lượng hiển thị, cùng với thời gian hiển thị theo giờ hệ thống cho 1 host hoặc 1 nhóm host nào đó tùy theo giao thức được sử dụng là UDP hay TCP.
Hình 2.4: Kiểm tra số lượng Client đang lắng nghe
Để kiểm tra số lượng Client đang lắng nghe thì server sẽ gửi 1 message dạng Multicast, sau khi nhận được tín hiệu thì các Client sẽ trả lời cho server biết : (1) Server gửi tín hiệu kiểm tra có bao nhiêu Client đang lắng nghe
(2) Client phản hồi đang sẵn sàng nhận dữ liệu và thông tin đang có.
Hình 2.5: Sử dụng kỹ thuật Multicast để truyền dữ liệu.
Server sử dụng giao thức UDP để truyền dữ liệu cho các Client. Đề phòng trường hợp mất dữ liệu thì server sẽ sử dụng giao thức TCP để gửi bổ sung dữ liệu đến những Client nhận thiếu dữ liệu.
(1)Server sử dụng giao thức UDP để truyền dữ liệu cho các client, sau khi nhận được dữ liệu, client sẽ gửi thông tin các file nhận được cho server biết.
(2)Sau khi so sánh với danh sách file đã gửi, Client nào nhận thiếu dữ liệu sẽ được server gửi bổ sung bằng giao thức TCP.
Hình 2.6: Server gửi thời lượng hiển thị, thời gian cho các client
Sau khi đã hoàn tất công việc gửi dữ liệu xuống các client, server sẽ gửi danh sách thời lượng hiển thị, thời gian hiển thị theo giờ hệ thống của từng file xuống client ở dạng Multicast, sau khi nhận được bản tin này thì các Client sẽ bắt đầu hiển thị trên browser,
Hình 2.7: Mô hình tổng quan của chương trình.
Sau khi nhận dữ liệu và thời lượng hiển thị thì client sẽ cho hiển thị các dữ liệu đó trên web browser.
2.2.2, Mô hình xử lý Client
Hình 2.8: Mô hình xử lý của Client.
Sau khi nhận được dữ liệu từ server đưa xuống, Client sẽ lưu chúng vào 1 thư mục do người sử dụng đặt trước, khi nhận được thời lượng của server đưa xuống, Client sẽ tạo ra 1 trang html có mã nhúng của dữ liệu muốn hiển thị và sau đó load nó lên, sau mỗi một thời gian nhất định, client sẽ tạo 1 trang html khác đè chồng lên trang có sẵn và thực hiện refresh lại trang web. Sau khi kết thúc 1 lượt thì dữ liệu sẽ được chạy lại từ đầu.
Như vậy, để thực hiện các công việc trên chúng ta phải sử dụng các gói thư viện của Java gồm : java.io, java.net, java.nio, java.util, java.awt, java.text, java.swing, java.
2.3, Xác định các gói thư viện sẽ sử dụng 2.3.1, Gói java.net 2.3.1, Gói java.net
Cung cấp các lớp và các giao diện cho việc lập trình TCP hoặc UDP, trong chương trình sử dụng các lớp chính là :
• Đối với lập trình TCP sử dụng các lớp :
o java.net.ServerSocket; o java.net.Socket;
o java.net.SocketAddress;
• Đối với lập trình UDP sử dụng các lớp :
o java.net.DatagramPacket; o java.net.InetAddress; o java.net.MulticastSocket;
2.3.2, Gói java.io
Cung cấp các phương thức nhập xuất và thao tác với file. Sử dụng các lớp chính của gói java.io là :
• java.io.File; • java.io.FileInputStream; • java.io.FileOutputStream; • java.io.InputStreamReader; • java.io.OutputStreamWriter; 2.3.3, Gói java.util
Gói Java.util cung cấp một số lớp tiện ích Java, thường xuyên trong tất cả các loại chương trình ứng dụng. Nó bao gồm một số lớp sau:
• Hashtable • Random • Vector
• StringTokenizer
• java.util.ArrayList; • java.util.Hashtable; • java.util.LinkedList; • java.util.List; • java.util.Vector; • java.util.Iterator; • java.util.Queue; • java.util.Set; • java.util.Date; • java.util.Properties; 2.3.4, Gói java.text
Định dạng ngày tháng để ghi file log.Sử dụng các thành phần: • java.text.DateFormat;
• java.text.SimpleDateFormat;
2.3.5, Gói giao diện đồ họa javax.swings và java.awt
Sử dụng các thành phần để thiết kế giao diện đồ họa người dùng với các controls như buttons , label, checkbox, text area, text field, ....
2.3.6, Gói java.nio
Gói này chứa các buffer cung cấp các kỹ thuật lưu trữ dữ liệu ở dạng nguyên thủy trong bộ nhớ trong. Chương trình sử dụng các thành phần của gói java.nio là:
• java.nio.ByteBuffer;
• java.nio.charset.Charset;
• java.nio.charset.CharsetDecoder;
2.4, Xây dựng chương trình.
Chương trình được xây dựng thành 3 module chính : • ClientServer
• UDPServer • UDPClient
Trong đó module ClientServer được xây dựng làm thư viện dùng chung cho 2 module còn lại, module này sẽ đảm nhiệm vai trò thống nhất những quy ước của cả Client và Server trong việc truyền nhận dữ liệu.
2.4.1, ClientServer
Hình 2.9: Gói thư viện dùng chung ClientServer
ClientServer bao gồm 3 module con:
• ClientServer : gồm 2 class là : DinhNghia và GoiTin
o Class DinhNghia : Đảm nhiệm vai trò định nghĩa các thông báo lỗi và các biến dùng chung cho cả 2 giao thức truyền nhận dữ liệu TCP và UDP.
o Class GoiTin : Đảm nhiệm vai trò chuyển đổi dữ liệu thành các mảng byte để server truyền đi và chuyển các mảng byte đó thành dữ liệu đọc được khi Client nhận được
• tcpClientServer : Bao gồm 3 class dùng để xử lý quá trình gửi và nhận bằng giao thức TCP/IP cho cả Client và Server , nó chứa 3 class là :
o TCPSendAndReceive : Lớp dùng chung của cả Client và Server dùng để gửi nhận dữ liệu bằng giao thức TCP.
o TCPClient : Kế thừa từ lớp TCPSendAndReceive dùng để nhận dữ liệu. o TCPServer : Kế thừa từ lớp TCPSendAndReceive dùng để gửi dữ liệu. • udpClientServer : Bao gồm 3 class dùng để xử lý quá trình gửi và nhận
bằng giao thức UDP cho cả Client và Server , nó chứa 3 class là :
o UDPSendAndReceive : Lớp dùng chung của cả Client và Server dùng để gửi nhận dữ liệu bằng giao thức UDP.
o UDPClient : Kế thừa từ lớp UDPSendAndReceive dùng để nhận dữ liệu. o UDPServer : Kế thừa từ lớp UDPSendAndReceive dùng để gửi dữ liệu.
2.4.2, UDPClient
UDPClient bao gồm 3 module con: • udpClient: chứa 3 class :
o Class DinhNghia: class này định nghĩa các lỗi có thể xảy ra , đường dẫn file cấu hình và các file mặc định để hiển thị trên trình duyệt web.
o Class CauHinh: Class này đảm nhiệm vai trò lấy thông tin từ file config. o FrmMain: Cung cấp giao diện đồ họa cho Client.
• udpClien.SystemtrayIcon:
o SystemtrayIcon: Hiển thị một Icon của chương trình khi client khởi động.
• udpClien.Registry:
o KhoiDongCungHeThong: Khi hệ thống khởi động, chương trình Client sẽ được bật lên để lắng nghe thông tin từ Server gửi về.
2.4.3, UDPServer
UDPServer bao gồm 1 module con:
• Class DinhNghia : class này định nghĩa các lỗi có thể xảy ra , đường dẫn file cấu hình của server.
• Class CauHinh : Lấy các thông tin cấu hình của server .
• FrmMain : Cung cấp giao diện đồ họa cho server bao gồm các chức năng của Multicast như : CheckClient, gửi data, gửi time hiển thị , show các địa chỉ IP đang được lắng nghe.
• FrmSendTCP : Cung cấp giao diện đồ họa cho người sử dụng truyền dữ liệu đến các client ở dạng TCP (Unicast)
• FrmSending : Kiểm tra quá trình gửi file từ server xuống các client. • LogFile : Ghi nhật ký gửi của server vào 1 file log.
• ThongTinFile : Thiết lập thời gian hiển thị cho từng file khi được gửi xuống client.
• ThongTinHost : Kiểm tra khi nhận được 1 message được gửi từ host nào.
2.5. Giao diện của chương trình
Hình 2.13: Giao diện khi thêm dữ liệu
Hình 2.15: Giao diện của Client.
Hình 2.17: Giao diện gửi theo giao thức TCP
2.6. Tiểu kết
Sau khi phân tích các chức năng, vẽ các mô hình chức năng, mô hình tổng quát của chương trình, tìm hiểu về các gói trong ngôn ngữ lập trình Java được sử dụng trong việc xây dựng chương trình. Chúng ta tiến hành xây dựng 3 module: ClientServer, UDPServer, UDPClient và xây dựng được giao diện cho người sử dụng.
Như vậy sau khi đã hoàn thành chương trình, để biết được kết quả đạt được của chương trình thì mời mọi người xem chương III.
CHƯƠNG III: KẾT QUẢ ĐẠT ĐƯỢC 3.1. Kết quả đạt được
¾Server
• Kiểm tra được có bao nhiêu Client đang lắng nghe từ Server. • Gửi dữ liệu xuống các Client đang kết nối với Server.
• Gửi thời gian hiển thị cho từng file của Client. • Lưu thông tin các file đã gửi cho Client. ¾Client
• Nhận dữ liệu khi Server gửi xuống và lưu dữ liệu vào file receive. • Hiển thị dữ liệu khi nhận được thông báo hiển thị từ Server.
3.2 Kết quả thử nghiệm
Nhìn chung sau khi hoàn thiện đồ án chúng tôi đã đạt được những yêu cầu cơ bản của chương trình, sau khi thử nghiệm chương trình trên môi trường Window XP, Win 7 thì chương trình chạy ổn định.
Chúng tôi đã thử nghiệm chương trình trong mạng nội bộ (LAN), sử dụng mạng VNPT tốc độ 4mb.
3.2.1, Mạng LAN
¾ UDP gửi cho 2 Client
• 1 file 673mb gửi hết 141 phút 5 giây, như vậy tốc độ gửi file 81kb/s. • 4 file 248mb gửi hết 46 phút 21 giây, như vậy tốc độ gửi file 83kb/s. • 6 file 37.6mb gửi hết 8 phút 9 giây, như vậy tốc độ gửi file 79kb/s. • 38 file 12.4mb gửi hết 3 phút 45 giây, như vậy tốc độ gửi file 57kb/s. • 94 file 37.6mb gửi hết 10 phút 52 giây, như vậy tốc độ gửi file 58kb/s.
¾ UDP gửi cho 5 Client
• 1 file 673mb gửi hết 145 phút 18 giây, như vậy tốc độ gửi file 79kb/s. • 4 file 12.4mb gửi hết 3 phút 21 giây, như vậy tốc độ gửi file 73kb/s. • 6 flie 26.2mb gửi hết 6 phút 42 giây, như vậy tốc độ gửi file 70kb/s. • 38 file 43.2mb gửi hết 11 phút 21 giây, như vậy tốc độ gửi file 65kb/s. • 94 flie 37.6mb gửi hết 10 phút 32 giây, như vậy tốc độ gửi file 61kb/s.
Hình 3.1: Biểu đồ thể hiện tốc độ gửi dữ liệu trong cơ chế UDP
Kết quả biểu đồ thì chúng ta thấy được là tốc độ gửi file của cơ chế UDP là không cao, nó không bị ảnh hưởng bới số lượng Client kết nối, mà bị ảnh hưởng bởi tốc độ của các gói cước internet, ngoài ra nó cũng bị ảnh hưởng bởi số lượng file được gửi đi.
¾TCP
• 76 file 24.9mb gửi hết 2 phút 4 giây, như vậy tốc độ gửi file 206kb/s. • 38 file 12.4mb gửi hết 58 giây, như vậy tốc độ gửi file 219kb/s. • 24 file 150mb gửi hết 57 giây, như vậy tốc độ gửi file 2.63mb/s.
• 4 file 951mb gửi hết 2 phút 22 giây, như vậy tốc độ gửi file 6.7mb/s.