Cơ chế Socket

Một phần của tài liệu Tính toán song song và ứng dụng vào bài toán tổ hợp (Trang 48 - 51)

5. Ý nghĩa khoa học và thực tiễn của đề tài

4.2. Cơ chế Socket

Thông thường các hệ thống máy tính kết nối với nhau theo kiểu server-client và một trong những giải pháp để thực hiện mô hình kết nối đó là Socket. Socket là công cụ giúp ta có thể truyền nhận thông điệp giữa các bộ xử lý cũng như các máy tính sử dụng TCP qua một port chung.

Trong Java, người ta đã xây dựng lớp java.net.Socket cung cấp đầy đủ các phương thức để chúng ta có thể khởi tạo hệ thống máy chủ, máy trạm và thiết lập các kết nối cũng như việc truyền nhận thông tin giữa các thành phần máy tính.

Để thực hiện thiết lập kết nối giữa hai máy tính sử dụng Socket, cần các bước sau:

Bước 1: Máy chủ khởi tạo đối tượng server socket với các thông số địa chỉ máy chủ và cổng(port) kết nối.

Bước 2: Máy chủ mở các đường kết nối và chờ đợi cho đến máy trạm kết nối đến máy chủ trên cổng đã xác định.

Bước 3: Trong khi máy chủ đang chờ đợi, máy trạm khởi tạo đối tượng socket, xác định địa chỉ máy chủ (thông thường là dùng IP) và cổng để kết nối. Máy trạm tìm cách kết nối theo địa chỉ đã có. Nếu thiết lập thông số sai hoặc phát sinh ngoại lệ thì máy trạm không thể kết nối được đến máy chủ. Nếu kết nối được thiết lập, máy trạm bây giờ có một đối tượng socket có khả năng giao tiếp với máy chủ.

Bước 4: Ở phía máy chủ, phương thức accept() trả về một tham chiếu đến một socket mới trên máy chủ được kết nối với socket của máy trạm.

Sau khi kết nối hoàn thành, máy chủ và máy trạm có thể trao đổi thông tin qua các dòng dữ liệu InputStream và OutputStream.

Dưới đây trình bày danh sách các hàm khởi tạo để có thể sử dụng được Socket trong Java:

Các hàm khởi tạo đối với máy chủ ServerSocket

1. public ServerSocket (int port) throws IOException

2. public ServerSocket(int port, int backlog) throws IOException

3. public ServerSocket(int port, int backlog, InetAddress address) throws IOException

4. public ServerSocket() throws IOException

Tùy vào từng giá trị khai báo ban đầu về địa chỉ (address), cổng kết nối (port), số máy trạm có thể kết nối (backlog) chúng ta có thể khởi tạo ServerSocket với các thông số ban đầu theo ý muốn. Nếu như việc khởi tạo gặp sự cố không thể tạo mới được thì Java sẽ đưa ra các ngoại lệ.

Các hàm khởi tạo đối với máy trạm Socket

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

2. public Socket(String host, int port, InetAddress localAddress, int localPort) throws IOException.

3. public Socket(InetAddress host, int port, InetAddress localAddress, int localPort) throws IOException.

4. public Socket()

Tương tự như các hàm khởi tạo trên, ứng với mỗi hàm khởi tạo có các tham số địa chỉ kết nối đến ServerSocket (host), cổng kết nối (localPort), địa chỉ cục bộ (localAddress). Nếu như việc khởi tạo gặp sự cố không thể tạo mới được thì Java sẽ đưa ra các ngoại lệ còn không nó sẽ khởi tạo một máy trạm Socket để có thể sử dụng.

Java có hỗ trợ các phương thức để có thể sử dụng socket. Dưới đây trình bày danh sách một số các phương thức chính thường hay sử dụng:

Phương thức trên máy chủ ServerSocket

1. public int getLocalPort(): Trả về cổng mà socket của máy chủ đang sử dụng.

2. public Socket accept() throws IOException: Chờ cho một máy khách kết nối đến. Phương thức này không bị chặn cho đến khi một máy trạm kết nối đến máy chủ trên cổng được chỉ định hoặc quá giờ kết nối, ta có thể thay đổi giá trị thời gian chờ theo phương thức bên dưới.

3. public void setSoTimeout(int timeout): Thiết lập giá trị thời gian chờ máy khách kết nối của máy chủ.

4. public void bind(SocketAddress host, int backlog): Liên kết socket tới máy chủ và cổng được chỉ định trong đối tượng SocketAddress. Sử dụng phương thức này nếu bạn đã tạo ra các ServerSocket bằng cách sử dụng nhà xây dựng không có đối số.

Phương thức trên máy trạm Socket

1. public void connect(SocketAddress host, int timeout) throws IOException: Phương thức này kết nối socket với máy chủ được chỉ định. Phương thức này là cần thiết chỉ khi khởi tạo Socket bằng cách sử dụng hàm khởi tạo không có các giá trị đi kèm.

2. public InetAddress getInetAddress(): Phương thức này trả về địa chỉ của máy tính khách mà socket này được kết nối.

3. public int getPort(): Trả về cổng của máy remote mà socket đang kết nối đến.

4. public int getLocalPort(): Trả về cổng mà socket bị ràng buộc trên máy nội bộ.

5. public SocketAddress getRemoteSocketAddress(): Trả về địa chỉ của ServerSocket.

6. public InputStream getInputStream() throws IOException: Trả về giá trị đầu vào input stream của socket trên máy trạm từ dữ liệu đầu ra output stream của ServerSocket.

7. public OutputStream getOutputStream() throws IOException: Trả về dữ liệu đầu ra ouput stream của socket và chuyển ServerSocket đã kết nối để tạo thành dữ liệu đầu vào input stream cho ServerSocket. 8. public void close() throws IOException: Đóng socket, làm cho đối

tượng Socket này không còn có khả năng kết nối về với bất kỳ máy chủ nào.

Ngoài ra tại các máy trạm còn có những phương thức cần chú ý của giá trị địa chỉ InetAdress:

1. static InetAddress getByAddress(byte[] addr): Trả về đối tượng InetAddress với địa chỉ IP.

2. static InetAddress getByAddress(String host, byte[] addr): Tạo một InetAddress dựa trên tên máy chủ lưu trữ và địa chỉ IP.

3. static InetAddress getByName(String host): Xác định địa chỉ IP của máy chủ, với tên của máy chủ lưu trữ.

4. String getHostAddress(): Trả về chuỗi địa chỉ IP theo dạng chuỗi ký tự.

5. String getHostName(): Lấy tên máy chủ từ địa chỉ IP này.

6. static InetAddress InetAddress getLocalHost(): Trả về máy chủ local.

7. String toString(): Chuyển địa chỉ IP này sang một chuỗi.

Một phần của tài liệu Tính toán song song và ứng dụng vào bài toán tổ hợp (Trang 48 - 51)

Tải bản đầy đủ (PDF)

(71 trang)