intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Bài giảng Lập trình ứng dụng mạng: Bài 2 - GV. Võ Tấn Dũng

Chia sẻ: Fczxxv Fczxxv | Ngày: | Loại File: PDF | Số trang:66

112
lượt xem
18
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Bài giảng Lập trình ứng dụng mạng: Bài 2 Lập trình Socket nhằm trình bày về khái niệm Socket, lớp InetAddress, việc kết nối thông qua Socket cần hai thông tin chủ yếu đó là địa chỉ của máy cần kết nối và số hiệu cổng của chương trình dịch vụ.

Chủ đề:
Lưu

Nội dung Text: Bài giảng Lập trình ứng dụng mạng: Bài 2 - GV. Võ Tấn Dũng

  1. TRƯỜNG CAO ĐẲNG CÔNG NGHỆ THÔNG TIN TP.HCM LẬP TRÌNH ỨNG DỤNG MẠNG BÀI 2 LẬP TRÌNH SOCKET LẬP GV: Võ Tấn Dũng GIẢNG VIÊN: VÕ TẤN DŨNG
  2. KHÁI NIỆM SOCKET Socket là một phương pháp để thiết lập kết nối truyền thông giữa một chương trình yêu cầu dịch vụ (client) và một chương trình cung cấp dịch vụ (server) trên mạng LAN, WAN hay Internet. Trước khi yêu cầu dịch vụ từ máy chủ thì máy khách phải kết nối đến máy chủ. Quá trình kết nối này được Java thực hiện thông quá một cơ chế trừu tượng hóa gọi là Socket. Việc kết nối thông qua Socket cần hai thông tin chủ yếu đó là địa chỉ của máy cần kết nối và số hiệu cổng của chương trình dịch vụ. GV: Võ Tấn Dũng 2
  3. PHẦN 1 Lớp InetAddress Lớp InetAddress & llớp URL & ớp URL GV: Võ Tấn Dũng
  4. Lớp InetAddress Lớp InetAddress được sử dụng để biểu diễn các địa chỉ IP trong một ứng dụng mạng. Lớp này được sử dụng bởi hầu hết các lớp mạng, bao gồm Socket, ServerSocket, URL, DatagramSocket, DatagramPacket,… Nó bao gồm hai trường thông tin: hostName (một đối tượng kiểu String) và address (một số kiểu int). Các trường này không phải là trường public, vì thế ta không thể truy xất chúng trực tiếp. GV: Võ Tấn Dũng 4
  5. Lớp InetAddress Lớp InetAddress không có các constructor cho lớp InetAddress. Tuy nhiên, có ba phương thức tĩnh trả về các đối tượng InetAddress: – public static InetAddress InetAddress.getByName(String hostname) – public static InetAddress[] InetAddress.getAllByName(String hostname) – public static InetAddress InetAddress.getLocalHost() Tất cả các phương thức này đều thực hiện kết nối tới server DNS cục bộ để biết được các thông tin trong đối tượng InetAddress. GV: Võ Tấn Dũng 5
  6. Lớp InetAddress Ví dụ: Phương thức getByName này nhận tên của hostname làm tham số và trả về đối tượng kiểu InetAddress try{ InetAddress dc =InetAddress.getByName(“www.microsoft.com”); System.out.println(dc); } catch(UnknownHostException e) { System.err.println(e); } GV: Võ Tấn Dũng 6
  7. Lớp InetAddress Ví dụ 1:Viết chương trình nhận hostname từ đối dòng lệnh và in ra địa chỉ IP tương ứng với hostname đó. import java.net.*; public class TimDCIP { public static void main(String[] args) {try{ if(args.length!=1) { System.out.println("Cach su dung: java TimDCIP ");} InetAddress host = InetAddress.getByName(args[0]); String hostName = host.getHostName(); System.out.println("Host name:"+hostName); System.out.println("Dia chi IP:"+host.getHostAddress()); } catch(UnknownHostException e) { System.out.println("Khong tim thay dia chi"); return; } } GV: Võ Tấn Dũng } 7
  8. Lớp InetAddress Có thể đọc các trường của InetAddress bằng cách gọi phương thức getHostname và getAddress(): public String getHostName(): Phương thức này trả về một chuỗi biểu diễn hostname của một đối tượng InetAddress. Nếu máy không có hostname, thì nó sẽ trả về địa chỉ IP của máy này dưới dạng một xâu ký tự. public byte[ ] getAddress() : Nếu bạn muốn biết địa chỉ IP của một máy, phương thức getAddress() trả về một địa chỉ IP dưới dạng một mảng các byte. GV: Võ Tấn Dũng 8
  9. Lớp InetAddress Ví dụ: Viết chương trình nhập một hostName từ đối dòng lệnh và in ra dòng thông báo cho biết địa chỉ IP tương ứng với địa chỉ IP đó thuộc lớp nào. import java.net.*; public class PhanLoaiDCIP { public static void main(String[] args) {try{ if(args.length!=1) {System.out.println("Cach su dung: java TimDCIP ");} InetAddress host = InetAddress.getByName(args[0]); String hostName = host.getHostName(); System.out.println("Host name:"+hostName); System.out.println("Dia chi IP:"+host.getHostAddress()); byte[] b=host.getAddress(); int i=b[0]>=0?b[0]:256+b[0]; if((i>=1)&(i
  10. Lớp URL Lớp java.net.URL là một khái niệm về bộ định vị tài nguyên thống nhất. Một URL gồm 3 phần: – Giao thức (protocol), – Hosname (có thể là một địa chỉ hay tên máy chủ) và cổng (port), – Đường dẫn (path) chỉ đến tên tập tin (filename) hay mục tài liệu (document section) mà máy client muốn lấy từ máy chủ về. Ví dụ: http://www.abc.com:80/xyz/index.html GV: Võ Tấn Dũng 10
  11. Lớp URL Đối tượng URL có các constructor sau: – public URL(String url) throws MalformedURLException – public URL(String protocol, String host, String file) throws MalformedURLException – public URL(String protocol, String host, int port, String file) throws MalformedURLException – public URL(URL u, String s) throws MalformedURLException GV: Võ Tấn Dũng 11
  12. Lớp URL public URL(String url) throws MalformedURLException Đây là constructor đơn giản nhất; tham số của nó chỉ là một URL ở dạng chuỗi. Ví dụ try{ URL u = new URL(“http://www.sun.com/index.html”); } catch(MalformedURLException e) { System.err.println(e); } GV: Võ Tấn Dũng 12
  13. Lớp URL public URL(String protocol, String host, String file) throws MalformedURLException Đối số truyền vào gồm 3 chuỗi tương ứng với: giao thức, hostname và đường dẫn đến tài nguyên. Không có đối số port (có nghĩa là dùng cổng mặc định). Ví dụ try{ URL u = new URL (“http”,”/www.sun.com”,”index.html”); }catch(MalformedURLException e){ System.err.println(e); } GV: Võ Tấn Dũng 13
  14. Lớp URL public URL(String protocol, String host, int port, String file) throws MalformedURLException Constructor này cho phép bạn xác định cổng một cách rõ ràng kiểu int. Ví dụ: try{ URL u = new URL(“http”,”/www.sun.com”,80,”index.html”); } catch(MalformedURLException e) { System.err.println(e); } GV: Võ Tấn Dũng 14
  15. Lớp URL public URL(URL u, String s) throws MalformedURLException Ví dụ URL u1,u2; try{ URL u1= new URL(“http://www.macfaq.com/index.html”); URL u2 = new URL(u1,”vendor.html”); } catch(MalformedURLException e) { System.err.println(e); } Tên file sẽ được loại khỏi đường dẫn của u1, và tên file mới vendor.html được gán vào để tạo lên u2. Constructor này đặc biệt hữu ích khi bạn muốn duyệt qua một danh sách các file mà tất cả cùng nằm trong một thư mục. GV: Võ Tấn Dũng 15
  16. Một số phương thức khác của lớp URL public final Object getContent(): throws IOException lấy về nội dung mà kết nối theo địa chỉ URL có được. String getFile(): lấy về thành phần tên tập tin hay tài liệu nằm trong chuỗi địa chỉ URL. String getHost(): lấy tên máy chủ, thường là thành phần thứ hai trong chuỗi URL. String getProtocol(): lấy về tên giao thức, là thành phần thứ hai trong chuỗi URL. String getPort(): lấy về số hiệu cổng. String getRef(): lấy về nội dung tham khảo thêm trong chuỗi URL (nằm sau dấu # trong một URI) GV: Võ Tấn Dũng 16
  17. Ví dụ về lớp URL Ví dụ: đoạn mã sau đây dùng để lấy về nội dung trang web index.html từ máy chủ có địa chỉ java.sun.com try{ //mở kết nối đến trang web theo định vị URL URL o=new URL(http://java.sun.com/index.html); //tạo luồng nhập để đọc nội dung trang web trả về từ máy chủ BufferedReader inStream=new BufferedReader(new InputStreamReader(o.openStream())); //in nội dung trang web index.html ra màn hình String line; while((line=in.readLine())!=null) { System.out.println(line); } }catch (Exception e) { //quá trình mở và kết nối đến trang web bị lỗi System.out.println(e); GV: Võ Tấn Dũng } 17
  18. PHẦN 2 Các llớp Socket Các ớp GV: Võ Tấn Dũng
  19. Một số lớp Socket và Datagram Lớp Socket Lớp ServerSocket Lớp DatagramSocket Lớp DatagramPackage Chú ý: Lập trình Socket truyền dữ liệu sẽ liên quan đến hai giao thức ở tầng Transport (trong mô hình tham chiếu 7 tầng OSI), đó là giao thức truyền tin cậy TCP và truyền không tin cậy UDP. GV: Võ Tấn Dũng 19
  20. Socket class cho Client Lớp Socket dùng tạo kết nối từ máy khách đến máy chủ thường được khởi dựng bằng các phương thức sau: public Socket(String host, int port) throws UnknownHostException, IOException Hàm này tạo một socket TCP với host và cổng xác định, và thực hiện liên kết với host ở xa. public Socket(InetAddress host, int port)throws IOException Tương tự như constructor trước, constructor này tạo một socket TCP với thông tin là địa chỉ của một host được xác định bởi một đối tượng InetAddres và số hiệu cổng port, sau đó nó thực hiện kết nối tới host. Nó đưa ra ngoại lệ IOException nhưng không đưa ra ngoại lệ UnknownHostException. Constructor đưa ra ngoại lệ trong trường hợp không kết nối được tới host. GV: Võ Tấn Dũng 20
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2