1. Trang chủ
  2. » Công Nghệ Thông Tin

Giáo trình Lập trình mạng: Phần 2 - Trường ĐH Tây Bắc

38 41 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 38
Dung lượng 1,18 MB

Nội dung

Tiếp nội dung phần 1, Giáo trình Lập trình mạng: Phần 2 cung cấp cho người học những kiến thức như: Lập trình với giao thức TCP; Lập trình với giao thức UDP; Kỹ thuật lập trình phân tán RMI. Mời các bạn cùng tham khảo!

CHƯƠNG LẬP TRÌNH VỚI GIAO THỨC TCP 5.1 Khái niệm chung Thuật ngữ lập trình mạng với Java đề cập đến việc viết chương trình thực nhiều thiết bị máy tính, thiết bị kết nối với Gói java.net Java chứa tập hợp lớp giao tiếp cung cấp giao thức truyền thơng mức độ thấp Gói java.net cung cấp hỗ trợ cho hai giao thức mạng phổ biến sau: • TCP - Transmission Control Protocol: TCP thường sử dụng qua giao thức Internet (Internet Protocol), gọi TCP/IP Giao thức cho phép giao tiếp tin cậy hai ứng dụng • UDP - User Datagram Protocol: giao thức khác cho phép truyền liệu ứng dụng Giao thức không kiểm tra đến việc gói tin gửi hay chưa nên giao tiếp không tin cậy hai nhiều ứng dụng Chúng ta tìm hiểu lập trình với giao thức UDP chương sau TCP UDP giao thức cốt lõi việc kết nối thiết bị công nghệ với Các ứng dụng dùng hai hai giao thức để trao đổi với ứng dụng máy tính khác thơng qua mạng máy tính 5.2 Khái niệm cổng (port number) Để thực giao tiếp, hai trình phải cơng bố số hiệu cổng socket mà sử dụng Mỗi cổng giao tiếp thể địa xác định hệ thống Khi trình gán số hiệu cổng, nhận liệu gửi đến cổng từ trình khác Q trình cịn lại u cầu tạo socket Số hiệu cổng (port number) sử dụng để xác định tính ứng dụng khác Nó hoạt động điểm kết nối cuối giao tiếp ứng dụng Số hiệu cổng gán cho Socket phải phạm vi máy tính đó, có giá trị khoảng từ đến 65535 (16 bit) Trong đó, giá trị cổng: • Từ 0-1023: cổng hệ thống (common hay well-known port), dành riêng cho trình hệ thống 67 • Từ 1024-49151: cổng phải đăng ký (registered port) Các ứng dụng muốn sử dụng cổng phải đăng ký với IANA (Internet Assigned Numbers Authority) • Từ 49152-65535: cổng dùng riêng hay cổng động (dynamic hay private port) Người sử dụng dùng cho ứng dụng mình, khơng cần phải đăng ký Một số cổng thường sử dụng: • • • • • • • • • 21: dịch vụ FTP 23: dịch vụ Telnet 25: dịch vụ Email (SMTP) 80: dịch vụ Web (HTTP) 110: dịch vụ Email (POP) 143: dịch vụ Email (IMAP) 443: dịch vụ SSL (HTTPS) 1433/1434: sở liệu SQL Server 3306: sở liệu MySQL 5.3 Lớp Socket Đơn vị truyền nhận tin phương thức TCP gọi Socket Socket cho phép liệu trao đổi thiết bị mơi trường mạng máy tính Lớp java.net.Socket Java giúp quản lý trình truyền nhận máy tính mạng máy tính giao thức TCP Một Socket đóng vai trị đầu-cuối kết nối thực Một Socket vừa Client để gửi yêu cầu kết nối tới Server vừa tạo Server để xử lý yêu cầu trao đổi tin từ Client Chúng ta tìm hiểu phương thức lớp Socket 5.3.1 Các phương thức tạo public Socket(String host, int port) throws IOException, UnknownHostException 68 Constructor cố gắng để kết nối với máy chủ định cổng định Nếu constructor không ném ngoại lệ, kết nối thành công máy khách kết nối với máy chủ public Socket(InetAddress host, int port)throws IOException, UnknownHostException Constructor giống hệt với hàm tạo trước đó, ngoại trừ việc máy chủ định đối tượng InetAddress public Socket(String host, int port, InetAddress localAddress, int localPort)throws IOException Kết nối đến máy chủ cổng định, tạo socket máy chủ cục địa cổng định public Socket(InetAddress host, int port, InetAddress localAddress, int localPort) throws IOException Constructor giống hệt với constructor trước đó, ngoại trừ máy chủ định đối tượng InetAddress thay String public Socket() Tạo socket không định trước kết nối Sau sử dụng phương thức connect() để kết nối socket với máy chủ 5.3.2 Các phương thức kiểm soát vào-ra public InputStream getInputStream() throws IOException Trả dòng đầu vào socket Input stream kết nối với output stream socket remote public OutputStream getOutputStream() throws IOException Trả dòng đầu socket Output stream kết nối với input stream socket remote 5.3.3 Một số phương thức khác public void connect(SocketAddress host, int timeout) throws IOException Phương thức kết nối socket với máy chủ định Phương thức cần thiết khởi tạo Socket cách sử dụng constructor khơng có đối số 69 public InetAddress getInetAddress() Phương thức trả địa mạng máy chủ mà socket kết nối public int getPort() Trả cổng mà socket bị ràng buộc máy remote public int getLocalPort() Trả cổng mà socket bị ràng buộc máy local public SocketAddress getRemoteSocketAddress() Trả địa socket từ xa public synchronized void setSoTimeout(int timeout) throws SocketException Thiết lập thời gian tồn socket Nếu timeout khác 0, khoảng thời gian (được tính mili giây) mà socket cịn hoạt động Hết thời gian chương trình socket tự hủy public void close() throws IOException Đóng socket, làm cho đối tượng Socket khơng cịn có khả kết nối với máy chủ 5.4 Lớp ServerSocket Lớp java.net.ServerSocket sử dụng ứng dụng máy chủ để tạo một ứng dụng cổng lắng nghe yêu cầu máy khách Một đối tượng lớp ServerSocket tạo phía máy chủ lắng nghe kết nối từ máy khách Đối tượng tồn chương trình ứng dụng mạng chạy giao thức TCP phía máy chủ 5.4.1 Các phương thức tạo public ServerSocket(int port) throws IOException Cố gắng tạo ServerSocket bị ràng buộc vào port định Một ngoại lệ xảy port bị ràng buộc ứng dụng khác public ServerSocket(int port, int backlog) throws IOException Tương tự hàm tạo trước đó, tham số backlog xác định có máy khách đến để lưu trữ hàng đợi 70 public ServerSocket(int port, int backlog, InetAddress address) throws IOException Tương tự constructor trước đó, tham số InetAddress định địa IP cục để ràng buộc InetAddress sử dụng cho máy chủ có nhiều địa IP, cho phép máy chủ xác định địa IP để chấp nhận yêu cầu máy khách public ServerSocket() throws IOException Tạo ServerSocket không kết nối Khi sử dụng constructor này, sử dụng phương thức bind() muốn ràng buộc socket tới máy chủ 5.4.2 Các phương thức khác public Socket accept() throws IOException Chờ cho máy khách kết nối đến Phương thức ngăn chặn máy trạm kết nối đến máy chủ cổng định socket hết hạn, giả sử giá trị thời gian thiết lập phương thức setSoTimeout() Nếu không, phương thức khóa lại vơ thời hạn public int getLocalPort() Trả cổng mà socket máy chủ lắng nghe Phương thức hữu ích truyền số cổng constructor máy chủ tìm thấy cổng cho public void setSoTimeout(int timeout) Thiết lập giá trị thời gian chờ cho socket máy chủ chờ khách hàng suốt trình chấp nhận public void bind(SocketAddress host, int backlog) Liên kết socket tới máy chủ cổng định đối tượng SocketAddress Sử dụng phương thức tạo ServerSocket cách sử dụng constructor khơng có đối số public void close() Đóng ServerSocket, ngừng phục vụ Chúng ta sử dụng phương thức ServerSocket thường ln phục vụ phía máy chủ Khi ServerSocket gọi accept(), phương thức không return máy khách kết nối đến Sau máy khách kết nối, ServerSocket tạo 71 Socket cổng không xác định trả tham chiếu đến Socket thực kết nối TCP máy khách máy chủ để truyền tin 5.5 Lập trình TCP mơ hình Client/Server Trong mơ hình lập trình TCP Client/Server với Java sử dụng hai lớp ServerSocket Socket Lớp ServerSocket sử dụng phía Server lớp Socket sử dụng đồng thời phía Client Server để trao đổi liệu Hình 5.1: Mơ hình Client/Server theo kỹ thuật lập trình với giao thức TCP Quan sát hình thấy để tạo ứng dụng mạng chạy giao thức TCP cần thiết lập hai ứng dụng riêng biệt: ứng dụng Server ứng dụng cho Client Theo trình tự thời gian, ứng dụng phía máy chủ chạy trước tạo ServerSocket cổng x để lắng nghe kết nối từ phía máy khách Máy khách tạo Socket để kết nối tới máy chủ hostid qua cổng x Khi có yêu cầu kết nối, máy chủ chấp nhận kết nối cách tạo Socket qua phương thức accept() Sau thiết lập kết nối máy chủ máy khách trao đổi liệu thông qua phương thức kiểm soát vào-ra lớp Socket Kết nối tồn đến hai bên hủy bỏ kết nối cách đóng kết nối qua phương thức close() có cố mạng 72 5.6 Xử lý ngoại lệ lập trình mạng Trong lập trình mạng nói chung, thường xuyên gặp phải số lỗi định chạy chương trình Có thể kể lỗi xung đột cổng ứng dụng máy chủ, lỗi không kết nối máy tính, lỗi khơng gửi/nhận liệu qua mạng… Java định nghĩa số ngoại lệ (Exception) để xử lý cố như: IOException, UnknownHostException… Để xử lý ngoại lệ có hai cách: • Sử dụng cú pháp try-catch: nên dùng cách để chủ động việc xử lý lỗi Khi có lỗi xảy ra, có biện pháp khắc phục hợp lý thơng báo lỗi cho người dùng biết • Sử dụng cú pháp throws cho phương thức: sử dụng cách giao cho lớp xử lý ngoại lệ Java xử lý giúp Cách nên dùng với lỗi đơn giản gặp phải 5.7 Một số ví dụ Ví dụ 5-1 Viết chương trình kiểm tra cổng máy chủ có hoạt động hay không Cổng hoạt động hiểu cổng có ứng dụng chạy Có nghĩa đóng vai trị máy phục vụ cổng Việc thiết kế giao diện người dùng ví dụ ví dụ sau thực phần mềm NetBeans Chúng ta sử dụng công cụ khác để thiết kế tự sinh đối tượng đồ họa thư viện Swing AWT Dùng Swing AWT thiết kế giao diện sau, tên biến đối tượng đồ họa thích cuối mũi tên Hình 5.2: Thiết kế giao diện kiểm tra cổng mạng Xử lý kiện người dùng bấm nút Kiểm tra sau: private void btCheckActionPerformed(java.awt.event.ActionEvent evt) { String host = tfHost.getText(); //Máy chủ (host) 73 int port = Integer.parseInt(tfPort.getText()); //Cổng (port) Socket sk = new Socket(); //Tạo socket try { sk.connect(new InetSocketAddress(host, port), 1000); JOptionPane.showMessageDialog(null, "Cổng "+port+" hoạt động", "Trạng thái", 1); sk.close(); } catch (IOException ex) { JOptionPane.showMessageDialog(null, "Cổng "+port+" không hoạt động", "Trạng thái", 1); } } Kết nhận sau: Hình 5.3: Kết kiểm tra cổng mạng Ví dụ 5-2 Viết chương trình quét cổng máy chủ Chương trình quét phạm vi cổng định máy chủ xem cổng hoạt động, cổng khơng hoạt động Thiết kế giao diện hình dưới: Hình 5.4: Thiết kế giao diện quét cổng mạng Xử lý kiện người dùng bấm vào nút btScan sau: 74 public void btScanActionPerformed(java.awt.event.ActionEvent evt) { String host = tfHost.getText(); int = Integer.parseInt(tfMin.getText()); int max = Integer.parseInt(tfMax.getText()); taResult.setText(""); for (int i = min; i

Ngày đăng: 14/12/2021, 10:43

Nguồn tham khảo

Tài liệu tham khảo Loại Chi tiết
1. Elliotte Rusty Harold, Java Network Programming, 4 th Edition, O’Reilly, USA, 2014 Sách, tạp chí
Tiêu đề: Java Network Programming, 4"th" Edition
2. Kenneth L. Calvert, Micheal J. Donahoo, TCP/IP Sockets in Java: Practical guide for programmers, 2 nd Edition, Elsevier, USA, 2008 Sách, tạp chí
Tiêu đề: TCP/IP Sockets in Java: Practical guide for programmers, 2"nd" Edition
3. Richard M. Reese, Learning Network Programming with Java, Packt, UK, 2015 Sách, tạp chí
Tiêu đề: Learning Network Programming with Java
4. William Stallings, Data and Computer Communications, 10 th Edition, Prentice Hall, USA, 2013 Sách, tạp chí
Tiêu đề: Data and Computer Communications, 10"th" Edition
5. James F. Kurose, Keith W. Ross, Computer Networking: A Top-Down Approach, 7 th Edition, Addison-Wesley, USA, 2017 Sách, tạp chí
Tiêu đề: Computer Networking: A Top-Down Approach, 7"th" Edition
6. Cay S. Horstmann, Core Java, Volume I - Fundamentals, 10 th Edition, Prentice Hall, USA, 2016 Sách, tạp chí
Tiêu đề: Core Java, Volume I - Fundamentals, 10"th" Edition
7. Cay S. Horstmann, Core Java, Volume II - Advanced Features, 10 th Edition, Prentice Hall, USA, 2017 Sách, tạp chí
Tiêu đề: Core Java, Volume II - Advanced Features, 10"th" Edition

TỪ KHÓA LIÊN QUAN

w