Chương II - Lập Trình Socket

Màu nền
Font chữ
Font size
Chiều cao dòng

Chú ý: Lập trình Socket truyền dữ liệu sẽ liên quan đến hai giao thức ở tầng Transport (trong mô hình tham chiếu 7 tầng OSI), đó là giao thức truyền tin cậy TCP và truyền không tin cậy UDP.

I, Socket :

- Lớp Socket dùng tạo kết nối từ máy khách đến máy chủ thường được khởi dựng bằng các phương thức sau:

public Socket(String host, int port) throws UnknownHostException, IOException

Hàm này tạo một socket TCP với host và cổng xác định, và thực hiện liên kết với host ở xa.

public Socket(InetAddress host, int port) throws IOException

Tương tự như constructor trước, constructor này tạo một socket TCP với thông tin là địa chỉ của một host được xác định bởi một đối tượng InetAddress và số hiệu cổng port, sau đó nó thực hiện kết nối tới host. Nó đưa ra ngoại lệ IOException nhưng không đưa ra ngoại lệ UnknownHostException. Constructor đưa ra ngoại lệ trong trường hợp không kết nối được tới host.

public Socket (String host, int port, InetAddress interface, int localPort) throws IOException, UnknownHostException

Constructor này tạo ra một socket với thông tin là địa chỉ IP được biểu diễn bởi một đối tượng String và một số hiệu cổng và thực hiện kết nối tới host đó. Socket kết nối tới host ở xa thông qua một giao tiếp mạng và số hiệu cổng cục bộ được xác định bởi hai tham số sau. Nếu localPort bằng 0 thì Java sẽ lựa chọn một cổng ngẫu nhiên có sẵn nằm trong khoảng từ 1024 đến 65535.

public Socket (InetAddress host, int port, InetAddress interface, int localPort) throws IOException, UnknownHostException

Constructor chỉ khác constructor trên ở chỗ địa chỉ của host lúc này được biểu diễn bởi một đối tượng InetAddress.

- Một số phương thức hỗ trợ cho lớp Socket :

InputStream getInputStream() throws IOException : lấy về luồng nhập để máy khách có thể đọc dữ liệu trả về từ máy chủ.

OutputStream getOutputStream() throws IOException: lấy về luồng xuất để máy khách có thể ghi dữ liệu gửi đến máy chủ.

InetAddress getInetAddress(): lấy địa chỉ kết nối socket của máy chủ

int getPort(): lấy về số cổng dùng kết nối của máy chủ.

Hàm public void close() throws IOException: dùng để cắt đứt mọi kết nối.

- Ví Dụ : Máy khách kết nối đến cổng 2812 máy chủ (máy cục bộ)  :

import java.net.*;

class MayKhach

{

          public static void main(String[] args) throws Exception

          {

                   System.out.println("Client khoi dong va ket noi Server");

                    Socket server = new Socket("localhost",2812);

                   System.out.println("Ket noi thanh cong may chu.");             

                   server.close();

          }

}

II, ServerSocket :

- Lớp ServerSocket được tạo trên máy chủ, dùng để tạo kết nối từ phía máy chủ đến các máy khách. Một số hàm của lớp ServerSocket :

Hàm dựng ServerSocket(int port) throws IOException : port là số hiệu cổng mà ServerSocket phải lắng nghe để biết những kết nối từ phía máy khách gởi đến.

Hàm Socket accept() throws IOException : phương thức này thật sự dừng lại chờ đợi cho đến khi nhận được thông tin kết nối và sẽ trả về đối tượng Socket của máy khách nơi có yêu cầu nối vào máy chủ.

Hàm public void close() throws IOException : dùng để máy chủ cắt đứt mọi kết nối đến các client.

- VD : Viết Máy chủ chờ đợi kết nối tại cổng 2812 :

import java.net.*;

class MayChu

{

          public static void main(String[] args) throws Exception

          {

                   System.out.println("Server khoi dong tai cong 2812");

                   ServerSocket server = new ServerSocket(2812);

                   Socket client = server.accept();

                   System.out.println("Ket noi may khach thanh cong.");

                   client.close();

                   server.close();

          }

}

III, Lớp DatagramSocket :

-

Lớp này dùng để chuyển một gói dữ liệu (biểu diễn bằng đối tượng DatagramPackage) theo giao thức UDP. Dữ liệu được gửi đi không bảo đảm được nhận đầy đủ và có thể bị lỗi trên đường truyền. Một số phương thức của DatagramSocket :

public DatagramSocket() throws SocketException: khởi dựng để tạo kết nối UDP

public DatagramSocket(int port) throws SocketException : khởi dựng để tạo kết nối UDP với số hiệu port

public void synchronized receive(DatagramPackage p) throws IOException: nhận gói dữ liệu về 

public void synchronized send(DatagramPackage p) throws IOException: gửi gói dữ liệu đi 

public void synchronized close(): đóng kết nối

IV, Lớp DatagramPackage :

- Lớp này dùng chứa một gói chứa dữ liệu gửi đi trên mạng theo kết nối DatagramSocket. Một gói có thể chứa các thông tin như dữ liệu, chiều dài gói, các địa chỉ IP và số cổng mà từ đó gói dữ liệu được gửi đi. Một số phương thức của lớp này là:

public DatagramPackage(byte data[ ], int len): tạo ra gói dữ liệu chứa trong biến datacó chiều dài là len.

public DatagramPackage(byte data[ ], int len, InetAddress iaddr, int port): tương tự phương thức trên nhưng có thêm địa chỉ máy đích và số hiệu port.

public InetAddress getAddress(): trả về địa chỉ chứa trong gói dữ liệu.

public byte[ ] getData(): trả về dữ liệu thực sự chứa trong gói.

public getLength(): trả về chiều dài gói dữ liệu.

public getPort(): trả về số hiệu port chứa trong gói dữ liệu

Bạn đang đọc truyện trên: Truyen2U.Pro