Bài giảng Lập trình mạng - Chương 5 trang bị cho người học những hiểu biết về quản lý địa chỉ kết nối mạng InetAdress, URL, URLConnection. Thông qua chương này người học sẽ biết về: IP, DNS, InetAddress, URL và URLConnection. Mời các bạn cùng tham khảo.
Quản lý địa kết nối mạng InetAdress, URL, URLConnection Nội dung IP DNS InetAddress URL URLConnection IPv4 Địa IPv4 Lớp Cấu trúc địa IP Format Số bit mạng/sốbi t host Tổng số mạng/lớp Tổng số host/mạng Vùng địa IP A 0|netid|hostid N.H.H.H 7/24 27-2=126 2242=17.777.214 1.0.0.1126.0.0.0 B 1|0|netid|hostid N.N.H.H 14/16 214-2=16382 216-2=65.643 128.1.0.0191.254.0.0 C 1|1|0|netid|hostid N.N.N.H 22/8 2222=4194302 28-2=245 192.0.1.0223.255.254.0 D 1|1|1|0| địa Multicast - - - - 224.0.0.0239.255.255.2 55 E 1|1|1|1 - - - - 240.0.0.0254.255.255.2 55 - - - - - 127.x.x.x Loopba ck DNS: Domain Name System Chức clients Ánh xạ (tên miền, dịch vụ) sang giá trị, ví dụ,, (www.cs.yale.edu, Addr) DNS -> 128.36.229.30 (cs.yale.edu, Email) Tên miền, dịch vụ, địa -> netra.cs.yale.edu (netra.cs.yale.edu, Addr) -> 128.36.229.21 Tại phải dùng tên thay cho địa IP? routers servers DNS: Domain Name System Lược đồ tên miền (IANA, ICANN) Nslookup (Domain/IP) Quản lý tên miền Mỗi nhóm tên (Zone) có server chứng thực tên Mỗi Zone ủy quyền chứng thực tập tên miền Một Zone Nhóm Zone gốc Server 13 servers quản lý zone gốc toàn cầu Liên kết sever DNS Mỗi server biết địa server gốc Mỗi server gốc biết địa địa node trực tiếp Tên miềm cấp cao Ví dụ xác định tên miền 10 Đọc liệu từ server public final InputStream openStream() throws IOException public URLConnection openConnection() throws java.io.IOException public final Object getContent() throws java.io.IOException Ví dụ String s="ftp://it.hutech.edu.vn/quidinh.doc"; String thisLine; try{ URL u =new URL(s); try{ DataInputStream dis = new DataInputStream(u.openStream()); while((thisLine=dis.readLine())!=null) System.out.println(thisLine); }catch(IOException e) { System.err.println(e);} }catch(MalformedURLException e){ System.err.println(e); } Mã hóa URL Các ký tự bảng mã ASCII gồm a-z, A-Z, , 0-9 $-_.!*'(), không thay đổi Các ký tự khoảng cách trắng bị biến đổi thành dấu cộng (+) Các ký tự khác (ví dụ &, =, ^, #, %, ^, {, ) bị biến đổi thành dấu phần trăm theo sau giá trí trị mã ASCII biểu diễn hệ số 16 Ví dụ Dấu phẩy mã ASCII (44)10 hay (2C)16 Vì vậy, URL dấu phẩy mã %2C Chuỗi truy vấn "Author=Sadie, Julie&Title=Women Composers" mã là: Author=Sadie %2C+Julie&Title=Women+Composers Lớp URLEncoder Cho phép mã hóa URL theo khn dạng x-www-form-url-encoded Phương thức tĩnh dùng mã hóa là: URLEncoder.encode(String s) Ví dụ String qs = "Author=Sadie, Julie&Title=Women Composers"; String eqs = URLEncoder.encode(qs); System.out.println(eqs); Kết Author%3dSadie%2c+Julie%26Title%3dWomen+Composers Lớp URLDecoder Giải mã chuỗi truy vấn có dạng x-www-form-url-encoded Phương thức tĩnh giải mã URLEncoder.decode(String s) Lớp URLConnection Cho phép tạo kênh giao tiếp với Server (FTP, HTTP, ) Có thể gửi liệu đọc liệu Mặc định kết nối tới HTTP, URL sử dụng phương thức GET Đọc thông tin Header giao tiếp với Server Tạo đối tượng URLConnection Tạo đối tượng URL Gọi phương thức openConnection() Đọc trường header Nhận luồng nhập đọc liệu Nhận luồng xuất ghi liệu Đóng liên kết Tạo đối tượng URLConnection public Map getHeaderFields() public InputStream getInputStream() public OutputStream getOutputStream() public abstract void connect() throws IOException Ví dụ String s="ftp://dntu.edu.vn/thongbao.doc"; try{ URL u =new URL(s); try{ URLConnection uc=u.openConnection(); DataInputStream is; is = new DataInputStream(uc.getInputStream()); String thisLine; while((thisLine=is.readLine())!=null){ System.out.println(thisLine); } } catch(Exception e) { System.err.println(e); } }catch(MalformedURLException e){System.err.println(e);} Ví dụ try{ URL u = new URL(“http://www.somehost.com/cgi-bin/acgi”); URLConnection uc = u.openConnection(); uc.setDoOutput(true); DataOutputStream dos; dos = new DataOutputStream(uc.getOutputStream()); dos.writeByte("Herre is some data"); }catch(Exception e) { System.err.println(e); } Các hàm nhận thông tin Header public public public public public public public String int String String long long long getHeaderField(String name) getContentLength() getContentType() getContentEncoding() getExpiration() getDate() getLastModified() Ví dụ: uc.getHeaderField("content-type"); uc.getHeaderField("content-encoding"); Ví dụ try { URL u = new URL("http://www.sdexpo.com/"); URLConnection uc = u.openConnection(); uc.connect(); String key=null; for (int n = 1; (key=uc.getHeaderFieldKey(n)) != null; n++) { System.out.println(key + ": " + uc.getHeaderField(key)); } } catch (IOException e) { System.err.println(e); } Ví dụ 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