Socket og ServerSocket



Like dokumenter
Kapittel 9. Distribusjon. Fjernbruker. Tjenermaskin LAN WAN. Nærbruker. Figur 9-1: En enkel klient/tjener distribusjon

Algoritmer og datastrukturer Kapittel 11 - Delkapittel 11.2

UNIVERSITETET I OSLO

LITT OM OPPLEGGET. INF1000 EKSTRATILBUD Stoff fra uke September 2012 Siri Moe Jensen EKSEMPLER

TOD063 Datastrukturer og algoritmer

Program socket server

Tittel Objektorientert systemutvikling 1. Eksamenstid, fra-til Ant. oppgaver 6

HØGSKOLEN I SØR-TRØNDELAG

Side 1 av 11, prosesser, tråder, synkronisering, V. Holmstedt, HiO 2006

TDT4100 Objektorientert programmering

Argumenter fra kommandolinjen

INF 1010, vår 2005 Løsningsforslag uke 11

Introduksjon til objektorientert. programmering. Hva skjedde ~1967? Lokale (og globale) helter. Grunnkurs i objektorientert.

Repetisjon. INF gruppe 13

Løsningsforslag Test 2

OPPGAVE 5b og 8b Java Kode

INF1010 våren 2017 Onsdag 25. januar. Litt om unntak i Java

Hva er verdien til variabelen j etter at følgende kode er utført? int i, j; i = 5; j = 10; while ( i < j ) { i = i + 2; j = j - 1; }

LOVER OG REGLER. For. Nedre Eiker Pistolklubb

import java.io.*; import java.util.*; import javagently.text;

/** * */ public Aktivitet(String navn, String krop, Objekt objekt, Model model) { if(funk.od) System.out.println(" - " + navn + " : " + krop);

(MVC - Model, View, Control)

Leksjon 3. Kontrollstrukturer

INF1010 våren 2019 Onsdag 30. januar. Mer om unntak i Java (med litt repetisjon av I/O først)

Objektorientert programmering med Java ISBN

Del 3: Evaluere uttrykk

GUI («Graphical User Interface») del 2

Eksamen i emnet INF100 Grunnkurs i programmering (Programmering I) Løsningsforslag

HØGSKOLEN I SØR-TRØNDELAG

I denne oppgaven blir du introdusert for programmeringsspråket JavaScript. Du skal gjøre den klassiske oppgaven Hei verden, med en katt.

Litt om pakker og mest om data inn og ut

EKSAMEN. Programvareutvikling. INNFØRING MED PENN, evt. trykkblyant som gir gjennomslag

Program brusautomat Eksempel på en tilstandsmaskin

Gr.4. Socket programmering. Gr.4. Innlevering LAB 4. Gruppe 4. oppgaver

Tre måter å lese fra terminal. Java 4. Eksempel. Formatert utskrift til skjerm

Hentet fra Suns Totorial:

"behrozm" Oppsummering - programskisse for traversering av en graf (dybde først) Forelesning i INF februar 2009

"Nelsons kaffebutikk"

IN Notat om I/O i Java

Fra Python til Java, del 2

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring AITeL

Lese fra fil. INF1000 : Forelesning 5. Eksempel. De vanligste lesemetodene. Metoder:

Sortering med tråder - Quicksort

INF1010, 22. mai Prøveeksamen (Eksamen 12. juni 2012) Stein Gjessing Inst. for Informatikk Universitetet i Oslo

Dagens tema: 12 gode råd for en kompilatorskriver. Sjekking av navn. Lagring av navn. Hvordan finne et navn?

Eksport og innsending

Eksamen i Internetteknologi Fagkode: ITE1526

Jentetreff INF1000 Debugging i Java

3 emner i dag! INF1000 Uke 5. Objekter og pekere. null. Litt om objekter, pekere og null Filer og easyio Litt mer om tekster

Forkurs INF1010. Dag 1. Andreas Færøvig Olsen Tuva Kristine Thoresen

INF1010 Eksamenstips. Løsningsforslag prøveeksamen del 1.

IN1010. Fra Python til Java. En introduksjon til programmeringsspråkenes verden Dag Langmyhr

TDT4100 Objektorientert programmering

Fra Python til Java. En introduksjon til programmeringsspråkenes verden. Dag Langmyhr

INF2100. Oppgaver 26. september til 1. oktober 2007

OPPGAVE 1 OBLIGATORISKE OPPGAVER (OBLIG 1) (1) Uten å selv implementere og kjøre koden under, hva skriver koden ut til konsollen?

static int ant_steiner; //antall steiner static int teller2 = 0; //teller for printing til Thread^ murer; //murertråden

Forelesningsquiz. Forelesning inf Java 5. Sett dere to (eller tre) sammen og besvar de fire spørsmålene på utdelt ark. Tid: 15 min.

IN 211 Programmeringsspråk. Java. på 20 enkle ark. spesielt for de som kan. Simula. (og gjerne litt C) Ark 1 av 20

Videregående programmering 6

INF2100. Oppgaver 23. og 24. september 2010

Fra administrasjonen: Riitta Hellman (ikke ved sak 04/6/5) Grethe Strand-Pedersen (ikke ved sak 04/6/5), referent

IN1010. Fra Python til Java. En introduksjon til programmeringsspråkenes verden Dag Langmyhr

Gjennomgang prøveeksamen oppgave 1, 2, 4, 5, 7

Programmeringsspråk for nybegynnere. Krav til språket. Krav til språket. Krav til språket

SMART hus via nettleseren

Løsningsforslag ukeoppg. 9: okt (INF Høst 2011)

EKSAMEN. TILLATTE HJELPEMIDLER: Alle trykte og skrevne. INNFØRING MED PENN, evt. trykkblyant som gir gjennomslag

La oss begynne med en repetisjon av hva som skjer når du kjører Javaprogrammet

Til aksjonærer i Bjørge ASA INNKALLING TIL EKSTRAORDINÆR GENERALFORSAMLING BJØRGE ASA

INF1010 våren 2018 tirsdag 23. januar

INF1010. Grensesnittet Comparable<T>

INF1010 våren Arv og subklasser - del 2

import java.util.arraylist;

UNIVERSITETET I OSLO

Algoritmer og datastrukturer Vedlegg A.4 Filbehandling på char-nivå

DDS-CAD 7 INSTALLASJON AV NETTVERKSLÅS. DATA DESIGN SYSTEM ASA Øksnevad Næringspark, 4353 Klepp st., fax , tel.: , e-post: dds@dds.

Huldt & Lillevik Lønn og Personal - System 4. Installasjon. Microsoft SQL 2005 Express. Aditro HRM AS

INF1010 Arv. Marit Nybakken 2. februar 2004

INF2100. Oppgaver uke 40 og

I dag. Rep: Oppsummering - variabler. Rep: Datatyper. INF1000 (Uke 3) Mer om uttrykk, terminal I/O, forgreninger

Dagens tema: Mer av det dere trenger til del 1

IN105-javaNelson-2. array, evt. flere dimensjoner. Institutt for informatikk Jens Kaasbøll sept En funksjon om gangen En klasse om gangen

INF Notat om I/O i Java

Synkronisering I. Kapittel 6. Tråd A. ferdig. t.varsle() u.vente() Tråd B. ferdig. tid

Hvordan skrive Flok og Flass kode? I mange tilfelle er det svært enkelt:

Oblig 4 (av 4) INF1000, høsten 2012 Værdata, leveres innen 9. nov. kl

Projeksjoner av vektorer Analyse av værdata

Synkronisering II. Kapittel 7. Betingelse oppfylt (0) liste. tråd-deskriptor. venteliste. tråd-deskriptor. tråd-deskriptor.

Ta inn og ut av 2D-array. Java 6. Liste over ulike verdier i 2D-array. Det ferdige programmet. Vi skal lage et program som illustrerer hvordan man

Tilstandsmaskiner med UML og Java

Avdeling for ingeniørutdanning Institutt for teknologi

Oppgave 3: Binær representasjon

Rekursjon. (Big Java kapittel 13) Fra Urban dictionary: recursion see recursion. IN1010 uke 8 våren Dag Langmyhr

INF Notater. Veronika Heimsbakk 10. juni 2012

Mer objektorientert programmering

IN2010: Algoritmer og Datastrukturer Series 2

Algoritmer og datastrukturer A.1 Filbehandling på bit-nivå

INF2100. Oppgaver 9. oktober 2012 C 100 X 10

Rekursjon. (Big Java kapittel 13) Fra Urban dictionary: recursion see recursion. IN1010 uke 8 våren Dag Langmyhr

Transkript:

Side 1 av 5, socket og klient-tjener, V. Holmstedt, HiO 2006 Dette dokumentet er revidert den 29.8.2006, kl:12:30. Det er foretatt rettelser i begge versjoner av klassen A_Server. Socket og ServerSocket Socket og ServerSocket brukes i programmering i nettverk. Serverprogrammer er programmer som skal kunne kontaktes av andre. Clientprogrammer er programmer som skal kunne kontakte serverprogrammer. Serverprogrammer bruker både ServerSocket og Socket. Clientprogrammer bruker bare Socket. En server kalles på norsk ofte en tjener. En client kalles på norsk ofte en klient. Grunnleggende server Det er enkelt å bygge en konfigurasjon med server og client i Java. Minste konfigurasjon Den minste konfigurasjonen vises her. Den består av to deler. Den ene delen er sammensatt av to klasser som kjøres som ett program på en servermaskin. Den andre delen er klassen Client, som kjører på en klientmaskin. I denne sammenhengen kan maskin godt bety for eksempel en instans av cmd i Windows XP. Med to slike instanser kan altså både disse og de senere eksemplene testes på en og samme fysiske maskin. public class A_Server { ServerSocket servsock = new ServerSocket(22003); Socket s = servsock.accept(); new A_ClientThread(s).start(); catch (IOException e) { Denne koden registrerer seg som server og vil ha melding når klienter henvender seg til maskinen med port 22003 som argument. Metoden accept blokkerer til en klient henvender seg. En klienthenvendelse fører til at accept konstruerer en Socket som representerer klienten på servermaskinen. Klienttråden kan enkelt skrives slik: public class A_ClientThread extends Thread { Socket s; public A_ClientThread(Socket s) {

Side 2 av 5, socket og klient-tjener, V. Holmstedt, HiO 2006 this.s = s; public void run() { System.out.println("Client ble vekket av "+s); Begge disse klassene danner et program som kjøres på serveren. Her brukes socket-objektet bare til å skrive ut informasjon om den fysiske klienten. Klienter for denne serveren kan kjøre i et vilkårlig antall på mange ulike maskiner. De har det felles at de kan gjøre henvendelser over nettverket til klassen A_Server. En klient som kan gjøre dette, kan enkelt skrives slik: public class Client { Socket socket = new Socket("128.39.117.131",22003); catch (Exception e) { Testing av dette kan utføres på samme maskin, eller på to eller flere ulike maskiner. Adressen til maskinen og portnummeret som brukes må regulereres, slik at verdiene stemmer med det miljøet programmet testes i. Ved pakkeorientert utvikling i Java kan programmene startes slik: java pakke.entrypoint Ved bruk av Eclipse for Windows XP kan du finne prosjektets mappeadresse ved å klikke på Project-Properties og kopiere Location. Denne adressen kan du lime inn med høyre museklikk i cmd-instansen. Dersom du for eksempel vil starte Client som har sine.class-filer plassert i mappen bin, blir miljøet for oppstart omtrent slik: c:\>documents and Settings\brukernavn\workspace\test\bin>java pakke.client Det lar seg også gjøre å kjøre testene i Eclipse, men da bør output basere seg på grafiske komponenter, siden det er bare ett konsoll. Utveksling av data For en server er det vanligvis påkrevet at den vender tilbake til lyttetilstand etter å ha startet en klienttråd. På denne måten vil serveren kunne betjene mange klienter på en gang. Serveren kan definere en uendelig løkke for å få til dette:

Side 3 av 5, socket og klient-tjener, V. Holmstedt, HiO 2006 public class A_Server { ServerSocket servsock = new ServerSocket(22003); while (true) { Socket s = servsock.accept(); new A_ClientThread(s).start(); catch (IOException e) { Løkken lar seg avbryte med CTRL+C. Klienttråden utnytter nå socket-objektet til å skaffe seg en inputstrøm fra klienten. public class A_ClientThread extends Thread { Socket socket; public A_ClientThread(Socket s) { this.socket = s; public void run() { System.out.print("Client ble vekket av "+socket); System.out.println(" med følgende melding:"); System.out.println("["+melding()+"]"); private String melding() { String s = ""; InputStream in = socket.getinputstream(); BufferedReader br = new BufferedReader(new InputStreamReader(in)); String l = null; while ((l=br.readline())!=null) { s += l; catch (IOException e) { e.printstacktrace(); return s; Klienten kan nå sende meldinger til serveren. Den tilsvarende klienttråden på serversmaskinen gjentar meldingen. public class Client {

Side 4 av 5, socket og klient-tjener, V. Holmstedt, HiO 2006 Socket socket = new Socket("128.39.117.131",22003); OutputStream out = socket.getoutputstream(); PrintWriter pw = new PrintWriter(out); pw.print("hei på deg, hilsen en klient!"); pw.close(); catch (Exception e) { Dette eksemplet har vist at klienten kan sende data til serveren, og at serveren kan stå og vente på et uendelig antall klienthenvendelser av samme type. Vedvarende forbindelse og protokoll Klient-tjener-systemet kan også programmeres til å vedlikeholde forbindelsen til en klient basert på en protokoll. I det neste eksemplet sender serveren nye tilfeldige tall til klienten, helt til klienten sender STOP. Klassen A_Server er uendret. Klassen A_ClientThread er endret. Den sender nå tallverdier, i string-format, til klienten, og venter på svar. Hvis svaret er STOP, brukes break til å avbryte den uendelige løkken. public class A_ClientThread extends Thread { Socket socket; public A_ClientThread(Socket s) { this.socket = s; PrintWriter pw; BufferedReader br; public void run() { InputStream in = socket.getinputstream(); OutputStream out = socket.getoutputstream(); pw = new PrintWriter(out); br = new BufferedReader(new InputStreamReader(in)); while (true) { sendnumbertoclient(); if (response().equals("stop")) break; catch (Exception e) { private String response() throws Exception { String l = br.readline(); System.out.println(socket.getPort()+" svarte "+l); return l;

Side 5 av 5, socket og klient-tjener, V. Holmstedt, HiO 2006 int n = 1000; private void sendnumbertoclient() { pw.println("" + n++); pw.flush(); sleep(1000); catch (Exception e) { Klienten starter med å lytte etter tall som skal skrives ut. Deretter er det tilfeldigheter som avgjør om det skal sendes en kommando for å motta flere tall, eller kommandoen for å stoppe. public class Client { static BufferedReader br; static PrintWriter pw; Random r = new Random(); Socket socket = new Socket("128.39.117.131", 22003); OutputStream out = socket.getoutputstream(); InputStream in = socket.getinputstream(); br = new BufferedReader(new InputStreamReader(in)); pw = new PrintWriter(out); while (true) { String n = br.readline(); System.out.println("Mottok " + n); if (r.nextint(50) == 0) { sendstopp(); break; else sendmore(); catch (Exception e) { private static void sendmore() { pw.println("more"); pw.flush(); private static void sendstopp() { pw.println("stop"); pw.close();

This document was created with Win2PDF available at http://www.win2pdf.com. The unregistered version of Win2PDF is for evaluation or non-commercial use only. This page will not be added after purchasing Win2PDF.