Connection-oriented Java-klassen
Sockets Er zijn twee belangrijke modaliteiten van de operatie: connectie-georiënteerd en verbindingsloze. Connection-oriented sockets werkt als een telefoon, moeten ze een verbinding tot stand en een gesprek. Al de dingen die in de volgorde van aankomst en vertrek Om op hetzelfde moment. verbindingloze sockets werken als een e-mail levering, zonder enige garantie, meerdere berichten kan de volgorde van aankomst en vertrek, de volgorde is anders.
Op het einde, in welke modus het programma Mail is om te beslissen. Als de betrouwbaarheid belangrijker is, met een connectie-georiënteerd operaties beter zal zijn. Zoals file servers hun gegevens nauwkeurigheid en ordelijkheid vereisen. Als verlies van enkele gegevens , het systeem zal verliezen effectiviteit. Sommige servers, zoals intermitterend zenden sommige gegevens te blokkeren. Als de gegevens verloren gaan als de server niet wil nogmaals opnieuw uitgegeven. omdat toen de gegevens komt, kan worden achterhaald . aan de nauwkeurigheid van de gegevens te waarborgen en vereisen extra geheugen verbruik operaties zouden de extra kosten te verminderen van het systeem respons.
Verbindingsloos datagram protocol operationeel gebruik. Een datagram is een zelfstandige eenheid, die alle informatie bevat de levering. Beschouw het als een envelop is, heeft de bestemming aan te pakken en te verzenden inhoud. Deze modus Het stopcontact is niet nodig om een einde van de aansluiting aan te sluiten, het is gewoon stemmen de gerapporteerde gegevens. verbindingloze bediening is snel en efficiënt, maar de gebrekkige beveiliging van de gegevens.
Connectie-georiënteerd bedrijf met behulp van TCP-protocol. Een socket in deze modus stuurt gegevens naar de bestemming en het stopcontact voordat je een verbinding. Zodra de verbinding tot stand is gebracht, stopcontacten, kunt u een stream-interface: open - gebruik lezen - schrijven - te sluiten. Alle informatie zal worden toegezonden aan de andere kant van dezelfde orde is ontvangen. connectie-georiënteerd werking van de operatie dan die zonder verbindingen minder efficiënt, maar de gegevens beter te beveiligen.
Zon is een aanhanger van de opbouw van netwerken, dus om Java-sockets ondersteunen is niet verwonderlijk. In feite, Java vermindert de moeilijkheid van de oprichting van een sockets programma. Iedere transfer mode zijn verpakt in een andere klasse. Connection-oriented De klasse zal onze eerste discussie.
Connection-oriented in de Java-klasse heeft twee vormen, namelijk de client en server side. Dit deel van de cliënt is het gemakkelijkste, dus laten we bespreken.
9.1 toont een eenvoudige lijst met client-programma's. Stuurt een verzoek naar een server, haal een HTML-document, en de weergave op de console.
9.1 Een eenvoudige client socket
invoer java.io. *;
invoer java.net .*;
/ Bin / boot / dev / etc / home / lib / lost + found / media / misc / mnt / net / opt / proc / root / sbin / selinux / srv / sys / tmp / U01 / usr / var / vmware
back-up bin bin_old conf config crawler.tar.gz crawler_bin.tar.gz gegevens eshow eshow_sitemap.html generate.sh google.html google.html.md5 log maint nieuws: 10 nieuws: 11 Nieuws: 12 nieuws: 13 nieuwsartikelen: 14 nieuws: 15 nieuws: 16 nieuws: 17 nieuws: 18 nieuws: 2 nieuws: 3 nieuws: 4 nieuws: 5 Nieuws: 6 nieuws: 7 nieuws: 8 Nieuws: 9 outboundLinksMgr.sql zaden sitemap.html svn taken xml2dict tmp-2008.6-tar. gz xml2dict-alleen-lezen een eenvoudige HTML-pagina van de server-programma in ruil voor een
back-up bin bin_old conf config crawler.tar.gz crawler_bin.tar.gz gegevens eshow eshow_sitemap.html generate.sh google.html google.html.md5 log maint nieuws: 10 nieuws: 11 Nieuws: 12 nieuws: 13 nieuwsartikelen: 14 nieuws: 15 nieuws: 16 nieuws: 17 nieuws: 18 nieuws: 2 nieuws: 3 nieuws: 4 nieuws: 5 Nieuws: 6 nieuws: 7 nieuws: 8 Nieuws: 9 outboundLinksMgr.sql zaden sitemap.html svn taken xml2dict tmp-2008.6-tar. gz xml2dict-alleen-lezen Opmerking: Merlin is de naam van de lokale machine
backup / bin / bin_old / conf / data / eshow / log / maint / Nieuws: 10 / news: 11 / nieuws: 12 / news: 13 / nieuws: 14 / nieuws: 15 / nieuws: 16 / nieuws: 17 / nieuws: 18 / news: 2 / nieuws: 3 / Nieuws: 4 / news: 5 / news: 6 / news: 7 / Nieuws: 8 / news: 9 / zaden / svn / taken / tmp / xml2dict-alleen-lezen /
openbare les SimpleWebClient (
public static void main (String args [])
(
proberen
(
/ / Open een client socket verbinding
Socket clientSocket1 = nieuwe Socket ("Merlin", 80);
System.out.println ("Client1:" + clientSocket1);
/ / Haal een webpagina
getPage (clientSocket1);
)
catch (UnknownHostException UHE)
(
System.out.println ("UnknownHostException:" + UHE);
)
catch (IOException OIE)
(
System.err.println ("IOException:" + OIE);
)
)
/ Bin / boot / dev / etc / home / lib / lost + found / media / misc / mnt / net / opt / proc / root / sbin / selinux / srv / sys / tmp / U01 / usr / var / vmware
* Door de oprichting van de verbinding een pagina opvraagt, weer te geven antwoord en sluit het stopcontact
backup / bin / bin_old / conf / data / eshow / log / maint / Nieuws: 10 / news: 11 / nieuws: 12 / news: 13 / nieuws: 14 / nieuws: 15 / nieuws: 16 / nieuws: 17 / nieuws: 18 / news: 2 / nieuws: 3 / Nieuws: 4 / news: 5 / news: 6 / news: 7 / Nieuws: 8 / news: 9 / zaden / svn / taken / tmp / xml2dict-alleen-lezen /
public static void getPage (Socket clientSocket)
(
proberen
(
/ / Noodzaak om input en output stromen
DataOutputStream uitgaande = new DataOutputStream (
clientSocket.getOutputStream ());
DataInputStream inkomende = new DataInputStream (
clientSocket.getInputStream ());
/ / HTTP-verzoek naar de server
outbound.writeBytes ("GET / HTTP/1.0rnrn");
/ / Lees reactie
String responseLine;
while ((= responseLine inbound.readLine ())! = null)
(
/ / Plaats elke regel die wordt weergegeven
System.out.println (responseLine);
if (responseLine.indexOf ("")! = -1)
te breken;
)
/ / Clear
outbound.close ();
inbound.close ();
clientSocket.close ();
)
catch (IOException OIE)
(
System.out.println ("IOException:" + OIE);
)
)
)
Herinnert aan een van de client naar een server luisterende socket is een verbinding probleem. Client aansluitingen zijn gemaakt met de Socket klasse. Het volgende programma heeft een client-aansluiting en verbinding met een host:
Socket clientSocket = nieuwe Socket ("Merlin", 80);
Het eerste argument is dat u verbinding wilt maken met de hostnaam en de tweede parameter is het poortnummer. Een hostnaam specificeert de naam van het doel. Poortnummer opgegeven voor de toepassing door die te ontvangen. In ons geval, moet worden gespecificeerd 80 want het is de standaard HTTP-protocol poort. De andere bekende havens zijn opgenomen in tabel 9.1, zie:
Bekende eindproducten:
echo 7
overdag 13
overdag 13
ftp 21
telnet 23
smtp 25
79 vinger
http 80
pop3 110
Omdat de Socket-klasse is een connectie-georiënteerd, biedt het een stream interface biedt voor lezen en schrijven. Java.io pakket in de klas kan worden gebruikt om een contactdoos toegang:
DataOutputStream uitgaande = new DataOutputStream (
clientSocket.getOutputStream ());
DataInputStream inkomende = nieuwe DataInputStream (clientSocket.getInputStream ()
);
Zodra flow werd opgericht, de algemene stroom van operaties kunnen worden gedaan:
outbound.writeBytes ("GET / HTTP/1.0rnrn);
String responseLine;
while ((= responseLine inbound.readLine ())! = null)
(
System.out.println (responseLine);
)
Kleine programma te verzoeken meer dan een webpagina en het wordt weergegeven. Wanneer het proces voltooid is, moet de verbinding worden afgesloten.
outbound.close ();
inbound.close ();
clientSocket.close ();
Merk op dat stroom moet eerst sluit de socket. Al het stopcontact stream moet worden gesloten voordat het sluiten van de socket. Dit kleine programma zeer eenvoudig, maar alle client-programma's moeten voldoen aan de volgende stappen eerst:
1. Om een client socket verbinding.
2. Get socket lezen en schrijven de stream.
3. Flow gebruiken.
4. Sluiten stream.
5. Sluiten stopcontact.
Met behulp van een server-side bus is een beetje ingewikkeld, maar zoals hieronder vermeld.