BÀI TẬP LẬP TRÌNH MẠNG BẰNG JAVA CÓ LỜI GIẢI
Đề thi lớp 1
Lớp 2Lớ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 3Lớp 3 - liên kết tri thức
Lớp 3 - Chân trời sáng sủa tạo
Lớp 3 - Cánh diều
Tài liệu tham khảo
Lớp 4Sách giáo khoa
Sách/Vở bài xích tập
Đề thi
Lớp 5Sách giáo khoa
Sách/Vở bài tập
Đề thi
Lớp 6Lớp 6 - liên kết tri thức
Lớp 6 - Chân trời sáng tạo
Lớp 6 - Cánh diều
Sách/Vở bài xích tập
Đề thi
Chuyên đề và Trắc nghiệm
Lớp 7Lớp 7 - liên kết tri thức
Lớp 7 - Chân trời sáng sủa tạo
Lớp 7 - Cánh diều
Sách/Vở bài xích tập
Đề thi
Chuyên đề và Trắc nghiệm
Lớp 8Sách giáo khoa
Sách/Vở bài tập
Đề thi
Chuyên đề và Trắc nghiệm
Lớp 9Sách giáo khoa
Sách/Vở bài xích tập
Đề thi
Chuyên đề và Trắc nghiệm
Lớp 10Lớp 10 - kết nối tri thức
Lớp 10 - Chân trời sáng tạo
Lớp 10 - Cánh diều
Sách/Vở bài tập
Đề thi
Chuyên đề & Trắc nghiệm
Lớp 11Sách giáo khoa
Sách/Vở bài xích tập
Đề thi
Chuyên đề & Trắc nghiệm
Lớp 12Sách giáo khoa
Sách/Vở bài tập
Đề thi
Chuyên đề và Trắc nghiệm
ITNgữ pháp giờ 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 học JavaJava cơ bảnKhái niệm phía đối tượngFile với I/O vào JavaString trong 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 tham khảo Java
Lập trình mạng Socket - lập trình mạng Socket trong Java
Trang trước
Trang sau
Khái niệm thiết kế mạng (network programming) nói tới viết những chương trình cơ mà thực thi trải qua không ít thiết bị (máy tính), trong số đó các sản phẩm công nghệ này được kết nối mạng cùng với nhau.
Bạn đang xem: Bài tập lập trình mạng bằng java có lời giải
Để đọc sâu hơn những khái niệm được trình diễn trong chương này, mời bạn xem thêm loạt bài: Ví dụ về xây dựng mạng Socket - xây dựng mạng Socket trong Java.
Gói java.net của J2SE API đựng một tập hợp những class và interface nhưng 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 giải quyết vấn đề trong khoảng tay.
Gói java.net hỗ trợ sự hỗ trợ cho nhị giao thức mạng phổ biến:
TCP: TCP là viết tắt của Transmission Control Protocol, có thể chấp nhận được sự giao tiếp an toàn và tin cậy giữa nhì ứng dụng. TCP đặc trưng được áp dụng qua internet Protocol, được xem như là TCP/IP.
UDP: UDP là viết tắt của User Datagram Protocol, một giao thức connection-less, cho phép các gói bé dại dữ liệu được truyền tải giữa các ứng dụng.
Chương này giúp bạn hiểu sâu về hai chủ đề trong Java:
Lập trình Socket: Đây là có mang được sử dụng rộng rãi nhất trong xây dựng mạng với nó được lý giải rất chi tiết.
Lập trình Socket vào Java
Các Socket hỗ trợ kỹ thuật tiếp xúc giữa hai máy tính xách tay sử dụng TCP. Một công tác Client tạo ra một socket trên đầu cuối của tiếp xúc và cố gắng để kết nối socket kia tới một Server.
Khi liên kết được tạo, Server sản xuất một đối tượng người sử dụng Socket bên trên đầu cuối của giao tiếp. Client và Server hiện giờ có thể giao tiếp bằng việc đọc cùng ghi trường đoản cú Socket.
Lớp java.net.Socket màn trình diễn một Socket, cùng lớp java.net.ServerSocket cung cấp một kỹ thuật mang lại chương trình Server nhằm nghe thông tin từ các 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 liên kết TCP thân hai máy vi tính sử dụng Socket:
Server khởi tạo ra một đối tượng người tiêu dùng ServerSocket, bộc lộ số hiệu cổng (port) làm sao để mở ra giao tiếp.
Server gọi cách làm accept() của lớp ServerSocket. Cách thức này ngóng tới khi một Client kết nối với hệ thống trên cổng đang cho.
Sau khi Server vẫn đợi, một Client khởi tạo nên một đối tượng người dùng Socket, khẳng định tên Server và số hiệu cổng để kết nối tới.
Constructor của lớp Socket cố gắng để liên kết Client cho tới Server và số hiệu cổng đang xác định. Nếu giao tiếp được thành lập, bây chừ Client bao gồm một đối tượng Socket có tác dụng giao tiếp cùng với Server.
Trên Server-side, thủ tục accept() trả về một tham chiếu cho tới một socket new trên Server nhưng mà được liên kết với socket của Client.
Sau khi những kết nối được thành lập, giao tiếp có thể xảy ra bởi áp dụng I/O stream. Từng Socket có cả một OutputStream cùng InputStream. OutputStream của Client được liên kết với InputStream của Server, và InputStream của Client được kết nối với OutputStream của Server.
Xem thêm: Listening Unit 7 Lớp 10 Listening, Unit 7: Listening (Trang 21 Sgk Tiếng Anh 10 Mới)
TCP là 1 trong giao thức giao tiếp hai chiều, vì thế dữ liệu có thể được gửi vào cả hai luồng tại cùng một thời điểm. Những lớp bổ ích sau đây cung ứng đầy đủ những phương thức nhằm triển khai những Socket.
Các phương 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 dấn một cổng cùng nghe các yêu mong từ Client.
Lớp ServerSocket tất cả 4 constructor sau:
1 | public ServerSocket(int port) throws IOException Cố thay để sinh sản một server Socket giới hạn với số hiệu cổng đang xác định. Một exception lộ diện nếu cổng này trực thuộc phạm vi của vận dụng khác. |
2 | public ServerSocket(int port, int backlog) throws IOException Tương tự như constructor trước, thông số backlog xác minh có từng nào Client vẫn vào để cất giữ trong một hàng đợi (wait queue) |
3 | public ServerSocket(int port, int backlog, InetAddress address) throws IOException Tương trường đoản cú như constructor trước, tham số InetAddress xác định showroom IP nội bộ để kết nối tới. InetAddress này được sử dụng cho những Server mà hoàn toàn có thể có nhiều add IP, được cho phép Server xác định showroom IP nào của nó để đồng ý yêu ước của Client |
4 | public ServerSocket() throws IOException Tạo một hệ thống Socket ko giới hạn. Khi thực hiện constructor này, sử dụng phương thức bind() khi chúng ta đã liên kết với vps Socket |
Nếu ServerSocket constructor không ném một exception, tức là ứng dụng của chúng ta đã thành công kết nối tới cổng đã xác định và sẵn sàng cho các yêu cầu của Client.
Bảng bên dưới liệt kê những phương thức thông dụng của lớp ServerSocket vào Java:
1 | public int getLocalPort() Trả về cổng cơ mà Server Socket vẫn nghe bên trên đó. Phương thức này có ích nếu chúng ta truyền số hiệu cổng là 0 vào một constructor với để vps tìm một cổng đến bạn |
2 | public Socket accept() throws IOException Đợi cho một Client vẫn đến. Cách tiến hành này block tới lúc 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 giá trị time-out đã được tùy chỉnh cấu hình với cách tiến hành setSoTimeout(). Còn nếu như không thì, cách tiến hành này block vô hạn |
3 | public void setSoTimeout(int timeout) Thiết lập cực hiếm timeout mang đến Server Socket ngóng một Client trong bao lâu, trong những lúc phương thức accept() gọi |
4 | public void bind(SocketAddress host, int backlog) Nối kết Socket cho tới Server và cổng đã khẳng định trong đối tượng SocketAddress. Sử dụng phương thức này nếu như bạn đã khởi tạo đối tượng người tiêu dùng ServerSocket cùng với constructor không có tham số |
Khi ServerSocket gọi cách làm accept(), phương thức này sẽ không trả về quý hiếm tới khi một Client kết nối. Sau khoản thời gian một Client kết nối, ServerSocket tạo một Socket bắt đầu trên một cổng chưa được xác minh và trả về một tham chiếu tới Socket mới này. Bây giờ, một liên kết TCP tồn tại thân Client cùng Server, và giao tiếp hoàn toàn có thể bắt đầu.
Các phương thức lớp Socket trong Java
Lớp java.net.Socket màn biểu diễn socket mà lại cả Client cùng Server sử dụng để liên kết với nhau. Client thu dấn một đối tượng người sử dụng Socket bằng bài toán khởi tạo nó, trong khi Server thu dấn một đối tượng người dùng Socket từ quý hiếm trả về của cách làm accept().
Lớp Socket có 5 constructor nhưng mà một Client sử dụng để kết nối tới một Server:
1 | public Socket(String host, int port) throws UnknownHostException, IOException. Phương thức này nỗ lực kết nối tới server đã khẳng định tại cổng đã xác định. Nếu 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 liên kết tới Server |
2 | public Socket(InetAddress host, int port) throws IOException Phương thức này giống như constructor trước, không tính host được bộc lộ bởi một đối tượng InetAddress |
3 | public Socket(String host, int port, InetAddress localAddress, int localPort) throws IOException. Kết nối tới host cùng cổng đã xác định, chế tạo ra một Socket bên trên host nội bộ tại địa chỉ cửa hàng và cổng đã xác định |
4 | public Socket(InetAddress host, int port, InetAddress localAddress, int localPort) throws IOException. Phương thức này tương tự như constructor trước, kế bên host được thể hiện bởi một đối tượng người sử dụng InetAddress thay vị một String |
5 | public Socket() Tạo một Socket tách rạc. áp dụng phương thức connect() để kết nối Socket này cho tới một Server |
Khi Socket constructor trả về giá trị, nó không dễ dàng chỉ khởi tạo một đối tượng người tiêu dùng Socket cơ mà nó còn thực sự nỗ lực kết nối cho tới Server cùng cổng vẫn xác định.
Một số phương thức của lớp Socket đáng quan tâm được liệt kê bên dưới đây. Chăm chú rằng, cả Server cùng Client đều có một đối tượng Socket, chính vì vậy những cách tiến hành này hoàn toàn có thể được gọi do cả Client và Server.
1 | public void connect(SocketAddress host, int timeout) throws IOException Phương thức này kết nối Socket tới host sẽ xác định. Cách thức này chỉ quan trọng khi chúng ta đã khởi chế tác Socket bởi thực hiện constructor không có tham số |
2 | public InetAddress getInetAddress() Phương thức này trả về add của laptop khác cơ mà Socket này được liên kết tới |
3 | public int getPort() Trả về cổng mà lại Socket được kết nối trên sản phẩm công nghệ từ xa |
4 | public int getLocalPort() Trả về cổng mà lại Socket được kết nối trên vật dụng nội bộ |
5 | public SocketAddress getRemoteSocketAddress() Trả về địa chỉ cửa hàng của Socket từ bỏ xa |
6 | public InputStream getInputStream() throws IOException Trả về input stream của Socket. Input đầu vào stream được kết nối tới đầu ra stream của Socket từ bỏ xa |
7 | public OutputStream getOutputStream() throws IOException Trả về output đầu ra stream của Socket. đầu ra stream được liên kết tới đầu vào stream của Socket trường đoản cú xa |
8 | public void close() throws IOException Đóng Socket, cơ mà làm đối tượng Socket này sẽ không còn kỹ năng kết nối lại với ngẫu nhiên Server nào |
Các phương thức lớp InetAddress vào Java
Lớp này màn trình diễn một showroom Internet Protocol (IP). Tiếp sau đây liệt kê một số trong những phương thức hữu ích mà bạn sẽ cần trong những lúc lập trình Socket.
1 | static InetAddress getByAddress(byte<> addr) Trả về một đối tượng người dùng InetAddress đã cung cấp địa chỉ IP thô |
2 | static InetAddress getByAddress(String host, byte<> addr) Tạo một InetAddress dựa trên tên host và add IP đã cung cấp |
3 | static InetAddress getByName(String host) Xác định địa chỉ cửa hàng IP của một host, đã cung ứng tên host |
4 | String getHostAddress() Trả về chuỗi địa chỉ IP dạng biểu diễn nguyên văn |
5 | String getHostName() Nhận tên host cho địa chỉ IP này |
6 | static InetAddress InetAddress getLocalHost() Trả về host nội bộ |
7 | String toString() Biến đổi add IP này thành một String |
Ví dụ về Socket Client trong Java
GreetingClient sau là một chương trình Client liên kết tới một server bởi áp dụng một Socket và gửi một lời chào, và tiếp đến đợi một phản nghịch hồi.
Xem thêm: What Subjects Do You Have Today? ? Lesson 1 P1 Unit 8: What Subjects Do You Have Today
// tệp tin 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 to 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 hệ thống trong Java
Chương trình GreetingServer sau là ví dụ về một áp dụng Server áp dụng lớp Socket nhằm lắng nghe các Client trên một số trong những hiệu cổng đã khẳng định bởi một tham số chiếc lệnh.// file 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 vps = serverSocket.accept(); System.out.println("Just connected khổng lồ " + 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 khổng lồ " + 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 với sau đó bước đầu Server như sau:
$ java GreetingServer 6066Waiting for client on port 6066...Kiểm tra chương trình Client như sau:
$ java GreetingClient localhost 6066Connecting lớn localhost on port 6066Just connected to localhost/127.0.0.1:6066Server says Thank you for connecting khổng lồ /127.0.0.1:6066Goodbye!