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

Chương: Lập trình Socket

Chia sẻ: Nam Đỗ Minh | Ngày: | Loại File: DOC | Số trang:62

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

Tài liệu Chương: Lập trình Socket hướng dẫn các bạn cách lập trình Socket. Tài liệu nhằm nâng cao khả năng lập trình máy tính của các bạn. Tài liệu hữu ích với các bạn chuyên nganh Công nghệ Thông tin và các bạn quan tâm tới lĩnh vực lập trình.

Chủ đề:
Lưu

Nội dung Text: Chương: Lập trình Socket

  1. Ch¬ng ... LËp tr×nh Socket I. C¸c kiÕn thøc liªn quan Tríc khi b¾t ®Çu häc bµi nµy c¸c b¹n cÇn ®äc l¹i c¸c kiÕn thøc liªn quan sau: - Giao thøc, yªu cÇu tèi thiÓu c¸c b¹n ph¶i n¾m ®îc 3 giao thøc : IP, TPC, UDP - C¸ch ®¸nh ®Þa chØ IP, ®Þa chØ d¹ng tªn miÒn, giao thøc chuyÓn ®æi ®Þa chØ IP thµnh ®Þa chØ tªn miÒn, vµ ngîc l¹i - Mét sè ®Þa chØ ®Æc biÖt: ®Þa chØ lÆp, ®Þa chØ broadcash, multicash… - Cæng giao thøc - Ph©n biÖt ®îc sù kh¸c nhau, gièng nhau gi÷a 2 giao thøc TCP vµ UDP 1. Giíi thiÖu Socket Socket lµ mét giao diÖn lËp tr×nh øng (API - Application Program Interface) dông m¹ng, th«ng qua giao diÖn nµy ta cã thÓ lËp tr×nh ®iÒu khiÓn viÖc truyÒn th«ng gi÷a 2 m¸y sö dông c¸c giao thøc møc thÊp nh TCP, UDP…, Socket lµ mét sù trõu tîng ho¸ ë møc cao, cã thÓ tëng tîng, nã nh lµ mét thiÕt bÞ truyÒn th«ng 2 chiÒu t¬ng tù nh tÖp tin, chóng ta göi/ nhËn d÷ liÖu gi÷a 2 m¸y, t¬ng tù nh viÖc ®äc/ ghi trªn tÖp tin. §Ó liªn l¹c th«ng qua Socket, ta cÇn tiÕn hµnh c¸c thao t¸c: - T¹o lËp hay më mét Socket + G¾n mét Socket víi mét ®Þa chØ, ®Þa chØ nµy chÝnh lµ ®Þa chØ cña m¸y mµ nã cÇn liªn l¹c + Thùc hiÖn viÖc liªn l¹c, cã 2 kiÓu liªn l¹c tuú thuéc vµo chÕ ®é kÕt nèi: a) liªn l¹c trong chÕ ®é kh«ng kÕt nèi: Hai tiÕn tr×nh liªn l¹c víi nhau kh«ng kÕt nèi trùc tiÕp mçi th«ng ®iÖp göi ®i ph¶i kÌm theo ®Þa chØ cña ngêi nhËn H×nh thøc liªn l¹c nµy cã ®Æc ®iÓm: ngêi göi kh«ng ch¾c ch¾n th«ng ®iÖp cña hä cã ®Õn tay ngêi nhËn kh«ng mét th«ng ®iÖp cã thÓ göi nhiÒu lÇn th«ng ®iÖp göi sau cã thÓ ®Õn ®Ých tríc th«ng ®iÖp göi tríc ®ã b) liªn l¹c trong chÕ ®é kÕt nèi:
  2. Cã mét ®êng kÕt nèi “¶o” ®îc thµnh lËp gi÷a 2 tiÕn tr×nh, tríc khi mét kÕt nèi ®îc thµnh lËp th× mét trong 2 tiÕn tr×nh ph¶i ®îi tiÕn tr×nh kia yªu cÇu kÕt nèi, cã thÓ sö dông Socket ®Ó liªn l¹c theo m« h×nh Client/Server. Trong m« h×nh nµy server sö dông lêi gäi listen vµ accept ®Ó l¾ng nghe vµ chÊp nhËn mét yªu cÇu kÕt nèi 2. LËp tr×nh Socket trong java Java cung cËp mét sè líp cho phÐp c¸c øng dông m¹ng cã thÓ trao ®æi víi nhau qua c¬ chÕ Socket, cô thÓ líp Socket cung cÊp cho ta c¬ chÕ liªn l¹c trong chÕ ®é kÕt nèi (sö dông giao thøc TCP) vµ líp DatagramSocket cho phÐp c¸c øng dông m¹ng liªn l¹c víi nhau trong chÕ ®é kh«ng kÕt nèi (sö dông giao thøc UDP), tÊt c¶ c¸c líp liªn quan ®Õn viÖc lËp tr×nh Socket ®îc java nhãm l¹i vµ ®Ó trong gãi java.net II. Kh¶o s¸t mét sè líp trong gãi java.net 1. líp InetAddress Mçi mét m¸y khi tham gia truyÒn th«ng cÇn ph¶i cã mét ®Þnh danh, ®Þnh danh nµy ph¶i lµ duy nhÊt, ®Þnh danh nµy ®îc thÓ hiÖn b»ng ®Þa chØ IP hoÆc ®Þa chØ díi d¹ng tªn miÒn. Líp InetAddress biÓu thÞ cho mét ®Þa chØ cña mét m¸y nµo ®ã, khi ta muèn liªn l¹c víi mét m¸y ë xa, ta ph¶i biÕt ®îc ®Þa chØ IP cña m¸y ë xa, tuy nhiªn ®Þa chØ IP th× rÊt khã nhí, ®«i khi ta kh«ng thÓ biÕt chÝnh x¸c ®Þa chØ IP cña m¸y ®ã, bëi v× nhiÒu nguyªn nh©n kh¸c nhau nh: m¸y ®ã khëi ®éng tõ xa hoÆc ®îc nèi vµo nhµ cung cÊp dÞch vô Internet, do vËy mçi lÇn kÕt nèi vµo nhµ cung cÊp dÞch vô ISP ta l¹i cã 1 ®Þa chØ IP kh¸c nhau. VËy thÕ th× lµm thÕ nµo ®Ó ta cã thÓ liªn l¹c víi m¸y ë xa khi ta chØ biÕt ®Þa chØ m¸y ®ã d íi d¹ng tªn miÒn?, c©u tr¶ lêi lµ líp InetAddress ®· lµm ®iÒu ®ã cho ta, líp nµy tù ®éng chuyÓn ®Þa chØ d¹ng tªn miÒn thµnh ®Þa chØ IP vµ ngîc l¹i. Líp InetAddress cung cÊp mét sè ph¬ng thøc tÜnh (static) dïng ®Ó chuyÓn ®æi dÞa chØ díi d¹ng tªn miÒn thµnh ®Þa chØ IP vµ ngîc l¹i. Cã mét sè ph¬ng thøc sau mµ b¹n cÇn quan t©m: Ph¬ng ph¸p M« t¶ Public void equals( Object obj) So s¸nh 2 ®èi tîng Public byte[] getAddress() LÊy vÒ ®Þa chØ IP díi d¹ng
  3. m¶ng byte public static InetAddress[] Tr¶ vÒ m¶ng ®èi tîng getAllByName(String host) InetAddress, v× mét m¸y cã thÓ throws cã nhiÒu ®Þa chØ IP (do cã UnknownHostException nhiÒu card m¹ng), nªn ph¬ng thøc nµy tr¶ vÒ mét m¶ng chøa tÊt c¶ c¸c ®Þa chØ t¬ng øng víi tªn miÒn. public static InetAddress Tr¶ l¹i ®èi tîng InetAddress cã tªn getByName(String host) ®îc chØ ra, tªn nµy lµ mét x©u kÝ throws tù díi d¹ng tªn miÒn hoÆc ®Þa UnknownHostException chØ IP public String getHostAddress() Tr¶ vÒ ®Þa chØ IP cña m¸y chñ public String getHostName() Tr¶ vÒ tªn cña m¸y chñ public static InetAddress Tr¶ vÒ ®èi tîng InetAddress kÕt getLocalHost() hîp víi chÝnh m¸y ®ã throws UnknownHostException public boolean KiÓm tra xem ®Þa chØ nµy cã isMulticastAddress() ph¶i lµ ®Þa chØ Multicast kh«ng Chó ý: - Trong gãi java.net cßn líp Inet4Address vµ líp Inet6Address hai líp nµy thÓ hiÖn cho c¸c ®Þa chØ IP version 4 vµ IP version 6, nã gåm tÊt c¶ c¸c thµnh phÇn cña líp InetAddress - Ta cÇn thªm mÖnh ®Ò import líp java.net.InetAddress tríc khi cã thÓ sö dông nã. - Ph¬ng thøc getByName sÏ cã g¾ng ph©n gi¶i tªn miÒn thµnh ®Þa chØ IP t¬ng øng b»ng c¸ch: Tríc tiªn nã ®i t×m trong cache, nÕu kh«ng t×m thÊy nã t×m tiÕp trong tÖp host, nÕu vÉn kh«ng t×m thÊy nã sÏ cè g¾ng kÕt nèi ®Õn m¸y chñ DNS ®Ó yªu cÇu ph©n gi¶i tªn nµy thµnh ®Þa chØ IP, nÕu kh«ng thÓ ph©n gi¶i ®îc tªn nµy th× nã sÏ sinh ra mét ngo¹i lÖ UnknownHostException, thÕ nªn b¹n cÇn ®Æt chóng vµo mét khèi try ..catch.
  4. VÝ dô 1: Minh ho¹ c¸ch sö dông c¸c ph¬ng thøc getByName ®Ó t¹o ra mét InetAddress import java.net.*; class InetAddress1 { public static void main(String[] args) { try { InetAddress address = InetAddress.getByName("www.theht.edu.vn"); System.out.println(address); } catch (UnknownHostException ex) { System.out.println("Could not find www.theht.edu.vn"); } } } KÕt qu¶ ch¹y ch¬ng tr×nh nh sau: www.theht.edu.vn/127.0.0.1 Ngoµi c¸ch truyÒn vµo ph¬ng thøc getByName mét x©u ký tù thÓ hiÖn tªn m¸y b¹n ta thÓ truyÒn vµo mét x©u thÓ hiÖn ®Þa chØ IP cña m¸y nh sau: InetAddress address = InetAddress.getByName("192.168.101.1"); VÝ dô 2: T¹o ra mét InetAddress t¬ng øng víi m¸y côc bé: import java.net.*; class MyAddress { public static void main(String[] args) { try { InetAddress address = InetAddress.getLocalHost(); System.out.println(address); } catch (UnknownHostException ex) { System.out.println("Could not find this computer's address."); }
  5. } } KÕt qu¶ ch¹y ch¬ng tr×nh nh sau: theht1/192.168.101.1 VÝ dô 3: NÕu m¸y b¹n cã cµi nhiÒu card m¹ng b¹n cã thÓ lÊy vÒ mét m¶ng c¸c InetAddess t¬ng øng víi ®Þa chØ IP cho tõng card m¹ng ®ã: import java.net.*; class AllAddressesOfTheht { public static void main(String[] args) { try { InetAddress[] addresses = InetAddress.getAllByName("www.theht.edu.vn"); for (int i = 0; i < addresses.length; i++) { System.out.println(addresses[i]); } } catch (UnknownHostException ex) { System.out.println("Could not find www.theht.edu.vn"); } } } KÕt qu¶ ch¹y ch¬ng tr×nh nh sau: www.theht.edu.vn /192.168.101.1 www.theht.edu.vn /10.0.0.2 www.theht.edu.vn /162.163.10.5 www.theht.edu.vn /3.152.90.25 së dÜ cho kÕt qu¶ nh trªn lµ do m¸y cña t«i cã cµi 4 card m¹ng, t¬ng øng víi mçi card m¹ng t«i ®Æt mét dÞa chØ IP cho nã. NÕu m¸y cña b¹n cã nèi m¹ng Internet b¹n cã thÓ kiÓm tra xem m¸y chñ www.microsoft.com cña Microsoft ®îc cµi bao nhiªu bé giao tiÕp m¹ng b»ng c¸ch thayInetAddress.getAllByName("www.theht.edu.vn"); bëi InetAddress.getAllByName("www.microsoft.com");
  6. VÝ dô 4: LÊy vÒ tªn m¸y khi biÕt ®Þa chØ IP cña nã, ®Ó lÊy vÒ tªn cña m¸y ta sö dông ph¬ng thøc getHostName nh sau: import java.net.*; class ReverseTest { public static void main(String[] args) { try { InetAddress ia = InetAddress.getByName("162.163.10.5"); System.out.println(ia.getHostName()); } catch (Exception ex) { System.err.println(ex); } } } KÕt qu¶ ra nh sau: theht VÝ dô 5: LÊy vÒ ®i¹ chØ IP cña m¸y khi biÕt tªn cña m¸y, ®Ó lÊy vÒ ®Þa chØ IP cña m¸y ta sö dông ph¬ng thøc getHostAddress nh sau: import java.net.*; class GetHostAddress { public static void main(String[] args) { try { InetAddress me = InetAddress.getLocalHost(); String dottedQuad = me.getHostAddress(); System.out.println("My address is " + dottedQuad); } catch (UnknownHostException ex) { System.out.println("I'm sorry. I don't know my own address."); } } } KÕt qu¶ in ra nh sau:
  7. My address is 192.168.101.1 Ta cã thÓ lÊy vÒ ®Þa chØ IP t¬ng øng víi mét tªn miÒn bÊt kú kh«ng nhÊt thiÕt lµ m¸y côc bé nh trªn, ch¼ng h¹n b¹n cã thÓ lÊy vÒ ®i¹ chØ IP cña m¸y www.theht.edu.vn hoÆc www.microsoft.com nh sau: import java.net.*; class GetHostAddress1 { public static void main(String[] args) { try { InetAddress me = InetAddress.getByName("www.theht.edu.vn"); String dottedQuad = me.getHostAddress(); System.out.println("Address is " + dottedQuad); } catch (UnknownHostException ex) { System.out.println("I'm sorry. I don't know my own address."); } } } KÕt qu¶ in ra nh sau: Address is 192.168.101.1 VÝ dô 6: KiÓm tra xem hai ®Þa chØ tªn miÒn cã cïng mét ®Þa chØ IP hay kh«ng. ®Ó kiÓm tra ®iÒu nµy ta sö dông ph¬n thøc equals nh sau: import java.net.*; class Equal { public static void main(String args[]) { try { InetAddress add1 = InetAddress.getByName("www.theht.edu.vn"); InetAddress add2 = InetAddress.getByName("www.theht.com.vn"); if (add1.equals(add2)) { System.out.println("Hai dia chi nay co cung IP"); } else { System.out.println("Hai dia chi nay khac IP");
  8. } } catch (UnknownHostException ex) { System.out.println("Khong the tim thay host."); } } } KÕt qu¶ cho nh sau: Hai dia chi nay khac nhau VÝ dô 7: X©y dùng ch¬ng tr×n HostLookup t¬ng tù nh ch¬ng tr×nh NSLookup cña Windows, ch¬ng tr×nh nµy cã nhiÖm vô khi b¹n gâ vµo ®Þa chØ IP th× nã sÏ tr¶ vÒ ®Þa chØ tªn miÒn vµ ngîc lai: import java.net.*; import java.io.*; public class HostLookup { public static void main(String[] args) { if (args.length > 0) { // Su dung tham so dong lenh for (int i = 0; i < args.length; i++) { System.out.println(lookup(args[i])); } } else { BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); System.out.println( "Enter names and IP addresses.Enter \"exit\" or \"quit\" to quit."); try { while (true) { String host = in.readLine(); if (host.equalsIgnoreCase("exit") || host.equalsIgnoreCase("quit")) { break;
  9. } System.out.println(lookup(host)); } } catch (IOException ex) { System.err.println(ex); } } } private static String lookup(String host) { InetAddress node; try { node = InetAddress.getByName(host); } catch (UnknownHostException ex) { return "Cannot find host " + host; } if (isHostname(host)) { //Dia chi nay duoi dang ten mien return node.getHostAddress(); } else { // Dia chi nay duoi dang IP return node.getHostName(); } } //Hµm kiÓm tra xem ®Þa chØ host díi d¹ng tªn miÒn hay ®Þa chØ IP private static boolean isHostname(String host) { char[] ca = host.toCharArray(); for (int i = 0; i < ca.length; i++) { if (!Character.isDigit(ca[i])) { if (ca[i] != '.')return true; } }
  10. return false; } } 2. Líp URL vµ URI Líp URL lµ mét líp rÊt ®¬n gi¶n gióp b¹n trong viÖc ®Þnh vÞ vµ lÊy vÒ d÷ liÖu tõ m¹ng, mµ b¹n kh«ng cÇn ph¶i quan t©m ®Õn giao thøc ®îc sö dông, ®Þnh d¹ng cña d÷ liÖu hoÆc kh«ng cÇn quan t©m ®Õn c¸ch giao tiÕp víi m¸y chñ. T¹o ra mét URL Kh«ng gièng nh ®èi tîng InetAddress b¹n cã thÓ sö dông hµm t¹o cña líp URL ®Ó t¹o ra mét ®èi tîng URL míi. Cã s¸u hµm t¹o kh¸c nhau cña líp URL cho phÐp b¹n t¹o ra c¸c URL víi c¸c yªu cÇu kh¸c nhau. TÊt c¶ c¸c hµm t¹o nµy ®Òu nÐm ra ngo¹i lÖ MalformedURLException nÕu b¹n t¹o ra mét URL tõ mét giao thøc kh«ng ®îc hç trî hoÆc c¸c th«ng tin cung cÊp trong URL kh«ng chÝnh x¸c th× b¹n sÏ nhËn ®ù¬c mét ngo¹i lÖ MalformedURLException a) T¹o ra mét URL tõ mét x©u public URL(String url) throws MalformedURLException Gièng nh c¸c hµm t¹o kh¸c b¹n chØ cÇn dïng to¸n tö new vµ còng gièng c¸c hµm t¹o kh¸c cña líp nã nÐm ra ngo¹i lÖ MalformedURLException. VÝ dô 1: T¹o ra mét URL tõ mét x©u vµ b¾t ngo¹i lÖ sinh ra try { URL u = new URL("http://www.utehy.edu.vn/"); } catch (MalformedURLException ex) { System.err.println(ex); } VÝ dô 2: VÝ dô nµy t¹o ra mét sè URL vµ kiÓm tra xem giao thøc t¬ng øng víi c¸c URL cã ®îc hç trì trong virtual machine cña b¹n hay kh«ng /* Which protocols does a virtual machine support? */ import java.net.*;
  11. class ProtocolTester { public static void main(String[] args) { // hypertext transfer protocol testProtocol("http://www.adc.org"); // secure http testProtocol("https://www.amazon.com/exec/obidos/order2/"); // file transfer protocol testProtocol("ftp://metalab.unc.edu/pub/languages/java/javafaq/"); // Simple Mail Transfer Protocol testProtocol("mailto:elharo@metalab.unc.edu"); // telnet testProtocol("telnet://dibner.poly.edu/"); // local file access testProtocol("file:///etc/passwd"); // gopher testProtocol("gopher://gopher.anc.org.za/"); // Lightweight Directory Access Protocol testProtocol( "ldap://ldap.itd.umich.edu/o=University%20of%20Michigan,c=US? postalAddress"); // JAR testProtocol( "jar:http://cafeaulait.org/books/javaio/ioexamples/javaio.jar!" + "/com/macfaq/io/StreamCopier.class"); // NFS, Network File System
  12. testProtocol("nfs://utopia.poly.edu/usr/tmp/"); // a custom protocol for JDBC testProtocol("jdbc:mysql://luna.metalab.unc.edu:3306/NEWS"); // rmi, a custom protocol for remote method invocation testProtocol("rmi://metalab.unc.edu/RenderEngine"); // custom protocols for HotJava testProtocol("doc:/UsersGuide/release.html"); testProtocol("netdoc:/UsersGuide/release.html"); testProtocol("systemresource://www.adc.org/+/index.html"); testProtocol("verbatim:http://www.adc.org/"); } private static void testProtocol(String url) { try { URL u = new URL(url); System.out.println(u.getProtocol() + " is supported"); } catch (MalformedURLException ex) { String protocol = url.substring(0, url.indexOf(':')); System.out.println(protocol + " is not supported"); } } } KÕt qu¶ ch¹y trªn m¸y cña t«i nh sau: http is supported https is supported ftp is supported mailto is supported telnet is not supported file is supported gopher is supported ldap is not supported
  13. jar is supported nfs is not supported jdbc is not supported rmi is not supported doc is supported netdoc is supported systemresource is supported verbatim is supported b) T¹o ra mét URL tõ c¸c phÇn riªng lÎ Hµm t¹o nµy cho gåm ba phÇn riªng biÖt, chóng cho biÕt: Giao thøc, tªn m¸y chñ, tÖp tin mµ URL nµy sö dông. public URL(String protocol, String hostname, String file) throws MalformedURLException Hµm t¹o nµy sÏ tù ®éng ®Æt port lµ gi¸ trÞ mÆc ®Þnh, tuú theo giao thøc mµ b¹n chØ ®Þnh nã sÏ sö dông mµ gi¸ trÞ mÆc ®Þnh nµy lµ kh¸c nhau: VÝ dô nh : http th× port=80, ftp=23... VÝ dô: try { URL u = new URL("http", "www.microsoft.com", "/index.html"); } catch (MalformedURLException ex) { // All VMs should recognize http } §o¹n ch¬ng tr×nh trªn t¹o ra mét URL chØ ®Õn http://www.microsoft.com/index.html, cæng mÆc ®Þnh lµ 80 §Ó t¹o ra mét URL víi mét cæng chØ ®Þnh b¹n sö dông hµm t¹o sau: public URL(String protocol, String host, int port, String file) throws MalformedURLException VÝ dô: T¹o ra mét URL g¸n víi m¸y localhost trªn cæng 8080 try { URL u = new URL("http", "localhost", 8080, "/index.html"); }
  14. catch (MalformedURLException ex) { System.err.println(ex); } VÝ dô nµy t¹o ra mét URL trá ®Õn http://localhost: 8080/index.html c) T¹o ra mét URL tõ mét URL kh¸c Hµm t¹o nµy cho phÐp b¹n t¹o ra mét URL tõ mét URL kh¸c, có ph¸p nh sau: public URL(URL base, String relative) throws MalformedURLException VÝ dô: try { URL u1 = new URL("http://www.ibiblio.org/javafaq/index.html"); URL u2 = new URL (u1, "mailinglists.html"); } catch (MalformedURLException ex) { System.err.println(ex); } Trong vÝ dô nµy th× u1 ®ang trá ®Õn http://www.ibiblio.org/javafaq/index.html cßn u2 th× ®ang trá ®Õn http://www.ibiblio.org/javafaq/ mailinglists.html. Mét vµi ph¬ng thøc cña líp URL - public String getHost( ) tr¶ vÒ tªn cña m¸y chñ - public int getPort( ) tr¶ vÒ cæng ®îc sö dông - public int getDefaultPort( ) tr¶ vÒ cæng mÆc ®Þnh cña giao thøc ®îc sö dông. VÝ dô nh : http=80, email=25, ftp=23... - public String getFile( ) tr¶ vÒ tªn tÖp tin - public String getPath( ) // Java 1.3 tr¶ vÒ ®êng dÉn ®Õn file, ®êng dÉn nµy thêng lµ mét query string. - public String getRef( ), trong vÝ dô sau th× getRef sÏ tr¶ vÒ xtocid1902914 URL u = new URL( "http://www.ibiblio.org/javafaq/javafaq.html#xtocid1902914"); System.out.println("The fragment ID of " + u + " is " + u.getRef( ));
  15. - public String getQuery( ) // Java 1.3 tr¶ vÒ mét query string trong URL VÝ dô: Trong vÝ dô nµy th× getQuery sÏ tr¶ vÒ category=Piano URL u = new URL( "http://www.ibiblio.org/nywc/compositions.phtml?category=Piano"); System.out.println("The query string of " + u + " is " + u.getQuery( )); - public String getUserInfo( ) // Java 1.3 tr¶ vÒ user name - public String getAuthority( ) // Java 1.3 VÝ dô sau minh ho¹ c¸c ph¬ng thøc trªn import java.net.*; class URLSplitter { public static void main(String args[]) { try { URL u = new URL("http://java.sun.com"); System.out.println("The URL is " + u); System.out.println("The scheme is " + u.getProtocol()); System.out.println("The user info is " + u.getUserInfo()); String host = u.getHost(); if (host != null) { int atSign = host.indexOf('@'); if (atSign != -1) host = host.substring(atSign + 1); System.out.println("The host is " + host); } else { System.out.println("The host is null."); } System.out.println("The port is " + u.getPort()); System.out.println("The path is " + u.getPath()); System.out.println("The ref is " + u.getRef()); System.out.println("The query string is " + u.getQuery()); } // end try catch (MalformedURLException ex) { System.err.println("is not a URL I understand."); } System.out.println();
  16. } // end main } // end URLSplitter KÕt qu¶ ch¹y ch¬ng tr×nh nh sau: The URL is http://java.sun.com The scheme is http The user info is null The host is java.sun.com The port is -1 The path is The ref is null The query string is null c) NhËn vÒ d÷ liÖu tõ URL B¹n cã thÓ nhËn vÒ d÷ liÖu ®îc chØ ®Þnh trong URL b»ng c¸ch sö dông c¸ch ph¬n thøc sau: public InputStream openStream( ) throws IOException public URLConnection openConnection( ) throws IOException public URLConnection openConnection(Proxy proxy) throws IOException // 1.5 public Object getContent( ) throws IOException public Object getContent(Class[] classes) throws IOException // 1.3 - public final InputStream openStream( ) throws IOException Ph¬ng thøc nµy sÏ kÕt nèi ®Õn m¸y chñ vµ yªu cÇu lÊy vÒ mét InputStream g¾n víi tµi nguyªn ®îc chØ ®Þnh trong URL. VÝ dô sau lÊy vÒ néi dung cña trang web ®îc chØ ®Þnh vµ in ra mµn h×nh import java.net.*; import java.io.*; class SourceViewer { public static void main(String[] args) { try {
  17. //Open the URL for reading URL u = new URL("http://localhost:80/index.html"); InputStream in = u.openStream(); // buffer the input to increase performance in = new BufferedInputStream(in); // chain the InputStream to a Reader Reader r = new InputStreamReader(in); int c; while ( (c = r.read()) != -1) { System.out.print( (char) c); } } catch (MalformedURLException ex) { System.err.println(“is not a parseable URL"); } catch (IOException ex) { System.err.println(ex); } } // end main } // end SourceViewer KÕt qu¶ ch¹y nh sau: Web Posting Information Xin chµo c¸c b¹n - Ph¬ng thøc public URLConnection openConnection( ) throws IOException
  18. Ph¬ng thøc nµy më mét socket kÕt nèi ®Õn m¸y chñ. NÕu ph¬ng thøc nµy thÊt b¹i nã nÐm ra ngo¹i lÖ IOException. VÝ dô: try { URL u = new URL("http://www.jennicam.org/"); try { URLConnection uc = u.openConnection( ); InputStream in = uc.getInputStream( ); // read from the connection... } // end try catch (IOException ex) { System.err.println(ex); } } // end try catch (MalformedURLException ex) { System.err.println(ex); } Trong java 1.5 cßn mét ph¬ng thøc ®îc n¹p chång nh sau: public URLConnection openConnection(Proxy proxy) throws IOException Ph¬ng thøc nµy rÊt h÷u dông khi trong m¹ng cña b¹n cã sö dông proxy - Ph¬ng thøc public final Object getContent( ) throws IOException VÝ dô: import java.net.*; import java.io.*; class ContentGetter { public static void main(String[] args) { //Open the URL for reading try { URL u = new URL("http://localhost:80/index.html"); try { Object o = u.getContent();
  19. System.out.println("I got a " + o.getClass().getName()); } // end try catch (IOException ex) { System.err.println(ex); } } // end try catch (MalformedURLException ex) { System.err.println("is not a parseable URL"); } } // end main } // end ContentGetter KÕt qu¶ ch¹y nh sau: I got a sun.net.www.protocol.http.HttpURLConnection$HttpInputStream NÕu thay URL u = new URL("http://localhost:80/index.html"); bëi URL u = new URL("http://localhost:80/print.gif"); kÕt qu¶ thu ®îc nh sau: I got a sun.awt.image.URLImageSource 3. Líp Socket Líp nµy ®îc dïng cho c¶ m¸y chñ vµ m¸y kh¸ch. §èi víi m¸y kh¸ch nã thêng dïng ®Ó kÕt nèi ®Õn m¸y chñ, cßn ®èi víi m¸y chñ nã thêng dïng ®Ó ®¸p l¹i kÕt nèi tõ m¸y kh¸ch. Th«ng thêng ta t¹o ra mét Socket b»ng c¸ch sö dông hµm t¹o cña líp Socket. Sau ®©y lµ mét sè hµm t¹o cña líp Socket. 3.1 Mét sè hµm t¹o cña líp Socket a) public Socket(String host, int port) throws UnknownHostException, IOException Ta thêng sö dông hµm t¹o nµy ®Ó kÕt nèi ®Õn m¸y chñ. Trong hµm t¹o nµy tªn cña m¸y lµ mét x©u ký tù, tªn cña m¸y chñ cã thÓ lµ tªn mתn hoÆc ®Þa chØ IP. NÕu nh kh«ng tån t¹i m¸y nµy th× nã sÏ nÐm ra mét ngo¹i lÖ UnknownHostException. NÕu Socket kh«ng thÓ më v× bÊt cø lý do nµo th× nã nÐm ra ngo¹i lÖ IOException. VÝ dô: KÕt nèi ®Õn web server www.theht.edu.vn try { Socket toTheht= new Socket("www.theht.edu.vn", 80);
  20. //~ Socket toTheht= new Socket("162.163.10.5", 80); // send and receive data... } catch (UnknownHostException ex) { System.err.println(ex); } catch (IOException ex) { System.err.println(ex); } - public Socket(InetAddress host, int port) throws IOException Ta thêng sö dông hµm t¹o nµy ®Ó kÕt nèi ®Õn m¸y chñ khi biÕt mét InetAddress g¾n víi nã. VÝ dô sau kÕt còng kÕt nèi ®Õn m¸y chñ www.theht.edu.vn trªn cæng 80 try { InetAddress theht = InetAddress.getByName("www.theht.edu.vn"); //~ InetAddress theht = InetAddress.getByName("162.135.10.5"); Socket thehtSocket = new Socket(theht , 80); // send and receive data... } catch (UnknownHostException ex) { System.err.println(ex); } catch (IOException ex) { System.err.println(ex); } - public Socket(String host, int port, InetAddress interface, int localPort) throws IOException, UnknownHostException NÕu m¸y cña b¹n cã nhiÒu bé giao tiÕp m¹ng th× khi kÕt nèi ®Õn m¸y chñ ta cÇn chØ ra kÕt nèi ®îc thiÕt lËp th«ng qua giao diÖn m¹ng nµo. NÕu tham sè port nhËn gi¸ trÞ 0 thi java runtime sÏ chän ngÉu nhiªn mét cæng nµo ®ã cha ®îc sö dông trong kho¶ng 1024 65535. VÝ dô: try {
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

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