Thứ Hai, 25 tháng 2, 2019

Đào tạo Java - Java - Mạng

Thuật ngữ lập trình mạng dùng để chỉ các chương trình bằng văn bản thực thi trên nhiều thiết bị (máy tính), trong đó các thiết bị được kết nối với nhau bằng mạng.

Gói Học lập trình java của API J2SE chứa một tập hợp các lớp và giao diện cung cấp các chi tiết giao tiếp cấp thấp, cho phép bạn viết các chương trình tập trung vào giải quyết vấn đề trong tay.

Gói java.net cung cấp hỗ trợ cho hai giao thức mạng phổ biến

TCP - TCP là viết tắt của Giao thức điều khiển truyền dẫn, cho phép giao tiếp đáng tin cậy giữa hai ứng dụng. TCP thường được sử dụng qua Giao thức Internet, được gọi là TCP / IP

UDP - UDP là viết tắt của Giao thức gói dữ liệu người dùng, giao thức không có kết nối cho phép các gói dữ liệu được truyền giữa các ứng dụng.

Học lập trình Java chuyên nghiệp
Học lập trình Java chuyên nghiệp

Chương này cung cấp một sự hiểu biết tốt về hai chủ đề sau

Lập trình socket - Đây là khái niệm được sử dụng rộng rãi nhất trong Mạng và nó đã được giải thích rất chi tiết.

Xử lý URL - Điều này sẽ được đề cập riêng. Nhấn vào đây để tìm hiểu về Xử lý URL bằng ngôn ngữ Java.

Lập trình socket


Các socket cung cấp cơ chế giao tiếp giữa hai máy tính sử dụng TCP. Một chương trình máy khách tạo ra một ổ cắm ở cuối giao tiếp và cố gắng kết nối ổ cắm đó với máy chủ.

Khi kết nối được thực hiện, máy chủ sẽ tạo một đối tượng socket ở cuối giao tiếp. Máy khách và máy chủ giờ đây có thể giao tiếp bằng cách ghi và đọc từ ổ cắm.

Lớp Đào tạo lập trình Java  đại diện cho một ổ cắm và lớp java.net.ServerSocket cung cấp một cơ chế cho chương trình máy chủ lắng nghe khách hàng và thiết lập kết nối với họ.

Các bước sau đây xảy ra khi thiết lập kết nối TCP giữa hai máy tính bằng cách sử dụng ổ cắm -

Máy chủ khởi tạo một đối tượng ServerSocket, biểu thị giao tiếp số cổng nào sẽ xảy ra.

Máy chủ gọi phương thức accept () của lớp ServerSocket. Phương pháp này đợi cho đến khi máy khách kết nối với máy chủ trên cổng đã cho.

Sau khi máy chủ đang chờ, một máy khách sẽ khởi tạo một đối tượng Socket, chỉ định tên máy chủ và số cổng để kết nối.

Hàm tạo của lớp Socket cố gắng kết nối máy khách với máy chủ được chỉ định và số cổng. Nếu giao tiếp được thiết lập, máy khách hiện có một đối tượng Socket có khả năng giao tiếp với máy chủ.

Về 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 client.

Sau khi kết nối được thiết lập, giao tiếp có thể xảy ra bằng cách sử dụng luồng I / O. Mỗi ổ cắm có cả OutputStream và InputStream. OutputStream của máy khách được kết nối với InputStream của máy chủ và InputStream của máy khách được kết nối với OutputStream của máy chủ.

TCP là giao thức giao tiếp hai chiều, do đó dữ liệu có thể được gửi qua cả hai luồng cùng một lúc. Sau đây là các lớp hữu ích cung cấp tập hợp đầy đủ các phương thức để thực hiện các socket.

Phương thức lớp ServerSocket


Lớp Học lập trình java được các ứng dụng máy chủ sử dụng để lấy cổng và lắng nghe yêu cầu của máy khách.

Lớp ServerSocket có bốn hàm tạo

Sr.Không.Phương pháp & Mô tả
1Máy chủ công cộng (cổng int) ném IOException

Nỗ lực tạo ra một ổ cắm máy chủ bị ràng buộc với cổng được chỉ định. Một ngoại lệ xảy ra nếu cổng đã bị ràng buộc bởi một ứng dụng khác.
2công khai ServerSocket (int port, int backlog) ném IOException

Tương tự như hàm tạo trước đó, tham số tồn đọng chỉ định số lượng máy khách đến sẽ lưu trữ trong hàng đợi.
3công khai ServerSocket (int port, int backlog, InetAddress address) ném IOException
Tương tự như hàm tạo trước đó, tham số InetAddress chỉ định địa chỉ IP cục bộ để liên kết. InetAddress được sử dụng cho các máy chủ có thể có nhiều địa chỉ IP, cho phép máy chủ chỉ định địa chỉ IP nào để chấp nhận yêu cầu của máy khách.
4công khai ServerSocket () ném IOException
Tạo một ổ cắm máy chủ không liên kết. Khi sử dụng hàm tạo này, hãy sử dụng phương thức bind () khi bạn sẵn sàng liên kết ổ cắm máy chủ.
Nếu hàm tạo ServerSocket không ném ngoại lệ, điều đó có nghĩa là ứng dụng của bạn đã liên kết thành công với cổng được chỉ định và sẵn sàng cho các yêu cầu của máy khách.
Sau đây là một số phương thức phổ biến của lớp ServerSocket

Sr.Không.Phương pháp & Mô tả
1công khai int getLocalPort ()
Trả về cổng mà ổ cắm máy chủ đang nghe. Phương pháp này hữu ích nếu bạn chuyển vào 0 dưới dạng số cổng trong hàm tạo và để máy chủ tìm cổng cho bạn.
2công khai socket chấp nhận () ném IOException
Chờ đợi một khách hàng đến. Phương thức này chặn cho đến khi máy khách kết nối với máy chủ trên cổng được chỉ định hoặc hết thời gian ổ cắm, giả sử rằng giá trị hết thời gian đã được đặt bằng phương thức setSoTimeout (). Nếu không, phương thức này chặn vô thời hạn.
3void void setSoTimeout (int timeout)

Đặt giá trị hết thời gian cho thời gian ổ cắm máy chủ chờ máy khách trong thời gian chấp nhận ().
4liên kết void void (máy chủ SocketAddress, int backlog)

Liên kết ổ cắm với máy chủ và cổng được chỉ định trong đối tượng SocketAddress. Sử dụng phương pháp này nếu bạn đã khởi tạo ServerSocket bằng cách sử dụng hàm tạo không có đối số.
Khi ServerSocket gọi accept (), phương thức sẽ không trả về cho đến khi máy khách kết nối. Sau khi máy khách kết nối, ServerSocket sẽ tạo một Ổ cắm mới trên một cổng không xác định và trả về một tham chiếu đến Ổ cắm mới này. Kết nối TCP hiện tồn tại giữa máy khách và máy chủ và giao tiếp có thể bắt đầu.

Phương thức lớp socket


Lớp Học lập trình java đại diện cho ổ cắm mà cả máy khách và máy chủ sử dụng để liên lạc với nhau. Máy khách có được một đối tượng Socket bằng cách khởi tạo một đối tượng, trong khi đó máy chủ có được một đối tượng Socket từ giá trị trả về của phương thức accept ().

Lớp Socket có năm hàm tạo mà máy khách sử dụng để kết nối với máy chủ

Sr.Không.Phương pháp & Mô tả
1Ổ cắm công cộng (Máy chủ chuỗi, cổng int) ném UnknownhostException, IOException.

Phương pháp này cố gắng kết nối với máy chủ được chỉ định tại cổng được chỉ định. Nếu hàm tạo này không đưa ra một ngoại lệ, kết nối thành công và máy khách được kết nối với máy chủ.
2Ổ cắm công cộng (Máy chủ InetAddress, cổng int) ném IOException

Phương thức này giống hệt với hàm tạo trước đó, ngoại trừ máy chủ được biểu thị bằng một đối tượng InetAddress.
3Ổ cắm công cộng (Máy chủ chuỗi, cổng int, InetAddress localAddress, int localPort) ném IOException.
Kết nối với máy chủ và cổng được chỉ định, tạo một ổ cắm trên máy chủ cục bộ tại địa chỉ và cổng được chỉ định.
4Ổ cắm công cộng (Máy chủ InetAddress, cổng int, InetAddress localAddress, int localPort) ném IOException.
Phương thức này giống hệt với hàm tạo trước đó, ngoại trừ máy chủ được biểu thị bằng một đối tượng InetAddress thay vì String.
5ổ cắm công cộng ()

Tạo ra một ổ cắm không kết nối. Sử dụng phương thức connect () để kết nối ổ cắm này với máy chủ.
Khi hàm tạo của socket trả về, nó không chỉ đơn giản khởi tạo một đối tượng Socket mà nó thực sự cố gắng kết nối với máy chủ và cổng được chỉ định.

Một số phương thức quan tâm trong lớp Socket được liệt kê ở đây. Lưu ý rằng cả máy khách và máy chủ đều có đối tượng Socket, vì vậy các phương thức này có thể được gọi bởi cả máy khách và máy chủ.

Sr.Không.Phương pháp & Mô tả
1kết nối void void (máy chủ SocketAddress, hết thời gian chờ) ném IOException
Phương pháp này kết nối ổ cắm với máy chủ được chỉ định. Phương pháp này chỉ cần thiết khi bạn khởi tạo Ổ cắm bằng cách sử dụng hàm tạo không có đối số.
2công khai InetAddress getInetAddress ()

Phương thức này trả về địa chỉ của máy tính khác mà ổ cắm này được kết nối.
3công khai int getPort ()

Trả về cổng mà ổ cắm được liên kết trên máy từ xa.
4công khai int getLocalPort ()
Trả về cổng mà ổ cắm được liên kết trên máy cục bộ.
5Ổ cắm công cộng Địa chỉ getRemoteSocketAddress ()
Trả về địa chỉ của ổ cắm từ xa.
6công khai InputStream getInputStream () ném IOException

Trả về luồng đầu vào của ổ cắm. Luồng đầu vào được kết nối với luồng đầu ra của ổ cắm từ xa.
7công khai OutputStream getOutputStream () ném IOException

Trả về luồng đầu ra của ổ cắm. Luồng đầu ra được kết nối với luồng đầu vào của ổ cắm từ xa.
số 8công khai void close () ném IOException
Đóng ổ cắm, điều này làm cho đối tượng Ổ cắm này không còn khả năng kết nối lại với bất kỳ máy chủ nào.

Phương thức lớp InetAddress

Lớp này đại diện cho một địa chỉ Giao thức Internet (IP). Dưới đây là các phương pháp hữu ích mà bạn sẽ cần trong khi thực hiện lập trình socket

Sr.Không.Phương pháp & Mô tả
1InetAddress getByAddress (byte [] addr)

Trả về một đối tượng InetAddress được cung cấp địa chỉ IP thô.
2InetAddress getByAddress (Máy chủ chuỗi, byte [] addr)
Tạo một InetAddress dựa trên tên máy chủ và địa chỉ IP được cung cấp.
3InetAddress getByName (Máy chủ chuỗi)
Xác định địa chỉ IP của máy chủ lưu trữ, được đặt tên của máy chủ lưu trữ.
4Chuỗi gethostAddress ()
Trả về chuỗi địa chỉ IP trong bản trình bày văn bản.
5Chuỗi gethostName ()

Lấy tên máy chủ cho địa chỉ IP này.
6InetAddress tĩnh InetAddress getLocalhost ()
Trả về máy chủ lưu trữ cục bộ.
7Chuỗi toString ()
Chuyển đổi địa chỉ IP này thành Chuỗi.

Ví dụ về socket Client

Lời chào sau đây là một chương trình máy khách kết nối với máy chủ bằng cách sử dụng ổ cắm và gửi lời chào, Học lập trình java sau đó chờ phản hồi.
// File Name GreetingClient.java
import java.net.*;
import java.io.*;

public class GreetingClient {

   public static void main(String [] args) {
      String serverName = args[0];
      int port = Integer.parseInt(args[1]);
      try {
         System.out.println("Connecting to " + serverName + " on port " + port);
         Socket client = new Socket(serverName, port);
         
         System.out.println("Just connected to " + client.getRemoteSocketAddress());
         OutputStream outToServer = client.getOutputStream();
         DataOutputStream out = new DataOutputStream(outToServer);
         
         out.writeUTF("Hello from " + client.getLocalSocketAddress());
         InputStream inFromServer = client.getInputStream();
         DataInputStream in = new DataInputStream(inFromServer);
         
         System.out.println("Server says " + in.readUTF());
         client.close();
      } catch (IOException e) {
         e.printStackTrace();
      }
   }
}

Ví dụ về máy chủ socket

Chương trình máy chủ chào mừng sau đây là một ví dụ về ứng dụng máy chủ sử dụng lớp Socket để lắng nghe khách hàng về số cổng được chỉ định bởi đối số dòng lệnh
// File Name GreetingServer.java
import java.net.*;
import java.io.*;

public class GreetingServer extends Thread {
   private ServerSocket serverSocket;
   
   public GreetingServer(int port) throws IOException {
      serverSocket = new ServerSocket(port);
      serverSocket.setSoTimeout(10000);
   }

   public void run() {
      while(true) {
         try {
            System.out.println("Waiting for client on port " + 
               serverSocket.getLocalPort() + "...");
            Socket server = serverSocket.accept();
            
            System.out.println("Just connected to " + server.getRemoteSocketAddress());
            DataInputStream in = new DataInputStream(server.getInputStream());
            
            System.out.println(in.readUTF());
            DataOutputStream out = new DataOutputStream(server.getOutputStream());
            out.writeUTF("Thank you for connecting to " + server.getLocalSocketAddress()
               + "\nGoodbye!");
            server.close();
            
         } catch (SocketTimeoutException s) {
            System.out.println("Socket timed out!");
            break;
         } catch (IOException e) {
            e.printStackTrace();
            break;
         }
      }
   }
   
   public static void main(String [] args) {
      int port = Integer.parseInt(args[0]);
      try {
         Thread t = new GreetingServer(port);
         t.start();
      } catch (IOException e) {
         e.printStackTrace();
      }
   }
}
Biên dịch máy khách và máy chủ, sau đó khởi động máy chủ như sau

$ java GreetingServer 6066
Waiting for client on port 6066...

Kiểm tra chương trình máy khách như sau

$ java GreetingClient localhost 6066
Connecting to localhost on port 6066
Just connected to localhost/127.0.0.1:6066
Server says Thank you for connecting to /127.0.0.1:6066
Goodbye!

Không có nhận xét nào:

Đăng nhận xét

Lập trình Java - Ngoại lệ

Một ngoại lệ (hoặc sự kiện đặc biệt) là một vấn đề phát sinh trong quá trình thực hiện chương trình. Khi xảy ra Ngoại lệ , luồng bình thường...