Lớp 1

Lớp 2

Lớp 2 - kết nối tri thức

Lớp 2 - Chân trời sáng sủa tạo

Lớp 2 - Cánh diều

Tài liệu tham khảo

Lớp 3

Sách giáo khoa

Tài liệu tham khảo

Sách VNEN

Lớp 4

Sách giáo khoa

Sách/Vở bài tập

Đề thi

Lớp 5

Sách giáo khoa

Sách/Vở bài bác tập

Đề thi

Lớp 6

Lớp 6 - kết nối tri thức

Lớp 6 - Chân trời sáng sủa tạo

Lớp 6 - Cánh diều

Sách/Vở bài bác tập

Đề thi

Chuyên đề & Trắc nghiệm

Lớp 7

Sách giáo khoa

Sách/Vở bài xích tập

Đề thi

Chuyên đề và Trắc nghiệm

Lớp 8

Sách giáo khoa

Sách/Vở bài bác tập

Đề thi

Chuyên đề và Trắc nghiệm

Lớp 9

Sách giáo khoa

Sách/Vở bài tập

Đề thi

Chuyên đề và Trắc nghiệm

Lớp 10

Sách giáo khoa

Sách/Vở bài xích tập

Đề thi

Chuyên đề & Trắc nghiệm

Lớp 11

Sách giáo khoa

Sách/Vở bài tập

Đề thi

Chuyên đề và Trắc nghiệm

Lớp 12

Sách giáo khoa

Sách/Vở bài bác tập

Đề thi

Chuyên đề & Trắc nghiệm

IT

Ngữ pháp tiếng Anh

Lập trình Java

Phát triển web

Lập trình C, C++, Python

Cơ sở dữ liệu


*

khóa huấn luyện JavaJava cơ bảnKhái niệm hướng đối tượngFile cùng I/O vào JavaString vào JavaXử lý nước ngoài lệ (Exception Handling)Cấu trúc dữ liệu trong JavaCollection vào JavaJava nâng caoTài liệu tìm hiểu thêm Java
Lập trình mạng Socket - lập trình mạng Socket vào Java
Trang trước
Trang sau

Khái niệm thiết kế mạng (network programming) nói tới viết các chương trình nhưng thực thi trải qua nhiều thiết bị (máy tính), trong các số ấy các máy này được liên kết mạng cùng với nhau.

Bạn đang xem: Viết chương trình client server đơn giản với java

Để gọi sâu hơn những khái niệm được trình diễn trong chương này, mời bạn tham khảo loạt bài: Ví dụ về thiết kế mạng Socket - lập trình mạng Socket vào Java.

Gói java.net của J2SE API chứa một tập hợp các class với interface mà cung cấp chi tiết về tiếp xúc tầm thấp, chất nhận được bạn viết những chương trình mà giữa trung tâm vào xử lý vấn đề trong khoảng tay.

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

TCP: TCP là viết tắt của Transmission Control Protocol, chất nhận được sự giao tiếp an toàn giữa nhì ứng dụng. TCP đặc trưng được thực hiện qua mạng internet Protocol, được xem như thể TCP/IP.

UDP: UDP là viết tắt của User Datagram Protocol, một giao thức connection-less, có thể chấp nhận được các gói nhỏ dữ liệu được truyền thiết lập giữa những ứng dụng.

Chương này giúp đỡ bạn hiểu sâu về hai chủ thể trong Java:

Lập trình Socket: Đây là định nghĩa được sử dụng rộng thoải mái nhất trong lập trình mạng cùng nó được lý giải rất đưa ra tiết.

Lập trình Socket trong Java

Các Socket cung ứng kỹ thuật giao tiếp giữa hai máy tính sử dụng TCP. Một công tác Client chế tác một socket trên đầu cuối của tiếp xúc và cố gắng để liên kết socket đó tới một Server.

Khi kết nối được tạo, Server sản xuất một đối tượng Socket bên trên đầu cuối của giao tiếp. Client và Server hiện thời có thể tiếp xúc bằng bài toán đọc cùng ghi từ Socket.

Lớp java.net.Socket màn biểu diễn một Socket, cùng lớp java.net.ServerSocket cung ứng một kỹ thuật đến chương trình Server để nghe thông tin từ những Client và ra đời các kết nối với chúng.

Các cách sau xẩy ra khi ra đời một kết nối TCP thân hai máy vi tính sử dụng Socket:

Server khởi sản xuất một đối tượng người tiêu dùng ServerSocket, bộc lộ số hiệu cổng (port) làm sao để lộ diện giao tiếp.

Server gọi cách thức accept() của lớp ServerSocket. Phương thức này đợi tới lúc một Client kết nối với vps trên cổng đang cho.

Sau lúc Server sẽ đợi, một Client khởi chế tạo một đối tượng người dùng Socket, xác minh tên Server và số hiệu cổng để liên kết tới.

Constructor của lớp Socket cố gắng để kết nối Client tới Server và số hiệu cổng sẽ xác định. Nếu tiếp xúc được thành lập, bây giờ Client tất cả một đối tượng người dùng Socket có chức năng giao tiếp cùng với Server.

Trên Server-side, phương thức accept() trả về một tham chiếu cho tới một socket mới trên Server mà lại được kết nối với socket của Client.


Sau khi các kết nối được thành lập, giao tiếp hoàn toàn có thể xảy ra bởi thực hiện I/O stream. Mỗi Socket tất cả cả một OutputStream cùng InputStream. OutputStream của Client được liên kết với InputStream của Server, cùng InputStream của Client được kết nối với OutputStream của Server.

Xem thêm: Hướng Dẫn Cách Chia Ổ Cứng Bằng Partition Wizard Thành Công 100%

TCP là một trong những giao thức giao tiếp hai chiều, chính vì thế dữ liệu hoàn toàn có thể được gửi vào cả nhị luồng trên cùng 1 thời điểm. Các lớp có ích sau đây cung ứng đầy đủ những phương thức để triển khai các Socket.

Các cách thức lớp ServerSocket vào Java

Lớp java.net.ServerSocket vào Java được áp dụng bởi các ứng dụng Server để thu nhấn một cổng cùng nghe những yêu mong từ Client.

Lớp ServerSocket có 4 constructor sau:

STTPhương thức cùng miêu tả
1public ServerSocket(int port) throws IOException

Cố nỗ lực để tạo một server Socket giới hạn với số hiệu cổng đã xác định. Một exception xuất hiện thêm nếu cổng này trực thuộc phạm vi của ứng dụng khác.

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

Tương tự như constructor trước, tham số backlog xác minh có bao nhiêu Client sẽ vào để giữ gìn trong một hàng đợi (wait queue)

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

Tương tự như constructor trước, tham số InetAddress xác định địa chỉ cửa hàng IP nội cỗ để kết nối tới. InetAddress này được sử dụng cho những Server mà rất có thể có nhiều add IP, chất nhận được Server xác định địa chỉ cửa hàng IP nào của chính nó để đồng ý yêu mong của Client

4public ServerSocket() throws IOException

Tạo một hệ thống Socket không giới hạn. Khi áp dụng constructor này, sử dụng phương thức bind() khi chúng ta đã kết nối với hệ thống Socket

Nếu ServerSocket constructor không ném một exception, nghĩa là ứng dụng của bạn đã thành công kết nối tới cổng đã khẳng định và sẵn sàng cho những yêu mong của Client.

Bảng bên dưới liệt kê các phương thức phổ cập của lớp ServerSocket vào Java:

STTPhương thức với miêu tả
1public int getLocalPort()

Trả về cổng mà Server Socket đang nghe bên trên đó. Cách tiến hành này có lợi nếu các bạn truyền số hiệu cổng là 0 trong một constructor với để server tìm một cổng đến bạn

2public Socket accept() throws IOException

Đợi cho một Client đang đến. Cách tiến hành này block tới khi 1 Client liên kết tới server trên cổng đã khẳng định hoặc Socket là trễ (timeout), giả sử rằng quý giá time-out vẫn được tùy chỉnh thiết lập với cách làm setSoTimeout(). Còn nếu không thì, thủ tục này block vô hạn

3public void setSoTimeout(int timeout)

Thiết lập quý giá timeout mang lại Server Socket đợi một Client vào bao lâu, trong lúc phương thức accept() gọi

4public void bind(SocketAddress host, int backlog)

Nối kết Socket cho tới Server và cổng đã xác định trong đối tượng người tiêu dùng SocketAddress. Sử dụng phương thức này nếu khách hàng đã khởi tạo đối tượng người dùng ServerSocket cùng với constructor không tồn tại tham số

Khi ServerSocket gọi cách làm accept(), phương thức này sẽ không trả về quý giá tới lúc 1 Client kết nối. Sau thời điểm một Client kết nối, ServerSocket tạo nên một Socket new trên một cổng chưa được xác định và trả về một tham chiếu tới Socket new này. Bây giờ, một kết nối TCP tồn tại giữa Client với Server, cùng giao tiếp rất có thể bắt đầu.


Các cách thức lớp Socket vào Java

Lớp java.net.Socket màn trình diễn socket nhưng mà cả Client và Server thực hiện để liên kết với nhau. Client thu nhận một đối tượng người tiêu dùng Socket bằng việc khởi sản xuất nó, trong lúc Server thu dấn một đối tượng Socket từ giá trị trả về của cách làm accept().

Lớp Socket gồm 5 constructor cơ mà một Client áp dụng để liên kết tới một Server:

STTPhương thức với Miêu tả
1public Socket(String host, int port) throws UnknownHostException, IOException.

Phương thức này nỗ lực kết nối tới hệ thống đã xác minh tại cổng sẽ xác định. Nếu như constructor này sẽ không ném một exception, liên kết là thành công xuất sắc và Client được kết nối tới Server

2public Socket(InetAddress host, int port) throws IOException

Phương thức này tựa như constructor trước, quanh đó host được biểu thị bởi một đối tượng người sử dụng InetAddress

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

Kết nối tới host cùng cổng đang xác định, chế tạo một Socket trên host nội cỗ tại địa chỉ và cổng vẫn xác định

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

Phương thức này tương tự constructor trước, quanh đó host được biểu lộ bởi một đối tượng người dùng InetAddress thay vì một String

5public Socket()

Tạo một Socket tránh rạc. áp dụng phương thức connect() để liên kết Socket này tới một Server

Khi Socket constructor trả về giá bán trị, nó không đơn giản dễ dàng chỉ khởi sản xuất một đối tượng người tiêu dùng Socket cơ mà nó còn thực sự cố gắng kết nối tới Server và cổng sẽ xác định.

Một số cách thức của lớp Socket đáng nhiệt tình được liệt kê bên dưới đây. Chú ý rằng, cả Server với Client đều có một đối tượng người sử dụng Socket, chính vì thế những cách làm này có thể được gọi vày cả Client và Server.

STTPhương thức cùng Miêu tả
1public void connect(SocketAddress host, int timeout) throws IOException

Phương thức này kết nối Socket cho tới host vẫn xác định. Thủ tục này chỉ cần thiết khi chúng ta đã khởi tạo nên Socket bởi thực hiện constructor không tồn tại tham số

2public InetAddress getInetAddress()

Phương thức này trả về showroom của máy vi tính khác mà Socket này được liên kết tới

3public int getPort()

Trả về cổng mà Socket được liên kết trên trang bị từ xa

4public int getLocalPort()

Trả về cổng nhưng mà Socket được liên kết trên đồ vật nội bộ

5public SocketAddress getRemoteSocketAddress()

Trả về add của Socket từ xa

6public InputStream getInputStream() throws IOException

Trả về input stream của Socket. Input stream được liên kết tới đầu ra stream của Socket từ xa

7public OutputStream getOutputStream() throws IOException

Trả về đầu ra stream của Socket. Output stream được kết nối tới đầu vào stream của Socket từ xa

8public void close() throws IOException

Đóng Socket, nhưng mà làm đối tượng người tiêu dùng Socket này sẽ không còn tài năng kết nối lại với bất kỳ Server nào

Các thủ tục lớp InetAddress vào Java

Lớp này trình diễn một add Internet Protocol (IP). Dưới đây liệt kê một vài phương thức bổ ích mà bạn sẽ cần trong lúc lập trình Socket.

STTPhương thức và Miêu tả
1static InetAddress getByAddress(byte<> addr)

Trả về một đối tượng người dùng InetAddress sẽ cung cấp showroom IP thô

2static InetAddress getByAddress(String host, byte<> addr)

Tạo một InetAddress dựa trên tên host và địa chỉ IP đã cung cấp

3static InetAddress getByName(String host)

Xác định địa chỉ cửa hàng IP của một host, đã hỗ trợ tên host

4String getHostAddress()

Trả về chuỗi địa chỉ IP dạng trình diễn nguyên văn

5String getHostName()

Nhận thương hiệu host cho add IP này

6static InetAddress InetAddress getLocalHost()

Trả về host nội bộ

7String toString()

Biến đổi showroom IP này thành một String

Ví dụ về Socket Client vào Java

GreetingClient sau là 1 chương trình Client kết nối tới một hệ thống bởi thực hiện một Socket và gửi một lời chào, và sau đó đợi một phản hồi.

// file Name GreetingClient.javaimport java.net.*;import java.io.*;public class GreetingClient public static void main(String <> args) String tenServer = args<0>; int port = Integer.parseInt(args<1>); try System.out.println("Ket noi toi " + tenServer + " on port " + port); Socket client = new Socket(tenServer, port); System.out.println("Just connected lớn " + 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ề Socket vps trong Java

Chương trình GreetingServer sau là lấy một ví dụ về một áp dụng Server sử dụng lớp Socket nhằm lắng nghe các Client trên một vài hiệu cổng đã xác minh bởi một tham số dòng lệnh.

// tệp tin Name GreetingServer.javaimport 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 lớn " + 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 lớn " + server.getLocalSocketAddress() + " Goodbye!"); 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 Client và Server cùng sau đó bắt đầu Server như sau:

$ java GreetingServer 6066Waiting for client on port 6066...Kiểm tra công tác Client như sau:

$ java GreetingClient localhost 6066Connecting to lớn localhost on port 6066Just connected khổng lồ localhost/127.0.0.1:6066Server says Thank you for connecting khổng lồ /127.0.0.1:6066Goodbye!