Første |
|
Java i netværk serie, Planche nr. 32 |
![]() |
Udskrift af : Java i netværk |
Hvilke muligheder findes
Appearance: | <APPLET CODE=string HEIGHT=n
WIDTH=n > </APPLET> |
---|---|
Attributes: | CODEBASE=URL ,
CODE=string , NAME=string ,
ALT=string , ALIGN=left|right|top|middle|bottom,
HEIGHT=n , WIDTH=n ,
HSPACE=n , VSPACE=n |
CODEBASE er en URL, der kan være forskellig fra den URL, hvor HTML-siden (med APPLET-tag) hentes fra.
Applet klassen har to getImage()
metoder:
public Image getImage(URL url)
public Image getImage(URL url, String name)
OBS!
Only applets can use the Applet getImage()
methods.
Moreover, the Applet getImage()
methods
don't work until the applet has a full context (AppletContext).
For this reason, these methods do not work
if called in a constructor
or in a statement that declares an instance variable.
You should instead call getImage()
from a method
such as init()
.
public abstract Image getImage(URL url)
public abstract Image getImage(String filename)
OBS!
You can get a Toolkit object either by invoking Toolkit's
getDefaultToolkit()
class method
or by invoking the Component getToolkit()
instance method.
The Component getToolkit()
method
returns the toolkit that was used (or will be used)
to implement the Component.
PROTOKOL://HOSTNAME:PORTNR/FILNAVN#REFERENCEHvor
PROTOKOL | Protokolbetegnelse: http, ftp, file ... |
---|---|
HOSTNAME | Internet navn eller IP-adresse på maskinen, hvor resourcen findes. |
FILNAVN | Filnavn og -sti (Kan indeholde /). |
PORTNR | Portnummer (udelades ofte). |
REFERENCE | En reference inden for en fil (e.l). |
URL urlobj = new URL("http://www.blanet.dk/"); URL-konstruktør URL (String fuldURL);Man kan oprette en relativ URL med en and konstruktør
URL relobj = new URL(urlobj, "index.html"); Generel URL-konstruktør URL (URL baseobj, String relnavn);Andre konstruktører:
URL (String protokol, String hostnavn, String filnavn); URL (String protokol, String hostnavn, int portnr, String filnavn);
Beskyt koden med try
og catch
:
try { URL myURL = new URL(. . .) } catch (MalformedURLException e) { . . . // Kode til undtagelseshåndtering . . . }
import java.net.*; import java.io.*; public class ParseURL { public static void main(String[] args) throws Exception { URL aURL = new URL("http://www.blanet.dk:80/kursus/java/links.html#udpak"); System.out.println("protocol = " + aURL.getProtocol()); System.out.println("host = " + aURL.getHost()); System.out.println("filename = " + aURL.getFile()); System.out.println("port = " + aURL.getPort()); System.out.println("ref = " + aURL.getRef()); } }
Virker ikke umiddelbart, hvis der er proxy imellem dig og blanet.dkimport java.net.*; import java.io.*; public class URLlaeser { public static void main(String[] args) throws Exception { URL blanet = new URL("http://www.blanet.dk/"); BufferedReader in = new BufferedReader( new InputStreamReader( blanet.openStream())); String inputLine; while ((inputLine = in.readLine()) != null) System.out.println(inputLine); in.close(); } }
MEN.... Hvis proxyadressen er 192.66.116.254 og proxyport 8080, så kan man køre via proxy:
java -Dhttp.proxyHost=192.66.116.254 -Dhttp.proxyPort=8080 URLlaeser
Prøv dette program (Opgave 7)
Metoden returnere et objekt at typen URLconnection - et forbindelsesobjekttry { URL yahoo = new URL("http://www.blanet.dk/"); yahoo.openConnection(); } catch (MalformedURLException e) { // new URL() failed . . . } catch (IOException e) { // openConnection() failed . . . }
Husk at fange undtagelserne...
Fremhævelse viser forskel fra direkte læsning fra URL.import java.net.*; import java.io.*; public class URLConnectionReader { public static void main(String[] args) throws Exception { URL blanet = new URL("http://www.blanet.dk/"); URLConnection bc = blanet.openConnection(); BufferedReader in = new BufferedReader( new InputStreamReader( bc.getInputStream())); String inputLine; while ((inputLine = in.readLine()) != null) System.out.println(inputLine); in.close(); } }
HVIS URL'en kan modtage
Prøv dette eksempel!import java.io.*; import java.net.*; public class Reverse { public static void main(String[] args) throws Exception { if (args.length != 1) { System.err.println("Usage: java Reverse string_to_reverse"); System.exit(1); } String stringToReverse = URLEncoder.encode(args[0]); URL url = new URL("http://www.blanet.dk/cgi-bin/baglaens"); URLConnection connection = url.openConnection(); connection.setDoOutput(true); PrintWriter out = new PrintWriter(connection.getOutputStream()); out.println("string=" + stringToReverse); out.close(); BufferedReader in = new BufferedReader( new InputStreamReader( connection.getInputStream())); String inputLine; while ((inputLine = in.readLine()) != null) System.out.println(inputLine); in.close(); } }
(Ret evt. URL til og husk hvis proxy...)
java -Dhttp.proxyHost=192.66.116.254 -Dhttp.proxyPort=8080 Reverse "Bagvendt?"
Endepunktet er bundet til et portnummer i en TCP-forbindelse.
Forbindelsen er platformsuafhængig.
Det gennemgås efterfølgende.import java.io.*; import java.net.*; public class EchoClient { public static void main(String[] args) throws IOException { Socket echoSocket = null; PrintWriter out = null; BufferedReader in = null; try { echoSocket = new Socket("taranis", 7); out = new PrintWriter(echoSocket.getOutputStream(), true); in = new BufferedReader(new InputStreamReader(echoSocket.getInputStream())); } catch (UnknownHostException e) { System.err.println("Don't know about host: taranis."); System.exit(1); } catch (IOException e) { System.err.println("Couldn't get I/O for the connection to: taranis."); System.exit(1); } BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in)); String userInput; while ((userInput = stdIn.readLine()) != null) { out.println(userInput); System.out.println("echo: " + in.readLine()); } out.close(); in.close(); stdIn.close(); echoSocket.close(); } }
Bemærk - servicen ECHO (port 7) er nu efterhånden lukket på grund af hensyn til sikkerhed på internettet.
(1) Åbner en socket-forbindelse til port 7 på maskinen "taranis".echoSocket = new Socket("taranis", 7); // (1) out = new PrintWriter(echoSocket.getOutputStream(), true); // (2) in = new BufferedReader(new InputStreamReader( echoSocket.getInputStream())); // (3)
(2) Tager uddata-delen fra socket-forbindelsen og lader den læse fra PrintWriter.
(3) Tager inddata-delen og forbinder den til programmets inddatastrøm
(2) er data TIL serveren, (3) data FRA serveren...
DenneBufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in)); String userInput; while ((userInput = stdIn.readLine()) != null) { out.println(userInput); System.out.println("echo: " + in.readLine()); }
while
-struktur læser fra konsol (stdIn) indtil brugeren trykker
end-of-input-tegn (CTRL/C). Samtidig læser sidste linie fra socket-forbindelsen og
skriver ekko-linien ud.
Lukker forbindelserne ned på en pæn måde.out.close(); in.close(); stdIn.close(); echoSocket.close();
I dette tilfælde er det port 4444try { serverSocket = new ServerSocket(4444); } catch (IOException e) { System.out.println("Could not listen on port: 4444"); System.exit(-1); }
accept-metoden returnerer et Socket-objekt, når en klient forbinder sig...Socket clientSocket = null; try { clientSocket = serverSocket.accept(); } catch (IOException e) { System.out.println("Accept failed: 4444"); System.exit(-1); }
Fremhævet er initialisering af kommunikationen til klienten. Resten er selve kommunikationen. Protokollen i dette eksempel, KnockKnockProtokol er implementeret i en separat klasse.PrintWriter out = new PrintWriter( clientSocket.getOutputStream(), true); BufferedReader in = new BufferedReader( new BufferedOutputStream( clientSocket.getInputStream())), String inputLine, outputLine; // initiate conversation with client KnockKnockProtocol kkp = new KnockKnockProtocol(); outputLine = kkp.processInput(null); out.println(outputLine); while ((inputLine - in.readLine()) != null) { outputLine = kkp.processInput(inputLine); out.println(outputLine); if outputLine.equals("Bye.")) break; }
out.close(); in.close(); clientSocket.close(); serverSocket.close();