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.
Trang 1Quản lý địa chỉ kết nối mạng InetAdress, URL, URLConnection
Trang 33
Trang 4A 0|netid|hostid N.H.H.H 7/24 2 7 -2=126 2 24
-2=17.777.214
126.0.0.0
E 1|1|1|1 - - - -
240.0.0.0-254.255.255.2 55
Loopba
ck - - - - - 127.x.x.x
Trang 5-> 128.36.229.30
(cs.yale.edu, Email) -> netra.cs.yale.edu
(netra.cs.yale.edu, Addr)
-> 128.36.229.21
Tại sao phải dùng tên thay
cho địa chỉ IP?
Trang 6DNS: Domain Name System
Lược đồ tên miền (IANA, ICANN)
Nslookup (Domain/IP)
Trang 7Quản lý tên miền
Mỗi nhóm tên (Zone) có một server chứng thực tên
Mỗi Zone được ủy quyền chứng thực một tập tên miền
M t Zone ột Zone
Trang 8Nhóm Zone gốc và Server
13 servers quản lý zone gốc trên toàn cầu
Trang 9Liên kết giữa các sever DNS
Mỗi server biết địa chỉ server gốc
Mỗi server gốc biết địa chỉ chính nó và địa chỉ node con trực tiếp
Tên miềm cấp cao
Trang 10Ví dụ xác định tên miền
Trang 12Tạo đối tượng InetAddresses
Không có phương thức khởi tạo
Tất cả các đối tượng địa chỉ được tạo ra, địa chỉ
tương ứng phải được kiểm trả với DNS
public static InetAddress
InetAddress.getByName ( String hostname )
public static InetAddress[]
InetAddress.getAllByName (String
hostname )
public static InetAddress
InetAddress.getLocalHost ()
Trang 13Tạo đối tượng : getByName ()
public static InetAddress getByName(String host)
catch (UnknownHostException e) {
System.err.println(e);
}
Trang 14Tạo đối tượng: getByName()
public static InetAddress getByName(String host)
throws UnknownHostException
InetAddress ipdntu, dntu;
try {
ipdntu = InetAddress.getByName(“dntu.edu.vn"); dntu = InetAddress.getByName("118.69.218.67");}
catch (UnknownHostException e) {
System.err.println(e);
}
Trang 15Phương thức lấy các thành phần
public String getHostName( )
public byte[] getAddress()
public String getHostAddress()
Trang 16Phương thức kiểm tra
public boolean isReachable(int timeout) throws
IOException
public boolean isMulticastAddress()
public boolean isSiteLocalAddress()
Trang 17} catch (SocketException ex) {
System.err.println("Could not list sockets." );
}
17
Trang 18import java.net.*; import java.util.*;
public class InterfaceLister {
public static void main(String[] args) throws Exception {
Trang 19Cổng ứng dụng
Một host có một địa chỉ duy nhất để nhận dạng, làm thế nào để đồng thời nhiều ứng dụng trên một host có thể
giao tiếp với host khác ?
Cổng-port được sử dụng Có 65,536 port
Một một dịch vụ tương ứng với một port Ví dụ, http chạy với port 80
Trang 20Giao thức
Mỗi dịch vụ tương ứng với một giao thức
Giao thức qui định 2 dịch vụ của 2 host giao tiếp với nhau như thế nào
Ví dụ
telnet, SMTP, HTTP
http://www.faqs.org/rfc/
Trang 21 URL-"Uniform Resource Locator", xác định tài
nguyên trên mạng Internet
Trang 23The java.net.URL class
Đối tượng biểu diễn URL
Cho phép kết nối tới server
Có các phương thức
Tạo một đối tượng URL mới
Phân tích các thành phần của URL
Lấy luồng nhập để đọc dữ liệu từ server
Trang 24Quản lý dữ liệu và giao thức
Dữ liệu và giao thức tương ứng được kiểm soát
Trang 25Tạo đối tượng URL
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
Khi máy ảo tạo ra đối tượng URL, thì đồng thời nó tìm
trình quản lý giao thức tương ứng ví dụ “http” hoặc
“mailto”.
Nếu không có, hàm khởi tạo tạo ra ngoại lệ
MalformedURLException
Trang 26Ví dụ
try {
URL u = newURL("http://www.poly.edu/fall97/grad.html#cs");}
catch (MalformedURLException e) {}
Trang 30Thao tác thành phần URL
public String getProtocol()
public String getHost()
public int getPort()
public String getFile()
public String getRef()
public String getQuery()
Trang 31Ví dụ
try {
URL u = new URL("http://www.poly.edu/fall97/grad.php? q=idx#cs ");
System.out.println("The protocol is"+u.getProtocol());
System.out.println("The host is " + u.getHost());
System.out.println("The port is " + u.getPort());
System.out.println("The file is " + u.getFile());
System.out.println("The anchor is " + u.getRef());
System.out.println("The query is " + u.getQuery());
}catch (MalformedURLException e) { }
Trang 34Mã hóa URL
Các ký tự trong bảng mã ASCII gồm a-z, A-Z, , 0-9
và $-_.!*'(), là 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 và theo sau đó là giá trí trị
mã ASCII của nó biểu diễn ở hệ cơ số 16
Trang 35Ví dụ
Dấu phẩy mã ASCII là (44)10 hay (2C)16 Vì vậy,
trong URL dấu phẩy được mã là %2C
Trang 38Lớp URLConnection
Cho phép tạo kênh giao tiếp với Server (FTP,
HTTP, )
Có thể gửi dữ liệu và đọc dữ liệu
Mặc định khi kết nối tới HTTP, URL sử dụng
phương thức GET
Đọc thông tin Header khi giao tiếp với Server
Trang 39Tạo đối tượng URLConnection
Tạo đối tượng URL
Gọi phương thức openConnection()
Đọc các trường header
Nhận một luồng nhập và đọc dữ liệu
Nhận một luồng xuất và ghi dữ liệu
Đóng liên kết
Trang 40Tạo đối tượng URLConnection
public Map getHeaderFields()
public InputStream getInputStream()
public OutputStream getOutputStream()
public abstract void connect() throws
IOException
Trang 41}catch(MalformedURLException e){System.err.println(e);}
Trang 43Các hàm nhận thông tin Header
public String getHeaderField(String name) public int getContentLength()
public String getContentType()
public String getContentEncoding()
public long getExpiration()
public long getDate()
public long getLastModified()
Ví dụ:
uc.getHeaderField("content-type");
uc.getHeaderField("content-encoding");
Trang 45if((i>=1)&&(i<=126)) System.out.println(host+" thuoc dia chi lop A");
if((i<=191)&&(i>=128)) System.out.println(host+" thuoc dia chi lop B");
if((i<=223)&&(i>=192)) System.out.println(host+" thuoc dia chi lop C");
}catch(UnknownHostException e){
System.out.println("Khong tim thay dia chi"); return;
}
}}
Trang 46Ví dụ
import java.net.*;
public class Local {
public static void main(String[] args) {
try {
InetAddress me = InetAddress.getLocalHost();
System.out.println("My name is " + me.getHostName());
System.out.println("My address is " + me.getHostAddress());
byte[] address = me.getAddress();
for (int i = 0; i < address.length; i++) {
System.err.println("Could not determine local address.");
System.err.println("Perhaps the network is down?");
}
}
My address is 192.168.1.6 -64 -88 1 6