LẬP TRÌNH ỨNG DỤNG UDP SOCKET TRÊN JAVA Mục tiêu: Sau bài thực hành này, sinh viên có thể: - Hiểu được mô hình hoạt động chung của ứng dụng mạng trên giao thức UDP.. - Các phần dưới đâ
Trang 1LẬP TRÌNH ỨNG DỤNG UDP SOCKET TRÊN JAVA
Mục tiêu:
Sau bài thực hành này, sinh viên có thể:
- Hiểu được mô hình hoạt động chung của ứng dụng mạng trên giao thức UDP
- Lập trình ứng dụng mạng với UDP socket trên ngôn ngữ Java
Nội dung chính:
- Mô hình hoạt động giao thức UDP
- Một số hàm cơ bản của lớp DatagramSocket
- Minh họa ứng dụng mạng đơn giản sử dụng DatagramSocket
Trang 21 Mô hình hoạt động giao thức UDP (User Datagram Protocol)
- Khi xây dựng một ứng dụng mạng, ta cần thực hiện các bước sau:
o Xác định kiến trúc mạng: Client-Server hay Peer-to-Peer
o Giao thức được sử dụng ở tần Transport: TCP, UDP
o Các port sử dụng ở Client và Server
o Giao thức tần ứng dụng khi trao đổi dữ liệu
o Lập trình
- Các phần dưới đây sẽ trình bày các bước cơ bản để xây dựng một ứng dụng mạng theo kiến trúc Client-Server sử dụng giao thức UDP
- Có hai giao thức chính được dùng để truyền tải dữ liệu trong TCP/IP là TCP và UDP
- Với ứng dụng mạng được thiết kế theo mô hình của giao thức UDP thuần túy, bên
gởi không có cơ chế để đảm bảo tín tin cậy của dữ liệu được truyền tải, nghĩa
là dữ liệu được truyền có thể bị mất, sai nội dung hoặc thứ tự nội dung nhận được
so với nội dung cần gởi sẽ bị đảo lộn
- Tuy nhiên, UDP được dùng trong các ứng dụng yêu cầu thời gian thực như truyền tải Video, Audio,… vì khả năng truyền tải nhanh của nó
- Sơ đồ tương tác giữa Client và Server theo giao thức UDP như mô hình sau:
Trang 3Create Socket
Create Socket
Bind
Close Close
Send to
Receive from Send to
Receive from
Tạo socket lắng nghe Tạo socket để giao tiếp
Kết buộc vào địa chỉ IP
và port
Gởi dữ liệu đến client tham số cần truyền vào
là địa chỉ IP và port mà client đang sử dụng
Gởi dữ liệu đến server
tham số cần truyền vào
là địa chỉ IP và port mà
server đang lắng nghe
Nhận dữ liệu từ Client
Nhận dữ liệu từ Server
Đóng kết nối
2 Lập trình UDP socket trên Java với lớp DatagramSocket:
- DatagramSocket là lớp hỗ trợ lập trình ứng dụng UDP socket trên Java, phần
này sẽ giới thiệu một số phương thức cơ bản để có thể xây dựng được một ứng dụng UDP socket
a Tạo DatagramSocket:
Public DatagramSocket()
Throws SocketException
o Khởi tạo UDP socket và kết buộc nó vào một trong những port còn trống
của hệ thống
Public DatagramSocket( int port)
Throws SocketException
o Khởi tạo UDP socket và kết buộc nó vào một port cụ thể được chỉ ra
Trang 4b Kết buộc địa chỉ cho DatagramSocket
Public void bind ( SocketAddress addr)
Throws SocketException
o Kết buộc DatagramSocket vào một địa chỉ cụ thể (IP và port)
c Gởi và nhận dữ liệu với DatagramSocket
DatagramSocket sử dụng lớp DatagramPacket để gởi và nhận các gói tin
- Nhận dữ liệu:
Public DatagramPacket ( byte []buf, int length)
o Khởi tạo 1 DatagramPacket dùng để nhận 1 packet có độ dài là length,
length phải nhỏ hơn hoặc bằng buf.length
o Buf: vùng nhớ đệm dùng để lưu dữ liệu sắp nhận
o Length: số lượng byte sẽ được đọc
Public void Receive (DatagramPacket p)
Throws IOException
o Thực hiện nhận về packet từ DatagramSocket, khi hàm này được gọi thành công, buffer của DatagramPacket sẽ chứ nội dung dữ liệu nhận được Đồng thời DatagramPacket còn chứa thông tin về địa chỉ IP và port của bên gởi
o Phương thức này khi gọi sẽ bị BLOCK cho đến khi có 1 DatagramPacket
được nhận
- Gởi dữ liệu:
Public DatagramPacket (byte []buf, int length, SocketAddress address)
Throws SocketException
o Khởi tạo 1 DatagramPacket để gởi 1 packet có độ dài là length đến cổng có
số hiệu port trên host cụ thể được chỉ ra trong address
Trang 5Public void send ( DatagramPacket p)
Throws IOException
o Gởi DatagramPacket đến host nhận DatagramPacket chứ dữ liệu cần gởi,
độ dài dữ liệu, địa chỉ IP và số hiệu port của host sẽ nhận
- Một số phương thức hỗ trợ khác của lớp DatagramPacket:
Public InetAddress getAddress()
o Trả về địa chỉ IP của host đã gởi packet hoặc host sẽ nhận packet
Public int getPort()
o Trả về giá trị port của host đã gởi packet hoặc host mà packet sẽ được gởi đến
Public byte[] getData()
o Trả về nội dung dữ liệu trong DatagramPacket
Public int getLength()
o Trả về độ dài của dữ liệu trong DatagramPacket
d Đóng DatagramSocket :
Public void Close()
3 Minh họa ứng dụng mạng đơn giản sử dụng DatagramSocket
a Đề bài:
Viết một ứng dụng mạng trên giao thức UDP hỗ trợ chat tuần tự giữa Client – Server theo thứ tự Client Server Client Server Client Server… bằng Console Quá trình chat sẽ kết thúc khi một trong hai bên gõ Exit
o Xác định kiến trúc mạng: CLIENT – SERVER
o Giao thức sử dụng tần transport: UDP
Trang 6o Port lắng nghe phía server 1234
o Giao thức tầng ứng dụng khi trao đổi dữ liệu giữa client-server
b Chương trình (tham khảo source code kèm theo)
Tài liệu tham khảo:
http://docs.oracle.com/javase/1.4.2/docs/api/java/net/DatagramSocket.html
http://docs.oracle.com/javase/1.4.2/docs/api/java/net/DatagramPacket.html