Tìm hiểu về kỹ thuật lập trình với giao thức UDP Socket Java.
Xem thêm:
lập trình với giao thức TCP Socket Java
ứng dụng chat client server java socket Swing
1. Lớp DatagramPacket
Khái niệm
– Lớp này cho phép truyền thông với giao thức UDP.
– Kế thừa trực tiếp từ lớp Object.
– Gói tin chứa 4 thành phần quan trọng:
- Địa chỉ: getAddress()
- Dữ liệu truyền: getData()
- Kích thước gói tin: getLength()
- Số hiệu cổng chứa gói tin: getPort()
Khởi tạo
– Gói nhận từ mạng
Public DatagramPacket(byte[] inBuffer, int length)
- inBuffer: Bộ đệm nhập, chứa gói tin nhận
- Length: kích cỡ gói tin nhận
Ví dụ:
byte[] buf = new byte[1024]; DatagramPacket datagramPacket = new DatagramPacket(buf,buf.length);
– Gói gửi đi
public DatagramPacket(byte[] outBuffer , int length, InetAddress destination, int port)
- outBuffer: Bộ đệm xuất chứa dữ liệu gói tin gửi đi
- length: kích cỡ gói tin tính theo byte
- destination: Địa chỉ nhận gói tin
- Port số hiệu cổng đích nơi nhận gói tin
Ví dụ:
String str = "Hello"; byte[] data = str.getBytes(); InetAddress ip = InetAddress.getByName("localhost"); DatagramPacket datagramPacket = new DatagramPacket(data,data.length,ip,3000);
2. Lớp DatagramSocket
Khái niệm
– Cho phép tạo ra đối tượng socket truyền thông với giao thức UDP.
– Socket này cho phép gửi/nhận gói tin DatagramSocket.
Khởi tạo
public DatagramSocket(int port, InetAddress ip)
Ví dụ:
InetAddress ip = InetAddress.getByName("localhost"); DatagramSocket socket = new DatagramSocket(3000, ip);
3. Các phương thức
– Gửi gói tin UDP qua mạng: public void send(DatagramPacket dp)
– Nhận gói tin UDP qua mạng: public void receive(DatagramPacket dp)
– Đóng socket: public void close()
4. Kỹ thuật truyền thông với giao thức UDP
5. Quy trình gửi và nhận giữa client và server
– Phía server:
- Tạo đối tượng DatagramSocket với số cổng xác định.
- Khai báo bộ đệm nhập/xuất mảng kiểu byte.
- Khai báo gói tin nhận/gửi là đối tượng DatagramPacket.
- Thực hiện nhận/gửi gói tin với receive()/send();
- Đóng socket kết thúc hoặc quay về chờ gói tin tiếp theo.
– Phía client:
- Tạo đối tượng DatagramSocket với số cổng bất kỳ.
- Khai báo bộ đệm xuất/nhập dạng mảng kiểu byte.
- Khai báo gói tin gửi/nhận là đối tượng DatagramPacket.
- Thực hiện gửi/nhận gói tin qua phương thức send()/receive().
- Đóng socket, kết thúc hoặc quay về chờ gói tin tiếp theo.
Chú ý:
- Chương trình server cần chạy trước, client chạy sau.
- Client gửi gói tin lên cho server trước.
- Server nhận gói tin, bóc tách địa chỉ và cổng sau đó gửi trả cho client thông tin sau xử lý.
6. Chương trình gửi nhận giữa client và server UDP Socket
Code tham khảo:
public class Server { public final static int SERVER_PORT = 9555; public final static byte[] BUFFER = new byte[4069]; public static void main(String[] args) { String s; try { System.out.println("Dang doi ket noi..."); DatagramSocket ds = new DatagramSocket(SERVER_PORT); while (true) { DatagramPacket in = new DatagramPacket(BUFFER, BUFFER.length); ds.receive(in); //Lay du lieu goi tin String inStr = new String(in.getData(), 0, in.getLength()); System.out.println("Client: " + inStr); } } catch (Exception e) { e.printStackTrace(); } } }
public class Client { public static String SERVER_IP = "localhost"; public static int SERVER_PORT = 9555; public final static byte[] BUFFER = new byte[4069]; public static void main(String[] args) { String s; try { DatagramSocket ds = new DatagramSocket(); Scanner sc = new Scanner(System.in); System.out.println("Message: "); s = sc.nextLine(); byte[] sendData = s.getBytes(); InetAddress inetAddress = InetAddress.getByName(SERVER_IP); DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, inetAddress, SERVER_PORT); ds.send(sendPacket); ds.close(); } catch (Exception e) { e.printStackTrace(); } } }
Trên đây là hướng dẫn lập trình với giao thức TCP Socket Java. Cảm ơn bạn đã tham khảo môn lập trình mạng trên ttnguyen.net.
Bài viết liên quan:
Lớp URL trong java