Gr.4. Socket programmering. Gr.4. Innlevering LAB 4. Gruppe 4. oppgaver
|
|
- Oddbjørg Rød
- 8 år siden
- Visninger:
Transkript
1 Innlevering LAB 4. Gruppe 4. oppgaver Gr.4 Socket programmering Gr.4 1).Test ut programmene Klientmaskin og Tjenermaskin som er gitt. Når bruker "localhost" må begge programmene kjøres på samme maskin. 2).Gjør nødvendige forandringer i Klientmaskin programmet, slik at man kan kjøre programmene på hver sin PC. 3).Gjør nødvendige forandringer i programmene slik at begge PC'ene kan skrive tekst til hverandre. Moretn R. Linstad, Erlend Pettersen, Anh- Thu Nguyen, Oybek Shernazarov, Martin Solberg Todorov
2 Sockets Programmering i Java Hva er en socket? En stikkontakt er den ene ende-punkt av en to-veis kommunikasjonsforbindelse mellom to programmer som kjører over nettverket. Kjører over nettverket betyr at programmene kjøres på forskjellige datamaskiner, vanligvis omtalt som den lokale og eksterne datamaskiner. Men man kan kjøre de to programmene på samme datamaskin. Slike kommuniserende programmer utgjør en klient / server applikasjon. Serveren implementerer en egen logikk, kalt service. Klientene koble til serveren for å få servert, f.eks. å få noen data eller be om beregningen av enkelte data. Ulike klient / server-applikasjoner gjennomsføre ulike typer tjenester. For å skille mellom forskjellige tjenester, ble en nummereringsforeslått. Denne konvensjonen bruker heltallsantall, kalt portnumre, for å betegne tjenestene. En server å implementere en tjeneste tildeler en bestemt port nummer til poenget med tjenesten oppføring. Det er ingen spesifikk fysiske inngangspunkter for tjenestene i en datamaskin. Portnumrene for tjenestene er lagret i konfigurasjonsfiler og brukes av dataprogram for å lage nettverkstilkoblinger. En socked er en kompleks datastruktur som inneholder en Internett-adresse og et portnummer. En socket, derimot, blir referert til av sin descriptor, som en fil som er referert til av en fil descriptor. Det er derfor, kontaktene er tilgjengelig via et programmeringsgrensesnitt (API) som ligner på filen input / output API. Dette gjør programmeringen av nettverksapplikasjoner svært enkel. De to-veis kommunikasjon kobling mellom de to programmene som kjører på forskjellige datamaskiner gjøres ved å lese fra og skrive til kontaktene som er opprettet på disse datamaskinene. De leses fra en socked data er data skrev inn i den andre kontakten på linken. Og gjensidig, de dataene skrev inn i en stikkontakt i data som leses fra den andre kontakten på linken. Disse to kontakter skapes og knyttes under tilkoblingen etableringen fase. Koblingen mellom to kontakter er som et rør som er implementert ved hjelp av en bunke med protokoller. Denne linkingen av kontaktene innebærer at en intern Inntaket har en mye mer kompleks datastruktur, eller mer presist, en sammenslutning av datastrukturer. Dermed er en socket datastruktur mer enn bare en internett-adresse og et portnummer. Forestille seg en socket som en datastruktur som inneholder minst internettadressen og portnummeret på den lokale datamaskinen, og Internett-adressen og portnummeret på den eksterne datamaskinen. Hvordan en nettverkstilkobling er opprettet? En nettverkstilkobling er initiert av et klientprogram når det skaper en socket for kommunikasjonen med serveren. For å opprette kontakten i Java, kaller klienten Socket konstruktør og passerer serveradresse og den spesifikke serveren portnummeret til den. På dette stadiet serveren må startes på maskinen som har den angitte adressen og lytter etter tilkoblinger på sin bestemte portnummeret. Serveren bruker en bestemt port dedikert kun til å lytte etter forespørsler fra klienter. Det kan ikke bruke denne bestemte port for datakommunikasjon med klienter fordi serveren må være i stand til å akseptere klientens forbindelse til en hvert øyeblikk. Så, er det bestemt port dedikert kun til å lytte etter nye tilkoblingsforespørsler. Tjenersiden socket forbundet med spesifikke port kalles server socket. Når en tilkoblingsforespørsel kommer på denne kontakten fra klientsiden, klienten og serveren etabler en forbindelse. Denne forbindelsen er etablert som følger: 1. Når serveren mottar en tilkoblingsforespørsel på sin spesielle server port, skaper det en ny socket for det og binder et portnummer til det. 2. Det sender det nye portnummeret til kunden å informere det at tilkoblingen er opprettet. 3. Serveren går på nå ved å lytte på to porter: a. den venter på nye innkommende tilkoblingsforespørsler på sin bestemt port, og b. den leser og skriver meldinger på etablerte tilkoblingen (på ny port) med den aksepterte klienten. Serveren kommuniserer med klienten ved å lese fra og skrive til den nye porten. Hvis andre tilkoblings forespørsler ankommer, godtar serveren dem på lignende måte å skape en ny port for hver ny tilkobling. Dermed når som helst øyeblikk, må serveren være i stand til å kommunisere samtidig med mange klienter og å vente på samme tid for innkommende forespørsler på sin spesielle server port. Kommunikasjonen med hver klient gjøres via kontaktene opprettet for hver kommunikasjon. Datakommunikasjon LAB4 Innlevering Gr.4 Side nr.: 1
3 SERVER CLIENT, , ,- accept < create `-,- -. read/write < > read/write `- -' ` ' ` ' Den java.net pakken i Java-utviklingsmiljø gir klassen Socket som implementerer klientsiden og klassen Server klasse som implementerer serversiden stikkontakter. Klienten og serveren må bli enige om en protokoll. De må bli enige om språket av informasjonen overføres frem og tilbake gjennom kontakten. Det er to kommunikasjonsprotokoller: strømmen kommunikasjonsprotokoll datagram kommunikasjonsprotokoll Strømmen kommunikasjonsprotokoll er kjent som TCP (transfer kontrollprotokoll). TCP er en forbindelses orientert protokoll. Det fungerer som beskrevet i dette dokumentet. For å kunne kommunisere over TCPprotokollen, må en forbindelse først bli etablert mellom to stikkontakter. Mens en av kontaktene lytter etter en forespørsel om tilkobling (server), den andre ber om en forbindelse (klient). Når de to kontakter er koblet til, kan de brukes til å sende og / eller motta data. Når vi sier "to kontakter er tilkoblet" mener vi det faktum at serveren akseptert en tilkobling. Som det ble forklart ovenfor serveren oppretter en ny lokale kontakt for den nye forbindelsen. Fremgangsmåten av dette nye lokale socket oppfinnelse, men er gjennomsiktig for klienten. Datagram kommunikasjonsprotokoll, kjent som UDP (User Datagram Protocol) er en forbindelsesløs protokoll. Ingen tilkobling er opprettet før du sender dataene. Dataene sendes i en pakke som heter datagram. Den datagram blir sendt som en forespørsel for etablering av en forbindelse. Imidlertid inneholder datagram ikke bare adressene, den inneholder brukerdata også. Når det kommer til målet brukerdataene blir lest av den eksterne applikasjonen og ingen tilkobling er opprettet. Denne protokollen krever at hver gang en datagram er sendt, den lokale kontakten og fjern socket adresser skal også sendes i datagram. Disse adressene sendes i hvert datagram. Den java.net pakken i Java-utviklingsmiljø gir klassen DatagramSocket for programmering datagram kommunikasjon. UDP er en upålitelig protokoll. Det er ingen garanti for at datagrammer vil bli levert i en god ordre til destinasjonen socket. F.eks. en lang tekst, delt inn i flere sider og sendte en side per datagram, kan mottas i en annen rekkefølge. På den andre siden, er en pålitelig protokoll TCP. TCP garanter at sidene vil bli mottatt i den rekkefølgen de sendes. Når man programmerer TCP og UDP-baserte applikasjoner i Java, er ulike typer stikkontakter brukes. Disse kontaktene er implementert i ulike klasser. Klassene Server og Socket implementer TCP basert stikkontakter og klassen DatagramSocket implementerer UDP basert stikkontakter som følger: Stream-kontakten for å lytte etter klientforespørsler (TCP): klassen Server. Stream socket (TCP): klassen Socket. Datagram socket (UDP): klassen DatagramSocket. Se nedover er et dokument viser hvordan man programmere TCP basert klient / server-applikasjoner. UDP orientert programmering dekkes ikke i dokumentet. Datakommunikasjon LAB4 Innlevering Gr.4 Side nr.: 2
4 Åpning av en stikkontakt Klientsiden Når du programmerer en klient, må en socket åpnes like nedenfor: Socket MyClient; MyClient = new Socket ("Machine", portnummer); Denne koden må imidlertid bli satt i en prøve / catch-blokken å fange IOException: Socket MyClient; MyClient = new Socket ("Machine", portnummer); catch (IOException e) { hvor Machine er maskinnavnet for å åpne en forbindelse til og Portnumber er portnummeret der serveren å koble til, er å lytte. Når man velger et portnummer, må man huske på at portnumrene i område fra 0 til 1023 er reservert for standardtjenester, som f.eks. e-post, FTP, HTTP, etc. For denne eks. er (chat server) portnummeret bør velges større enn Tjenersiden Når man programmerer en server, må en server socket lages først, like nedenfor: Server myservice; MyServerice = new Server (portnummer); catch (IOException e) { Serveren socket er dedikert til å lytte til og godta tilkoblinger fra klienter. Etter å ha akseptert en forespørsel fra en klient serveren oppretter en klient socket å kommunisere (sende / motta data) med klienten, like nedenfor: Socket clientsocket = null; servicesocket = MyService.accept (); catch (IOException e) { Nå servere kan sende / motta data til / fra klienter. Siden kontaktene er som fildeskriptorer på send / motta operasjoner blir gjennomført som les / skrive filoperasjoner på input / output bekker. Datakommunikasjon LAB4 Innlevering Gr.4 Side nr.: 3
5 Opprette en input stream På klientsiden, kan bruke Datainput klassen til å lage en input stream å motta svar fra serveren: Datainput innspill; input = new Datainput (MyClient.getInputStream ()); catch (IOException e) { Klassen Datainput kan lese tekstlinjer og Java primitive datatyper i en bærbar måte. Det har flere lesemetoder som lest, readchar, readint, readdouble, og readline. Man har til å bruke hvilken som helst funksjon avhengig av hvilken type data som skal motta fra serveren. På serversiden, er Datainput brukes til å motta innspill fra klienten: Datainput innspill; input = new Datainput (servicesocket.getinputstream ()); catch (IOException e) { Lag en output stream På klientsiden, må en output stream bli opprettet for å sende data til serveren kontakt ved hjelp av klassen Print eller Dataoutputstream av java.io pakken: Print utgang; output = new Print (MyClient.getOutputStream ()); catch (IOException e) { Klassen Print implementerer metodene for visning av Java primitive datatyper verdier, som skrive og println metoder. Dessuten kan man ønsker å bruke Dataoutputstream: Dataoutputstream utgang; output = new Dataoutputstream (MyClient.getOutputStream ()); catch (IOException e) { Klassen Dataoutputstream kan skrive Java primitive datatyper; mange av sine metoder skrive et enkelt Java primitive typen til output stream. På serversiden, kan man bruke klassen Print å sende data til klienten. Datakommunikasjon LAB4 Innlevering Gr.4 Side nr.: 4
6 Print utgang; output = new Print (servicesocket.getoutputstream ()); catch (IOException e) { Avsluttende stikkontakter Lukke en socked er som å stenge en fil. Du må lukke en stikkontakt når du ikke trenger den lenger. Utgangen og inngangsstrømmer må være lukket også, men før du lukker kontakten. På klientsiden du må lukke input og output bekker og kontakten like nedenfor: output.close (); input.close (); MyClient.close (); catch (IOException e) { På serveren du må lukke input og output bekker og de to kontaktene som følger: output.close (); input.close (); servicesocket.close (); MyService.close (); catch (IOException e) { Vanligvis, på serveren siden man må lukke bare klienten kontakten etter at klienten blir servert. Serveren kontakten holdes åpen så lenge serveren kjører. En ny klient kan koble til serveren på serveren kontakten for å opprette en ny tilkobling, det vil si en ny klient socket. Datakommunikasjon LAB4 Innlevering Gr.4 Side nr.: 5
7 En enkel klient / server applikasjon I denne delen presenterer vi en enkel klient / server applikasjon. Klienten Dette er en enkel klient som leser en linje fra standard input og sender det til ekkoet server. Klienten holder deretter lese ut av stikkontakten før den mottar meldingen "Ok" fra serveren. Når den mottar "Ok" melding da det bryter. // Eksempel 23 import java.io.datainputstream; import java.io.printstream; import java.io.bufferedinputstream; import java.io.ioexception; import java.net.socket; import java.net.unknownhostexception; public class Klient { public static void main (String [] args) { Socket clientsocket = null; Datainput er = null; Print os = null; Datainput inputline = null; * Åpne en socket på port Åpne input og output bekker. clientsocket = new Socket ("localhost", 2222); os = new Print (clientsocket.getoutputstream ()); er = new Datainput (clientsocket.getinputstream ()); inputline = new Datainput (ny BufferedInputStream (System.in)); Catch (UnknownHostException e) { System.err.println ("Vet ikke om host"); Catch (IOException e) { System.err.println ("Kunne ikke få I / O for tilkobling til host"); * Hvis alt er initialisert da ønsker vi å skrive noen data til * Kontakten vi har åpnet en forbindelse til på port if (clientsocket! = null && os! = null && er! = null) { * Hold på lesing fra / til kontakten til vi får "Ok" fra * Server, når vi fikk det da vi bryte. System.out.println (".. Klienten startet Skriv inn eventuell tekst du vil avslutte det skriver 'OK'."); String responseline; os.println (inputline.readline ()); while ((responseline = is.readline ())! = null) { System.out.println (responseline); if (responseline.indexof ("Ok")! = -1) { Datakommunikasjon LAB4 Innlevering Gr.4 Side nr.: 6
8 break; os.println (inputline.readline ()); * Lukk output stream, lukke input stream, lukke kontakten. os.close (); is.close (); clientsocket.close (); Catch (UnknownHostException e) { System.err.println ("Prøver å koble til ukjent vert:" + e); Catch (IOException e) { System.err.println ("IOException:" + e); Serveren. Dette er et enkelt ekko-server. Serveren er dedikert til ekko meldinger mottatt fra kunder. Når den mottar en melding den sender melding tilbake til klienten. Dessuten legger den strengen "fra server:" i fra av ekko meldingen. // Eksempel 24 import java.io.datainputstream; import java.io.printstream; import java.io.ioexception; import java.net.socket; import java.net.serversocket; public class Server { public static void main (String args []) { Server echoserver = null; Streng linje; Datainput er; Print os; Socket clientsocket = null; * Åpne en server socket på port Merk at vi ikke kan velge en port mindre * Enn 1023 hvis vi ikke er privilegerte brukere (root). echoserver = new Server (2222); Catch (IOException e) { * Lag en socket objekt fra Server å lytte til og akseptere * Tilkoblinger. Åpne input og output bekker. System.out.println (". Serveren startet det på <CTRL> <C> For å stoppe."); Datakommunikasjon LAB4 Innlevering Gr.4 Side nr.: 7
9 clientsocket = echoserver.accept (); er = new Datainput (clientsocket.getinputstream ()); os = new Print (clientsocket.getoutputstream ()); Så lenge vi mottar data, ekko at data tilbake til klienten. while (true) { linje = is.readline (); os.println ("fra server:" + linje); Catch (IOException e) { Kompilere og kjøre programmet For å prøve dette programmet du må kompilere de to programmene: Eksempel 23 og Eksempel 24. Lagre disse programmene på datamaskinen. Navngi filene Client.java og Server.java. Åpne et shell vindu på datamaskinen og endre den gjeldende katalogen til katalogen der du lagret disse filene. Skriv inn følgende to kommandoer i skallet vinduet. javac Server.java javac Client.java Hvis Java kompilatoren er installert på datamaskinen, og PATH-variabelen er konfigurert for skallet å finne javac kompilatoren, da disse to kommandolinjer vil opprette to nye filer i gjeldende katalog: filene Server.class og Client.class Start serveren i skallet vinduet ved hjelp av kommandoen: java Server Man vil se følgende melding i dette vinduet Serveren startet. For å stoppe den trykker <CTRL> <C>. forteller at serveren er i gang. Åpne et nytt shell vindu og endre den gjeldende katalogen til katalogen der du lagret programfilene. Starte klienten i skallet vinduet ved hjelp av kommandoen: Java-klient Følgende melding i dette vinduet Klienten startet. Skriv inn hvilken som helst tekst. For å avslutte det skrive "Ok". Datakommunikasjon LAB4 Innlevering Gr.4 Side nr.: 8
10 forteller at klienten er i gang. Type, f.eks. teksten Hallo i dette vinduet. Følgende resultat. hallo Fra server: hello forteller at meldingen Hei ble sendt til serveren og ekkoet ble mottatt av kunden fra serveren. En multi-threaded Client / Server-programmet Neste eksempel er en chat program. En chat-programmet består av en prat server og en chat-klient. Serveren godtar tilkoblinger fra klienter og leverer alle meldinger fra hver klient til andre klienter. Dette er et verktøy for å kommunisere med andre personer over Internett i sanntid. Klienten er implementert ved hjelp av to tråder - en tråd til å samhandle med serveren og den andre med standard input. To tråder er nødvendig fordi en klient må kommunisere med serveren og samtidig må det være klar til å lese meldingene fra standard input som skal sendes til serveren. Serveren er implementert ved hjelp av tråder også. Den bruker en separat tråd for hver forbindelse. Den gyter en ny klient tråd hver gang en ny forbindelse fra en klient er akseptert. Dette forenkler mye utformingen av serveren. Multi-threading, derimot, skaper synkroniseringsproblemer. Vi vil presentere to implementeringer av chat-serveren. En implementering som fokus på multi-threading uten å vurdere synkroniseringsproblemer vil bli presentert først. Da vil vi fokusere på de synkroniseringsproblemer som en multi-threaded implementering skaper. Til slutt, er en oppdatert versjon av multi-threaded chat server som løser synkroniseringsproblemer presentert. Praten Client Koden nedenfor er multi-threaded chat-klient. Den bruker to tråder: en for å lese data fra standard input og sendte det til serveren, den andre til å lese data fra serveren og for å skrive den ut på standard output. // Eksempel 25 import java.io.datainputstream; import java.io.printstream; import java.io.bufferedreader; import java.io.inputstreamreader; import java.io.ioexception; import java.net.socket; import java.net.unknownhostexception; public class MultiThreadChatClient implementerer kjørbart { // Klienten socket private static Socket clientsocket = null; // Output stream private static Print os = null; // Input stream private static Datainput er = null; private static BufferedReader inputline = null; private static boolean lukket = false; public static void main (String [] args) { Datakommunikasjon LAB4 Innlevering Gr.4 Side nr.: 9
11 // Standardporten. int portnummer = 2222; // Standard verts. String host = "localhost"; if (args.length <2) { System.out.println ("Bruk: java MultiThreadChatClient <verts> <portnummer> \ n" + "Nå bruker host =" + host + ", portnummer =" + portnummer); Else { host = args [0]; portnummer = Integer.valueOf (args [1]) intvalue ().; * Åpne en stikkontakt på en gitt vert og port. Åpne input og output bekker. clientsocket = new Socket (host, portnummer); inputline = new BufferedReader (ny InputStreamReader (System.in)); os = new Print (clientsocket.getoutputstream ()); er = new Datainput (clientsocket.getinputstream ()); Catch (UnknownHostException e) { System.err.println ("Vet ikke om host" + host); Catch (IOException e) { System.err.println ("Kunne ikke få I / O for tilkobling til verts" + Host); * Hvis alt er initialisert da ønsker vi å skrive noen data til * Kontakten vi har åpnet en forbindelse til på babord portnummer. if (clientsocket! = null && os! = null && er! = null) { Lag en tråd for å lese fra serveren. ny tråd (nye MultiThreadChatClient ()) start ().; while (! lukket) { os.println (inputline.readline () trim ().); * Lukk output stream, lukke input stream, lukke kontakten. os.close (); is.close (); clientsocket.close (); Catch (IOException e) { System.err.println ("IOException:" + e); * Lag en tråd for å lese fra serveren. (Non-Javadoc) * *see Java.lang.Runnable # run () public void run () { Datakommunikasjon LAB4 Innlevering Gr.4 Side nr.: 10
12 * Hold på lesing fra socket till får vi "Bye" fra * Server. Når vi fikk det da vi ønsker å bryte. String responseline; while ((responseline = is.readline ())! = null) { System.out.println (responseline); if (responseline.indexof ("*** Bye")! = -1) break; Lukket = true; Catch (IOException e) { System.err.println ("IOException:" + e); Chat-serveren Vi fortsetter med multi-threaded chat server. Den bruker en egen tråd for hver klient. Den gyter en ny klient tråd hver gang en ny forbindelse fra en klient er akseptert. Denne tråden åpner input og output bekker for en bestemt klient, det spør klientens navn, informerer alle klienter om det faktum at en ny klient har sluttet seg til chat-rom og, så lenge det mottar data, echos at data tilbake til alle andre kunder. Når klienten forlater chatterom, informerer denne tråden også kunder om at og avsluttes. // Eksempel 26 import java.io.datainputstream; import java.io.printstream; import java.io.ioexception; import java.net.socket; import java.net.serversocket; * En chat-server som leverer offentlige og private meldinger. public class MultiThreadChatServer { // Serveren socket. private static Serverserver = null; // Klienten socket. private static Socket clientsocket = null; // Denne chat-server kan godta opptil maxclientscount klienters tilkoblinger. private static final int maxclientscount = 10; private statiske endelige clientthread [] tråder = new clientthread [maxclientscount]; public static void main (String args []) { // Standard portnummer. int portnummer = 2222; if (args.length <1) { System.out.println ("Bruk: java MultiThreadChatServer <portnummer> \ n" + "Nå bruker portnummer =" + portnummer); Else { portnummer = Integer.valueOf (args [0]) intvalue ().; Datakommunikasjon LAB4 Innlevering Gr.4 Side nr.: 11
13 * Åpne en server socket på portnummer (standard 2222). Legg merke til at vi kan * Ikke velge en port mindre enn 1023 hvis vi ikke er privilegerte brukere (root). Server = new Server (portnummer); Catch (IOException e) { * Lag en klient socket for hver tilkobling og gi det til en ny klient * Tråden. while (true) { clientsocket = serversocket.accept (); int i = 0; for (i = 0; i <maxclientscount; i ++) { if (tråder [i] == null) {. (Tråder [i] = new clientthread (clientsocket, tråder)) start (); break; if (i == maxclientscount) { Print os = new Print (clientsocket.getoutputstream ()); os.println (". Server for opptatt Prøv senere."); os.close (); clientsocket.close (); Catch (IOException e) { * Den chat-klient tråden. Denne klienten tråden åpner input og output * Bekker for en bestemt klient, spør klientens navn, informerer alle * Klienter koblet til serveren om det faktum at en ny klient har sluttet * Chatterommet, og så lenge den mottar data, echos at data tilbake til alle * andre klienter. Når en klient forlater chatterom denne tråden informerer også * Alle kunder om at og avsluttes. klasse clientthread strekker Thread { Privat Datainput er = null; Privat Print os = null; Privat Socket clientsocket = null; private endelige clientthread [] tråder; private int maxclientscount; offentlig clientthread (Socket clientsocket, clientthread [] tråder) { this.clientsocket = clientsocket; this.threads = tråder; maxclientscount = threads.length; Datakommunikasjon LAB4 Innlevering Gr.4 Side nr.: 12
14 public void run () { int maxclientscount = this.maxclientscount; clientthread [] tråder this.threads; * Lag input og output bekker for denne klienten. er = new Datainput (clientsocket.getinputstream ()); os = new Print (clientsocket.getoutputstream ()); os.println ("Skriv inn navnet ditt."); String navn = is.readline () trim ().; os.println ("Hei" + navn + "Til vår chat room \ nfor å forlate Skrive / sluttet i en ny linje."); if (tråder [i]! = null && tråder [i]! = dette) { tråder [i].os.println ("*** En ny bruker" + navn + "Kom inn i chatterommet!!! ***"); while (true) { String linje = is.readline (); if (line.startswith ("/ quit")) { break; if (tråder [i]! = null) { tråder [i].os.println ("<" + navn + "og gr;" + linje); if (tråder [i]! = null && tråder [i]! = dette) { tråder [i].os.println ("*** Den bruker" + navn + "Er å forlate chatrommet!!! ***"); os.println ("*** Bye" + navn + "***"); * Rydd opp. Sett gjeldende tråd variabel til null, slik at en ny klient * Kunne bli godkjent av serveren. if (tråder [i] == denne) { tråder [i] = null; * Lukk output stream, lukke input stream, lukke kontakten. is.close (); os.close (); clientsocket.close (); Catch (IOException e) { Datakommunikasjon LAB4 Innlevering Gr.4 Side nr.: 13
15 Synkroniserings utgaver av multi-threaded chat server gjennomføring Tenk nå synkroniseringsproblemer en slik implementering skaper. For å forenkle vår oppgave la oss dele chat serverkoden som følger, se partisjonert koden under. // Eksempel 26 import java.io.datainputstream; import java.io.printstream; import java.io.ioexception; import java.net.socket; import java.net.serversocket; * En chat-server som leverer offentlige og private meldinger. public class MultiThreadChatServer { // Serveren socket. private static Serverserver = null; // Klienten socket. private static Socket clientsocket = null; // Denne chat-server kan godta opptil maxclientscount klienters tilkoblinger. private static final int maxclientscount = 10; private statiske endelige clientthread [] tråder = new clientthread [maxclientscount]; public static void main (String args []) { 1 // Standard portnummer. int portnummer = 2222; if (args.length <1) { System.out.println ("Bruk: java MultiThreadChatServer <portnummer> \ n" + "Nå bruker portnummer =" + portnummer); Else { portnummer = Integer.valueOf (args [0]) intvalue ().; * Åpne en server socket på portnummer (standard 2222). Legg merke til at vi kan * Ikke velge en port mindre enn 1023 hvis vi ikke er privilegerte brukere (root). Server = new Server (portnummer); Catch (IOException e) { * Lag en klient socket for hver tilkobling og gi det til en ny klient * Tråden. while (true) { Datakommunikasjon LAB4 Innlevering Gr.4 Side nr.: 14
16 2 clientsocket = serversocket.accept (); int i = 0; for (i = 0; i <maxclientscount; i ++) { if (tråder [i] == null) {. (Tråder [i] = new clientthread (clientsocket, tråder)) start (); break; if (i == maxclientscount) { Print os = new Print (clientsocket.getoutputstream ()); os.println (". Server for opptatt Prøv senere."); os.close (); clientsocket.close (); Catch (IOException e) { * Den chat-klient tråden. Denne klienten tråden åpner input og output * Bekker for en bestemt klient, spør klientens navn, informerer alle * Klienter koblet til serveren om det faktum at en ny klient har sluttet * Chatterommet, og så lenge den mottar data, echos at data tilbake til alle * andre klienter. Når en klient forlater chatterom denne tråden informerer også * Alle kunder om at og avsluttes. klasse clientthread strekker Thread { 3 Privat Datainput er = null; Privat Print os = null; Privat Socket clientsocket = null; private endelige clientthread [] tråder; private int maxclientscount; offentlig clientthread (Socket clientsocket, clientthread [] tråder) { this.clientsocket = clientsocket; this.threads = tråder; maxclientscount = threads.length; public void run () { int maxclientscount = this.maxclientscount; clientthread [] tråder this.threads; * Lag input og output bekker for denne klienten. er = new Datainput (clientsocket.getinputstream ()); os = new Print (clientsocket.getoutputstream ()); os.println ("Skriv inn navnet ditt."); String navn = is.readline () trim ().; os.println ("Hei" + navn + "Til vår chat room \ nfor å forlate Skrive / sluttet i en ny linje."); 4 Datakommunikasjon LAB4 Innlevering Gr.4 Side nr.: 15
17 if (tråder [i]! = null && tråder [i]! = dette) { tråder [i].os.println ("*** En ny bruker" + navn + "Kom inn i chatterommet!!! ***"); while (true) { String linje = is.readline (); if (line.startswith ("/ quit")) { break; if (tråder [i]! = null) { tråder [i].os.println ("<" + navn + ">" + linje); if (tråder [i]! = null && tråder [i]! = dette) { tråder [i].os.println ("*** Den bruker" + navn + "Er å forlate chatrommet!!! ***"); os.println ("*** Bye" + navn + "***"); * Rydd opp. Sett gjeldende tråd variabel til null, slik at en ny klient * Kunne bli godkjent av serveren. if (tråder [i] == denne) { tråder [i] = null; * Lukk output stream, lukke input stream, lukke kontakten. is.close (); os.close (); clientsocket.close (); Catch (IOException e) { Siden alle tråder kjørt samtidig, er tilgangen til denne tabellen også sammenfallende. Anta nå at en gjenge (gjenge 1) kommer inn i delen 4, mens en annen tråd (tråd 2) går inn i den delen 10 av koden. Seksjonen 4 bruker tabell trådene [] for å informere kundene om en ny klient. Den 10, men fjerner fra denne matrisen tråden referanser til klienten som forlater chatterom. Det kan skje, at en tråder [i] referanse, samtidig som brukes i 4 er satt til null i 10 av en annen tråd - ved tråden av klienten forlate chatrommet. Tabellen nedenfor viser dette scenariet. I dette scenariet Gjenger 1 utfører hvis setningen i del 4. Anta tråder [i] ikke er null i dette øyeblikk. Anta også, gjenge 1 blir avbrutt av operativsystemet umiddelbart etter evaluering hvis setningen tilstand. Det betyr, gjenge 1 er satt i en ventekøen, mens Gjenger 2 starter utførende del 10. Slike type kjøring kalles inter-levende. Anta, Tråd 2 sett tråder [i] til null ved utføring del 10. Til slutt, er tråd en gjenopptatt og utfører tråder [i].os.println () uttalelse. Men tråder [i] er null på dette øyeblikk. Dette vil føre til en nullpeker unntak. Datakommunikasjon LAB4 Innlevering Gr.4 Side nr.: 16
18 Dette unntaket vil stenge unormalt i forbindelse med en klient. Og alle som på grunn av en annen klient som bestemte seg for å forlate chatrommet. Den samme situasjonen kan oppstå hvis vi vurdere samtidighet av noen av seksjonen 2,6,8 med 10. Slike situasjoner er ikke akseptabelt og må løses på riktig måte i en samtidig multithreaded program Gjenger 1 Gjenger 2 if (tråder [i]! = null && tråder [i]! = dette) { tråder [i].os.println ("*** En ny bruker" + navn + "Kom inn i chatterommet!!! ***"); if (tråder [i] == denne) { tråder [i] = null; For å unngå en slik type unntak, må trådene være synkronisert slik at de utfører de kritiske deler av koden (grønt) i sekvens, og således uten å inter-levende. F.eks. i tabellen nedenfor, er utføringen av de to deler av kodesekvens - de kritiske delene utføres uten avbrytelse. Vi kaller en slik utførelse synkronisert. Arkivere denne synkroniseringen må vi bruke den synkroniserte (denne) { uttalelse, som nedenfor Gjenger 1 Gjenger 2 synkronisert (denne) { if (tråder [i]! = null && tråder [i]! = dette) { tråder [i].os.println ("*** En ny bruker" + navn + "Kom inn i chatterommet!!! ***"); synkronisert (denne) { if (tråder [i] == denne) { tråder [i] = null; Alle synkroniserte (denne) { uttalelser utelukker gjensidig hverandre. Det betyr, at når en tråd går inn i synkronisert (denne) { statement det bekrefter først at enhver annen synkronisert (denne) { uttalelsen ikke blir utført av en annen tråd. Hvis en slik uttalelse blir henrettet i en tynn tråd, så denne tråden, samt alle andre tråder prøver å utføre en synkronisert (denne) { uttalelse, blir tvunget til å vente helt til tråden utfører de synkroniserte (denne) { opphører dette utsagnet. Når tråden utfører en synkronisert (denne) { uttalelse forlater den kritiske delen, er at når det avslutter synkronisert (denne) { uttalelse, en tråd venter på kritiske delen går inn i sitt synkronisert (denne) {. Når en tråd går inn synkronisert (denne) { uttalelse den blokkerer alle andre tråder fra å komme inn sine synkronisert (denne) { uttalelser. Dermed setter alle kritiske deler i synkronisert (denne) { uttalelser vi guaran at chat-serveren vil utføre korrekt uten stigende nullpeker unntak forårsaket av samtidig gjennomføring av andre kritiske deler. Datakommunikasjon LAB4 Innlevering Gr.4 Side nr.: 17
19 Den synkronisert (denne) { uttalelsen er et kraftig verktøy. Men ved å bruke det krever en god forståelse av synkroniserings problemet. Feil bruk av synkronisert (denne) { uttalelse kan føre til vranglås av programmet. En vranglås er et scenario når en tråd venter på en annen tråd til å forlate sin kritiske delen alltid. For å forklare dette scenariet antar vi utvidet den kritiske punkt 6 som nedenfor. Dette er, antar at den synkronisert (denne) { setningen inneholder en løkke som potensielt kan utføre for alltid. 6 synkronisert (denne) { while (true) { String linje = is.readline (); if (line.startswith ("/ quit")) { break; if (tråder [i]! = null) { tråder [i].os.println ("<" + navn + ">" + linje); Anta at "/ quit" kommando aldri kommer eller det kommer etter en svært lang tid. Tråden utfører denne sløyfen inne i synkronisert (denne) { uttalelsen vil blokkere alle andre tråder fra å utføre sine synkronisert kode fordi de vil vente på sine synkronisert (denne) { uttalelser. F.eks. vil den delen av koden i rødt (se nedenfor) skal aldri utføres etter tråd 2, hvis Gjenger 1 kom inn i while (true) loop og forblir i evig Gjenger 1 Gjenger 2 synkronisert (denne) { while (true) { String linje = is.readline (); if (line.startswith ("/ quit")) { break; if (tråder [i]! = null) { tråder [i].os.println ("<" + navn + ">" + linje); synkronisert (denne) { if (tråder [i] == denne) { tråder [i] = null; Så når du synkroniserer programmer, en hensiktsmessig løsning må iverksettes for å løse slike problemer, ellers synkronisert (denne) { uttalelse kan føre til svært lange forsinkelser og til og med vranglåser. Unngå å sette unødvendige synkronisert (denne) { uttalelser i programmet. F.eks. er det ikke nødvendig å synkronisere den del 2 av koden (se tabellen på partisjonert kode). Selv om denne kode modifiserer tråder [] array, en bedre kontroll av koden oppdager at det ikke er noen risiko for denne modifikasjon vil skape nullpeker unntak eller andre problemer i programmet. Datakommunikasjon LAB4 Innlevering Gr.4 Side nr.: 18
20 Den synkroniserte versjon av chat-server I denne delen presenterer vi den oppdaterte versjonen av chat-serveren som løser synkroniseringsproblemer er beskrevet i forrige avsnitt. Den synkronisert (denne) { påstanden brukes for å løse synkroniseringsproblemer. Også denne versjonen av chat-server er forbedret for å levere private meldinger til kunder. // Eksempel 26 (oppdatert) import java.io.datainputstream; import java.io.printstream; import java.io.ioexception; import java.net.socket; import java.net.serversocket; * En chat-server som leverer offentlige og private meldinger. public class MultiThreadChatServerSync { // Serveren socket. private static Serverserver = null; // Klienten socket. private static Socket clientsocket = null; // Denne chat-server kan godta opptil maxclientscount klienters tilkoblinger. private static final int maxclientscount = 10; private statiske endelige clientthread [] tråder = new clientthread [maxclientscount]; public static void main (String args []) { // Standard portnummer. int portnummer = 2222; if (args.length <1) { System.out.println ("Bruk: java MultiThreadChatServerSync <portnummer> \ n" + "Nå bruker portnummer =" + portnummer); Else { portnummer = Integer.valueOf (args [0]) intvalue ().; * Åpne en server socket på portnummer (standard 2222). Legg merke til at vi kan * Ikke velge en port mindre enn 1023 hvis vi ikke er privilegerte brukere (root). Server = new Server (portnummer); Catch (IOException e) { * Lag en klient socket for hver tilkobling og gi det til en ny klient * Tråden. while (true) { clientsocket = serversocket.accept (); int i = 0; for (i = 0; i <maxclientscount; i ++) { Datakommunikasjon LAB4 Innlevering Gr.4 Side nr.: 19
21 if (tråder [i] == null) {. (Tråder [i] = new clientthread (clientsocket, tråder)) start (); break; if (i == maxclientscount) { Print os = new Print (clientsocket.getoutputstream ()); os.println (". Server for opptatt Prøv senere."); os.close (); clientsocket.close (); Catch (IOException e) { * Den chat-klient tråden. Denne klienten tråden åpner input og output * Bekker for en bestemt klient, spør klientens navn, informerer alle * Klienter koblet til serveren om det faktum at en ny klient har sluttet * Chatterommet, og så lenge den mottar data, echos at data tilbake til alle * andre klienter. Tråden kringkaste innkommende meldinger til alle klienter og * Ruter privat melding til den aktuelle klienten. Når en klient forlater * Chatterom denne tråden informerer også alle kunder om at og avsluttes. klasse clientthread strekker Thread { private String korrespondanse = null; Privat Datainput er = null; Privat Print os = null; Privat Socket clientsocket = null; private endelige clientthread [] tråder; private int maxclientscount; offentlig clientthread (Socket clientsocket, clientthread [] tråder) { this.clientsocket = clientsocket; this.threads = tråder; maxclientscount = threads.length; public void run () { int maxclientscount = this.maxclientscount; clientthread [] tråder this.threads; * Lag input og output bekker for denne klienten. er = new Datainput (clientsocket.getinputstream ()); os = new Print (clientsocket.getoutputstream ()); String navn; while (true) { os.println ("Skriv inn navnet ditt."); name = is.readline () trim ().; if (name.indexof ('@') == -1) { break; Else { Datakommunikasjon LAB4 Innlevering Gr.4 Side nr.: 20
22 os.println ("Navnet bør ikke inneholde karakter."); Velkommen den nye klienten. os.println ("Welcome" + navn + ". Til vår chat room \ nfor å forlate Skrive / sluttet i en ny linje."); synkronisert (denne) { if (tråder [I]! = null && tråder [i] == denne) { korrespondanse = "@" + navn; break; if (tråder [i]! = null && tråder [i]! = dette) { tråder [i].os.println ("*** En ny bruker" + navn + "Kom inn i chatterommet!!! ***"); Begynn samtalen. while (true) { String linje = is.readline (); if (line.startswith ("/ quit")) { break; Hvis meldingen private sendte den til gitt klient. if (line.startswith ("@")) { String [] ord = line.split ("\\ S", 2); if (words.length> 1 && ord [1]! = null) { ord [1] = ord [1].trim (); if (! ord [1].isEmpty ()) { synkronisert (denne) { if (tråder [i]! = null && tråder [i]! = dette && Tråder [i].clientname! = Null && Tråder [i].clientname.equals (ord [0])) { tråder [i].os.println ("<" + navn + ">" + ord [1]); * Echo denne meldingen for å la kunden vet det private * Meldingen ble sendt. this.os.println (">" + navn + ">" + ord [1]); break; Else { Meldingen er offentlig, kringkaste det til alle andre kunder. synkronisert (denne) { if (tråder [I]! = null && tråder [i].clientname! = null) { tråder [i].os.println ("<" + navn + ">" + linje); Datakommunikasjon LAB4 Innlevering Gr.4 Side nr.: 21
23 synkronisert (denne) { if (tråder [i]! = null && tråder [i]! = dette && tråder [i].clientname! = null) { tråder [i].os.println ("*** Den bruker" + navn + "Er å forlate chatrommet!!! ***"); os.println ("*** Bye" + navn + "***"); * Rydd opp. Sett gjeldende tråd variabel til null, slik at en ny klient * Kunne bli godkjent av serveren. synkronisert (denne) { if (tråder [i] == denne) { tråder [i] = null; * Lukk output stream, lukke input stream, lukke kontakten. is.close (); os.close (); clientsocket.close (); Catch (IOException e) { Kompilere og kjøre programmet For å prøve dette programmet må kompilere de to programmene: Eksempel 25 og Eksempel 26 (oppdatert). Lagre disse programmene på datamaskinen. Navngi filene MultiThreadChatClient.java og MultiThreadChatServerSync.java. Åpne et shell vindu på datamaskinen og endre den gjeldende katalogen til katalogen der du lagret disse filene. Skriv inn følgende to kommandoer i skallet vinduet. javac MultiThreadChatServerSync.java javac MultiThreadChatClient.java Hvis Java kompilatoren er installert på datamaskinen, og PATH-variabelen er konfigurert for skallet å finne javac kompilatoren, da disse to kommandolinjer vil opprette to nye filer i gjeldende katalog: filene MultiThreadChatServerSync.class og MultiThreadChatClient.class Start serveren i skallet vinduet ved hjelp av kommandoen: java MultiThreadChatServerSync Datakommunikasjon LAB4 Innlevering Gr.4 Side nr.: 22
24 Følgende melding i dette vinduet Bruk: java MultiThreadChatServerSync <portnummer> Nå bruker portnummer = 2222 forteller at chat-server er startet og at den lytter etter tilkoblinger på port nummer Uttrykket Bruk: java MultiThreadChatServerSync <portnummer> forteller at man kan starte serveren oppgi en parameter - portnummeret. Som standard er imidlertid porten 2222 som brukes. Åpne et nytt shell vindu og endre den gjeldende katalogen til katalogen der lagret programfilene. Starte klienten i skallet vinduet ved hjelp av kommandoen: java MultiThreadChatClient Følgende melding i dette vinduet Bruk: java MultiThreadChatClient <verts> <portnummer> Nå bruker host = localhost, portnummer = 2222 Skriv inn navnet ditt. forteller at klienten er i gang. Type, f.eks. navnet Anonymous1 i dette vinduet. Følgende resultat. Hei Anonymous1 til vår chat room. Å forlate inn / sluttet i en ny linje forteller at klienten Anonymous1 kom inn i chatterommet. Den forteller også at å slutte chatrommet kunden må taste inn / avslutte kommandoen. Åpne ett skall vinduet og endre den gjeldende katalogen til katalogen der du lagret programfilene. Start en ny klient i skallet vinduet ved hjelp av kommandoen: java MultiThreadChatClient Følgende melding i dette vinduet Bruk: java MultiThreadChatClient <verts> <portnummer> Nå bruker host = localhost, portnummer = 2222 Skriv inn navnet ditt. forteller at klienten er i gang. Nå har to klienter som er koblet til serveren. Type, f.eks. tekst Anonymous2 i dette vinduet. Følgende resultat. Datakommunikasjon LAB4 Innlevering Gr.4 Side nr.: 23
25 Hei Anonymous2 til vår chat room. Å forlate inn / sluttet i en ny linje forteller at klienten Anonymous2 kom inn i chatterommet. Den forteller også at å slutte chatrommet kunden må taste inn / avslutte kommandoen. I vinduet til klienten Anonymous1 følgende melding vil bli skrevet ut. *** En ny bruker Anonymous2 kom inn i chatterommet!!! *** Hvis går inn i nå en melding i noen av klientvinduet meldingen vil bli trykt også i vinduet på den andre klienten. Denne typen meldingsutveksling er en chat-økt. Et eksempel chat Nedenfor viser vi et mulig scenario av en chat mellom de to klienter. Chat-klient Anonymous1 $ Java MultiThreadChatClient Bruk: java MultiThreadChatClient Nå bruker host = localhost, portnummer = 2222 Skriv inn navnet ditt. Anonymous1 Hei Anonymous1 til vår chat room. Å forlate inn / sluttet i en ny linje *** En ny bruker Anonymous2 kom inn i chatterommet!!! *** Hei Anonymous2 <Anonymous1> Hei Anonymous2 Chat-klient Anonymous2 $ Java MultiThreadChatClient Bruk: java MultiThreadChatClient Nå bruker host = localhost, portnummer = 2222 Skriv inn navnet ditt. Anonymous2 Hei Anonymous2 til vår chat room. Å forlate inn / sluttet i en ny linje <Anonymous1> Hei Anonymous2 Hi Anonymous1 <Anonymous2> Hei Anonymous1 <Anonymous2> Hei Anonymous1 Hvordan har du det? <Anonymous1> Hvor er du? <Anonymous1> Hvor er du? <Anonymous2> Jeg er godt Jeg er godt <Anonymous2> Jeg er godt Og du? <Anonymous2> Og du? Datakommunikasjon LAB4 Innlevering Gr.4 Side nr.: 24
26 <Anonymous2> Og du? Jeg er fint. <Anonymous1> jeg er fint. <Anonymous1> jeg er fint. <Anonymous2> Bye Bye Anonymous2 <Anonymous1> Bye Anonymous2 Bye <Anonymous2> Bye <Anonymous1> Bye Anonymous2 *** Brukeren Anonymous2 forlater chatterom!!! *** / Quit *** Bye Anonymous1 *** / Quit *** Bye Anonymous2 *** Konklusjoner Java sockets API (Socket og Server klasser) er et kraftig og fleksibelt grensesnitt for nettverk programmering av klient / server-applikasjoner. På den annen side, er Java-tråder annen kraftig programmerings rammeverk for klient / server-applikasjoner. Multi-threading forenkler implementering av komplekse klient / server-applikasjoner. Men introduserer det synkroniseringsproblemer. Disse problemene er forårsaket av samtidig utførelse av kritiske deler av programmet ved forskjellige tråder. Den synkronisert (denne) { uttalelse tillater oss å synkronisere gjennomføringen av de kritiske deler. Ved hjelp av dette utsagnet, men krever en god forståelse av synkroniseringsproblemer. Feil bruk av synkronisert (denne) { uttalelse kan føre til andre problemer, f.eks. vranglåser og / eller dårligere ytelse av programmet. Datakommunikasjon LAB4 Innlevering Gr.4 Side nr.: 25
Socket og ServerSocket
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
DetaljerKTN1 - Design av forbindelsesorientert protokoll
KTN1 - Design av forbindelsesorientert protokoll Beskrivelse av A1 A1 skal tilby en pålitelig, forbindelsesorientert tjeneste over en upålitelig, forbindelsesløs tjeneste A2. Det er flere ting A1 må implementere
Detaljer2 Om statiske variable/konstanter og statiske metoder.
Litt om datastrukturer i Java Av Stein Gjessing, Institutt for informatikk, Universitetet i Oslo 1 Innledning Dette notatet beskriver noe av det som foregår i primærlageret når et Javaprogram utføres.
DetaljerINF1010 våren 2019 Onsdag 30. januar. Mer om unntak i Java (med litt repetisjon av I/O først)
INF1010 våren 2019 Onsdag 30. januar Mer om unntak i Java (med litt repetisjon av I/O først) Stein Gjessing Lesing fra terminal og fil navn: mininn Bruk Scanner: Scanner mininn = new Scanner(); Type:
DetaljerJSP - 2. Fra sist. Hvordan fungerer web? Tjenerside script HTML. Installasjon av Web-tjener Et enkelt JSP-script. Ønsker dynamiske nettsider:
Fra sist JSP - 2 Installasjon av Web-tjener Et enkelt JSP-script HTML statisk Forms Tags Ønsker dynamiske nettsider: Klientside-script/programmering Javascript, vbscript, applets Tjenerside-script/programmering
DetaljerHittil har programmene kommunisert med omverden via tastatur og skjerm Ønskelig at data kan leve fra en kjøring til neste
Datafiler og serialisering Tekstfiler Scanner klassen Binær overføring av data Direkte tilgang til filinnholdet Serialisering LC191D Videregående programmering Semesterplan: http://aitel.hist.no/fag/vprg/index_lc191d.php
DetaljerTOD063 Datastrukturer og algoritmer
TOD063 Datastrukturer og algoritmer Øving : 3 Utlevert : Uke 7 Innleveringsfrist : 26. februar 2010 Klasse : 1 Data og 1 Informasjonsteknologi Gruppearbeid: 2-3 personer pr. gruppe. Oppgave 1 Vi skal lage
DetaljerLøsningsforslag ukeoppg. 6: 28. sep - 4. okt (INF1000 - Høst 2011)
Løsningsforslag ukeoppg. 6: 28. sep - 4. okt (INF1000 - Høst 2011) Løsningsforslag til oppgave 7, 8, og 9 mangler Klasser og objekter (kap. 8.1-8.14 i "Rett på Java" 3. utg.) NB! Legg merke til at disse
DetaljerArgumenter fra kommandolinjen
Argumenter fra kommandolinjen Denne veiledningen er laget for å vise hvordan man kan overføre argumenter fra kommandolinjen til et program. Hvordan transportere data fra en kommandolinje slik at dataene
DetaljerKapittel 9. Distribusjon. Fjernbruker. Tjenermaskin LAN WAN. Nærbruker. Figur 9-1: En enkel klient/tjener distribusjon
Kapittel 9 Distribusjon Tjenermaskin Fjernbruker LAN Nærbruker WAN Figur 9-1: En enkel klient/tjener distribusjon 195 Tjenermaskin Fjernbruker LAN Replikert tjener Nærbruker WAN Figur 9-2: Klient/tjener-konfigurasjon
DetaljerÅ lese tall fra en fil, klassen Scanner
Å lese tall fra en fil, klassen Scanner 1. Et Scanner-objekt kan knyttes til et strømobjekt eller til en streng. 2. Kan skanne teksten etter data av ulike typer. 3. Kan kun skanne framover i teksten. Vis
DetaljerUNIVERSITETET I OSLO
UNIVERSITETET I OSLO BOKMÅL Det matematisk-naturvitenskapelige fakultet Eksamen i : Eksamensdag : Torsdag 2. desember 2004 Tid for eksamen : 09.00 12.00 Oppgavesettet er på : Vedlegg : Tillatte hjelpemidler
Detaljer13.09.2012 LITT OM OPPLEGGET. INF1000 EKSTRATILBUD Stoff fra uke 1-3 12. September 2012 Siri Moe Jensen EKSEMPLER
.9.22 LITT OM OPPLEGGET INF EKSTRATILBUD Stoff fra uke - 2. September 22 Siri Moe Jensen Målgruppe: De som mangler forståelse for konseptene gjennomgått så langt. Trening får du ved å jobbe med oppgaver,
DetaljerKapittel 8: Programutvikling
Kapittel 8: Programutvikling Redigert av: Khalid Azim Mughal (khalid@ii.uib.no) Kilde: Java som første programmeringsspråk (3. utgave) Khalid Azim Mughal, Torill Hamre, Rolf W. Rasmussen Cappelen Akademisk
Detaljerprogrameksempel Et større En større problemstilling Plan for forelesingen Problemstillingen (en tekstfil) inneholdt ordet "TGA"
Et større programeksempel Hvordan løse et reelt problem med en objektorientert fremgangsmåte En større problemstilling I uke 4 skrev vi et program for å sjekke om et gen (en tekstfil) inneholdt ordet "TGA"
DetaljerProgrammering i C++ Løsningsforslag Eksamen høsten 2005
Programmering i C++ Eksamen høsten 2005 Simen Hagen Høgskolen i Oslo, Avdeling for Ingeniørutdanning 7. desember 2005 Generelt Denne eksamensoppgaven består av tre oppgaver, pluss en ekstraoppgave. Det
DetaljerUNIVERSITETET I OSLO
Side 1 UNIVERSITETET I OSLO Kandidatnr Det matematisk-naturvitenskapelige fakultet Eksamen i: PRØVEEKSAMEN INF1000 Eksamensdag: Prøveeksamen 22.11.2011 Tid for eksamen: 12:15-16:15 Oppgavesettet er på
DetaljerINF 1000 høsten 2011 Uke september
INF 1000 høsten 2011 Uke 2 30. september Grunnkurs i Objektorientert Programmering Institutt for Informatikk Universitetet i Oslo Siri Moe Jensen og Arne Maus 1 INF1000 undervisningen Forelesningene: Første
DetaljerLøsningsforslag Test 2
Løsningsforslag Test 2 Oppgave 1.1: Interface definerer et grensesnitt som kan implementeres av flere klasser. Dette gir en standardisert måte å kommunisere med objekter av en eller flere relaterte klasser.
DetaljerINF1000 undervisningen INF 1000 høsten 2011 Uke september
INF1000 undervisningen INF 1000 høsten 2011 Uke 2 30. september Grunnkurs i Objektorientert Programmering Institutt for Informatikk Universitetet i Oslo Siri Moe Jensen og Arne Maus Forelesningene: Første
DetaljerHva 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; }
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; Hva skrives ut på skjermen når følgende kode utføres? int [] tallene =
DetaljerLitt om pakker og mest om data inn og ut
Litt om pakker og mest om data inn og ut IN105-javainnogut-1 import java.io.*;. Data inn fra tastaturet lesemetode tastatur BufferedReader void lesemetode (String [ ] args) throws IOException {... /* sett
DetaljerOPPGAVE 1 OBLIGATORISKE OPPGAVER (OBLIG 1) (1) Uten å selv implementere og kjøre koden under, hva skriver koden ut til konsollen?
OPPGAVESETT 4 PROSEDYRER Oppgavesett 4 i Programmering: prosedyrer. I dette oppgavesettet blir du introdusert til programmering av prosedyrer i Java. Prosedyrer er også kjent som funksjoner eller subrutiner.
DetaljerUNIVERSITETET I OSLO
UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Eksamen i INF1000 Grunnkurs i objektorientert programmering Eksamensdag: 13. juni 2006 Tid for eksamen: 9.00 12.00 Oppgavesettet er på 5
DetaljerDagens forelesning. Java 13. Rollefordeling (variant 1) Rollefordeling (variant 2) Design av større programmer : fordeling av roller.
Dagens forelesning Java 13 Design av større programmer : fordeling av roller INF 101-13. mars 2003 Flere eksempler på bruk av objekter MVC-prinsippet MVC-prinsippet Flere eksempler på programmer med objekter
DetaljerLenkelister. Lister og køer. Kopi av utvalgte sider fra forelesningen.
Lenkelister. Lister og køer. Kopi av utvalgte sider fra forelesningen. "Taher" type: String : type: :... type: : inf1010student null michael@ifi.uio.no INF1010 26. januar 2012 (uke 4) 2 class Eks01 { public
DetaljerINF1010 våren 2017 Onsdag 25. januar. Litt om unntak i Java
INF1010 våren 2017 Onsdag 25. januar Litt om unntak i Java Stein Gjessing Nytt tema: Feilhåndtering (IO: Innlesing/Utskrift) n En metode som kan komme til å gjøre en IO-feil på fil må enten behandle denne
DetaljerINF1000 (Uke 5) Mer om løkker, arrayer og metoder
INF1000 (Uke 5) Mer om løkker, arrayer og metoder Grunnkurs i programmering Institutt for Informatikk Universitetet i Oslo Anja Bråthen Kristoffersen og Are Magnus Bruaset Praktisk informasjon Når disse
DetaljerUNIVERSITETET I OSLO
UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Kandidatnr Eksamen i INF1000 Grunnkurs i objektorientert programmering Eksamensdag: Onsdag 1. desember 2010 Tid for eksamen: 14.00 18.00
DetaljerEksamen i emnet INF100 Grunnkurs i programmering (Programmering I) og i emnet INF100-F Objektorientert programmering i Java I
Universitetet i Bergen Det matematisk naturvitenskapelige fakultet Institutt for informatikk Side 1 av 6 Bokmål Eksamen i emnet INF100 Grunnkurs i programmering (Programmering I) og i emnet INF100-F Objektorientert
DetaljerUNIVERSITETET I OSLO
Bokmål UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Eksamen i: INF1000 Grunnkurs i objektorientert programmering Eksamensdag: Fredag 4. desember 2015 Tid for eksamen: 14.30 (4 timer)
DetaljerJentetreff INF1000 Debugging i Java
Jentetreff INF1000 Debugging i Java Ingrid Grønlie Guren ingridgg@student.matnat.uio.no 11. november 2013 Kort om feilmeldinger i Java Java har to ulike type feilmeldinger som man kan få når man skriver
DetaljerTDT4100 Objektorientert programmering
Eksamensoppgave i TDT4100 Objektorientert programmering Torsdag 12. august 2010, kl. 09:00-13:00 Oppgaven er utarbeidet av faglærer Hallvard Trætteberg og kvalitetssikret av Svein Erik Bratsberg. Kontaktperson
DetaljerLøsningsforslag ukeoppg. 2: 31. aug - 6. sep (INF Høst 2011)
Løsningsforslag ukeoppg. 2: 31. aug - 6. sep (INF1000 - Høst 2011) Variabler, uttrykk, fogreninger (if-else) (kapittel 2 og 4.1-4.2 i læreboka, "Rett på Java" 3. utg.) Mål Få trening i teorien du trenger
DetaljerOblig 4 (av 4) INF1000, høsten 2012 Værdata, leveres innen 9. nov. kl. 23.59
Oblig 4 (av 4) INF1000, høsten 2012 Værdata, leveres innen 9. nov. kl. 23.59 Formål Formålet med denne oppgaven er å gi trening i hele pensum og i å lage et større program. Løsningen du lager skal være
DetaljerFra Python til Java, del 2
Fra Python til Java, del 2 Hvordan kjøre Java? På Ifis maskiner På egen maskin Et eksempel Array-er For-setninger Lesing og skriving Metoder Biblioteket Hva trenger vi egentlig? Å kjøre Java For å kunne
DetaljerSeminaroppgaver IN1010, uke 2
Seminaroppgaver IN1010, uke 2 1.a: Skriv en klasse HeiVerden.java. Klassen skal inneholde en main- metode (se på notatet fra tidligere). Inne i main -metoden skal programmet først la brukeren oppgi en
DetaljerUNIVERSITETET I OSLO
UNIVERSITETET I OSLO BOKMÅL Det matematisk-naturvitenskapelige fakultet Kontinuasjonseksamen i : Eksamensdag : INF1000 Grunnkurs i objektorientert programmering Fredag 7. januar Tid for eksamen : 09.00
DetaljerINF Puslegruppa - Kom i gang med PusleChat
INF1010 - Puslegruppa - Kom i gang med PusleChat Sigmund Hansen sigmunha@student.uio.no 31. mars 2011 Last ned dokumentasjonen til kildekoden. 1 1 Klassestruktur 1.1 inf1010.pusle.chat.client.chatclient
DetaljerIN Notat om I/O i Java
IN1010 - Notat om I/O i Java Mathias J.P. Stang, Tuva Kristine Thoresen, Ingrid Grønlie Guren 17. januar 2018 Dette notatet handler om I/O (input/output) i Java, og tar for seg innlesning fra terminal,
DetaljerDette er en demonstrasjonsside som vi skal bruke for å se litt nærmere på HTTP protokollen. Eksemplet vil også illustrere et par ting i PHP.
1 Dette er en demonstrasjonsside som vi skal bruke for å se litt nærmere på HTTP protokollen. Eksemplet vil også illustrere et par ting i PHP. (Læreboka kapittel 2-5) Legg merke til den første blokken,
DetaljerEks 1: Binærtre Binærtretraversering Eks 2: Binærtre og stakk
Godkjent oblig 1? Les e-post til din UiO-adresse Svar på e-post fra lablærer Ingen godkjenning før avholdt møte med lablærer Godkjentlistene brukes ikke til å informere om status for obligene Ta vare på
DetaljerINF1010 våren 2018 tirsdag 23. januar
INF1010 våren 2018 tirsdag 23. januar I/O og litt om bruk av unntak i Java Stein Gjessing Lesing fra terminal og fil navn: mininn Bruk Scanner: Scanner mininn = new Scanner(); Type: Scanner boolean
DetaljerINF1000 - Uke 10. Ukesoppgaver 10 24. oktober 2012
INF1000 - Uke 10 Ukesoppgaver 10 24. oktober 2012 Vanlige ukesoppgaver De første 4 oppgavene (Oppgave 1-4) handler om HashMap og bør absolutt gjøres før du starter på Oblig 4. Deretter er det en del repetisjonsoppgaver
DetaljerOblig 4Hybelhus litt mer tips enn i oppgaven
Oblig 4Hybelhus litt mer tips enn i oppgaven lørdag 19. okt 2013 Arne Maus Obligatorisk oppgave 4 Gulbrand Grås husleiesystem I denne oppgaven skal vi se på hans studenthus Utsyn. Utsyn består av 3 etasjer,
DetaljerUNIVERSITETET I OSLO
UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Kandidatnr Eksamen i INF1000 Grunnkurs i objektorientert programmering Eksamensdag: Onsdag 10. juni 2009 Tid for eksamen: 9.00 12.00 Oppgavesettet
DetaljerSide 1 av 11, prosesser, tråder, synkronisering, V. Holmstedt, HiO 2006
Side 1 av 11, prosesser, tråder, synkronisering, V. Holmstedt, HiO 2006 Prosesser og tråder Datamaskinen lager prosesser. En prosess organiserer arbeidet i et program ved å administrere tråder. Det er
DetaljerForelesning inf Java 4
Forelesning inf1000 - Java 4 Tema: Løkker Arrayer Metoder Ole Christian Lingjærde, 12. september 2012 Ole Chr. Lingjærde Institutt for informatikk, 29. august 2012 1 Repetisjon: arrayer Deklarere og opprette
DetaljerIN1010 våren januar. Objektorientering i Java
IN1010 våren 2018 23. januar Objektorientering i Java Om enhetstesting Om arrayer og noen klasser som kan ta vare på objekter Stein Gjessing Hva er objektorientert programmering? F.eks: En sort boks som
Detaljeri=0 Repetisjon: arrayer Forelesning inf Java 4 Repetisjon: nesting av løkker Repetisjon: nesting av løkker 0*0 0*2 0*3 0*1 0*4
Forelesning inf - Java 4 Repetisjon: arrayer Tema: Løkker Arrayer Metoder Ole Christian Lingjærde,. september Deklarere og opprette array - eksempler: int[] a = new int[]; String[] a = new String[]; I
DetaljerGjøre noe i hele treet = kalle på samme metode i alle objekten. Java datastruktur Klassestruktur
Godkjent oblig 1? Les e-post til din UiO-adresse Svar på e-post fra lablærer Ingen godkjenning før avholdt møte med lablærer Godkjentlistene brukes ikke til å informere om status for obligene Ta vare på
DetaljerForkurs INF1010. Dag 1. Andreas Færøvig Olsen Tuva Kristine Thoresen
Forkurs INF1010 Dag 1 Andreas Færøvig Olsen (andrefol@ifi.uio.no) Tuva Kristine Thoresen (tuvakt@ifi.uio.no) Institutt for Informatikk, 6. januar 2014 Forkurs INF1010 - dag 1 Hello, World! Typer Input/output
DetaljerDagens tema: 12 gode råd for en kompilatorskriver
Dagens tema: 12 gode råd for en kompilatorskriver Hvordan sjekke navn? Testutskrifter 12 gode råd Hva skal gjøres med navn? Sjekking av navn En kompilator må også sjekke riktig navnebruk: Det må ikke forekomme
DetaljerUNIVERSITETET I OSLO
FASIT UNIVERSITETET I OSLO BOKMÅL Det matematisk-naturvitenskapelige fakultet Kontinuasjonseksamen i : Eksamensdag : INF1000 Grunnkurs i objektorientert programmering Fredag 7. januar Tid for eksamen :
DetaljerINF1010 våren januar. Objektorientering i Java
INF1010 våren 2017 25. januar Objektorientering i Java Om enhetstesting (Repetisjon av INF1000 og lær deg Java for INF1001 og INF1100) Stein Gjessing Hva er objektorientert programmering? F.eks: En sort
DetaljerUNIVERSITETET I OSLO
UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Eksamen i INF1000 Grunnkurs i objektorientert programmering Eksamensdag: 11. juni 2004 Tid for eksamen: 9.00 12.00 Oppgavesettet er på 8
DetaljerI et Java-program må programmøren lage og starte hver tråd som programmet bruker. Er dette korrekt? Velg ett alternativ
INF2440-V18 Information INF2440 Vår 2018 eksamen Dato og tid: 11. juni 2018 09:00. Varighet: 4 timer Hjelpemidler: Alt skriftlig materiale er tillatt. Ingen elektroniske hjelpemidler er tillatt. Powerpoint
DetaljerUNIVERSITETET I OSLO
UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Prøveeksamen i : INF2440 Praktisk parallell programmering Prøveeksamensdag : 26. mai 2014 Tidspunkter: 11.00 Utdeling av prøveeksamen 15:15
Detaljer2 Om statiske variable/konstanter og statiske metoder.
Gaustadbekkdalen, januar 22 Litt om datastrukturer i Java Av Stein Gjessing, Institutt for informatikk, Universitetet i Oslo Innledning Dette notatet beskriver noe av det som foregår i primærlageret når
Detaljer23.09.2015. Introduksjon til objektorientert. programmering. Hva skjedde ~1967? Lokale (og globale) helter. Grunnkurs i objektorientert.
Grunnkurs i objektorientert programmering Introduksjon til objektorientert programmering INF1000 Høst 2015 Siri Moe Jensen INF1000 - Høst 2015 uke 5 1 Siri Moe Jensen INF1000 - Høst 2015 uke 5 2 Kristen
DetaljerINF1000 EKSTRATILBUD. Stoff fra uke 1-5 (6) 3. oktober 2012 Siri Moe Jensen
INF1000 EKSTRATILBUD Stoff fra uke 1-5 (6) 3. oktober 2012 Siri Moe Jensen PLAN FOR DAGEN gjennomgå stoff fra uke 1-5(6), men med en litt annen tilnærming kun gjennomgått stoff, men vekt på konsepter og
DetaljerInnhold uke 4. INF 1000 høsten 2011 Uke 4: 13. september. Deklarasjon av peker og opprettelse av arrayobjektet. Representasjon av array i Java
INF høsten 2 Uke 4: 3. september Grunnkurs i Objektorientert Programmering Institutt for Informatikk Universitetet i Oslo Siri Moe Jensen og Arne Maus Mål for uke 4: Innhold uke 4 Repetisjon m/ utvidelser:
DetaljerVelkommen til. INF våren 2016
Velkommen til INF1010 - våren 2016 Denne uken (onsdag og torsdag): Om INF1010 Java datastrukturer Klasser med parametre i Java Stein Gjessing Institutt for informatikk Universitetet i Oslo 1 1 INF1010
DetaljerForklaring til programmet AbstraktKontoTest.java med tilhørende filer Konto.java, KredittKonto.java, SpareKonto.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 Forklaring til programmet AbstraktKontoTest.java med tilhørende
DetaljerHØGSKOLEN I SØR-TRØNDELAG
HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring Kandidatnr: Eksamensdato: 14.desember 2007 Varighet: 0900-1200 Fagnummer: Fagnavn: Klasser: LO347D Web-applikasjoner med Java EE Nettstudenter
DetaljerINF1000 (Uke 4) Mer om forgreninger, While-løkker
INF1000 (Uke 4) Mer om forgreninger, While-løkker Grunnkurs i programmering Institutt for Informatikk Universitet i Oslo Are Magnus Bruaset og Anja B. Kristoffersen I dag Repetisjon easyio Enkle if-setninger
DetaljerInstallasjonsveiledning Visma Avendo, versjon 5.2
Installasjonsveiledning Visma Avendo, versjon 5.2 April 2011 Innhold Innledning... 1 Administrator... 1 Sikkerhetskopi... 1 Testfirmaet... 1 Før du starter installasjonen/oppgraderingen... 2 Nedlasting...
DetaljerHvis en person har inntekt < , så betaler han 10% skatt på alt, og ellers betaler han 10% skatt på de første og 30% på resten.
Oppgave 1: RPJ, kapittel 4, oppg. 2 INF1000 Plenumsgruppe 1, 22.09.02 Hvis en person har inntekt < 10 000, så betaler han 10% skatt på alt, og ellers betaler han 10% skatt på de første 10 000 og 30% på
DetaljerHvis en person har inntekt < , så betaler han 10% skatt på alt, og ellers betaler han 10% skatt på de første og 30% på resten.
Oppgave 1: RPJ, kapittel 4, oppg. 2 INF1000 Plenumsgruppe 1, 22.09.02 Hvis en person har inntekt < 10 000, så betaler han 10% skatt på alt, og ellers betaler han 10% skatt på de første 10 000 og 30% på
DetaljerINF 1010, vår 2005 Løsningsforslag uke 11
INF 1010, vår 2005 uke 11 Anders Brunland 11. april 2005 Oppgave 1 Oppgave 1 i kapittel 19, Rett på Java Er følgende metoder lovlige? Hovorfor/hvorfor ikke? a) void koknverter ( int mnd ) { konverterdato
DetaljerINF1010 Tråder J. Marit Nybakken Motivasjon. Å lage en tråd
J INF1010 Tråder J Marit Nybakken marnybak@ifi.uio.no Motivasjon Til nå har vi kun skrevet programmer der programmet bare var på ett sted i koden til enhver tid (bortsett fra når vi har drevet med GUI,
DetaljerOperativsystemer og grensesnitt
Operativsystemer og grensesnitt Ulike måter å bruke OS'et på Application Program Interface (API) Applikasjoner (ofte C-programmer) som f.eks. emacs, som bruker tjenestene i OS ved å kalle på funksjoner
DetaljerINF1000 Metoder. Marit Nybakken marnybak@ifi.uio.no 16. februar 2004
INF1000 Metoder Marit Nybakken marnybak@ifi.uio.no 16. februar 2004 Motivasjon Når man begynner å skrive store programmer, vil man fort oppleve at programmene blir uoversiktlige. Det blir vanskeligere
DetaljerI dag INF1000 (Uke 4) Mer om forgreninger, While-løkker. Tre måter å lese fra terminal. Repetisjon. Mer om forgrening While-løkker
I dag INF1000 (Uke 4) Mer om forgreninger, While-løkker Grunnkurs i programmering Institutt for Informatikk Universitet i Oslo Repetisjon easyio Enkle if-setninger Mer om forgrening While-løkker Are Magnus
DetaljerKapittel 1. Datamaskiner og programmeringsspråk. 1.1 Programmering
Kapittel 1 Datamaskiner og programmeringsspråk Dette kapitlet er en kort introduksjon til programmering. Vi vil se på hvordan man skriver, bygger og kjører programmer, samt illustrere noen sentrale programmeringsbegrep
DetaljerFeilmeldinger, brukerinput og kontrollflyt
Feilmeldinger, brukerinput og kontrollflyt Skjønne hvordan et program presist utføres og forberede seg på håndtering av feil INF1000, uke2 Ragnhild Kobro Runde Programmeringskrøll Programmet vil ikke kjøre
Detaljer6107 Operativsystemer og nettverk
6107 Operativsystemer og nettverk Labøving 5 Transportlaget: porter, forbindelser og pakkeformater Introduksjon I denne øvingen skal du studere TCP-protokollen og hvordan TCP etablerer og lukker forbindelser
DetaljerDin verktøykasse for anbud og prosjekt
Veiledning Serverinstallasjon 14.03.2013 Din verktøykasse for anbud og prosjekt 2013 CITEC AS v/sverre Andresen Side 1 av 27 Innholdsfortegnelse 1 INNLEDNING 3 2 DATABASEINSTALLASJON (SQL SERVER 2008)
DetaljerLøse reelle problemer
Løse reelle problemer Litt mer om løkker, metoder med returverdier, innlesing fra fil og strenger INF1000, uke5 Ragnhild Kobro Runde MER OM LØKKER Repetisjon fra forrige uke: while Syntaks: while (condition)
DetaljerOversikt. INF1000 Uke 1 time 2. Repetisjon - Introduksjon. Repetisjon - Program
Oversikt INF1000 Uke 1 time 2 Variable, enkle datatyper og tilordning Litt repetisjon Datamaskinen Programmeringsspråk Kompilering og kjøring av programmer Variabler, deklarasjoner og typer Tilordning
DetaljerProgrammering Høst 2017
Programmering Høst 2017 Tommy Abelsen Ingeniørfag - Data Innledning Dette er et dokument med litt informasjon og eksempler om kontrollstrukturer, samt oppgaver til forskjellige kontrollstrukturer. Spør
DetaljerFra Python til Java. En introduksjon til programmeringsspråkenes verden. Dag Langmyhr
Fra Python til Java En introduksjon til programmeringsspråkenes verden dag@ifi.uio.no Oversikt Introduksjon Python Java Noe er likt Noe bare ser anderledes ut Noe er helt forskjellig Et eksempel Klasser
DetaljerIntroduksjon til objektorientert programmering
Introduksjon til objektorientert programmering Samt litt mer om strenger og variable INF1000, uke6 Ragnhild Kobro Runde Grunnkurs i objektorientert programmering Strategi: Splitt og hersk Metoder kan brukes
DetaljerLese fra fil. INF1000 : Forelesning 5. Eksempel. De vanligste lesemetodene. Metoder:
Lese fra fil Filbehandling Tekster Ole Christian Lingjærde Gruppen for bioinformatikk Institutt for informatikk Universitetet i Oslo INF1000 : Forelesning 5 Vi må først importere pakken easyio Vi åpner
DetaljerINF1000 oppgaver til uke 38 (17 sep 23 sep)
INF1000 oppgaver til uke 38 (17 sep 23 sep) Formål: Øve på programmering med forgreninger, løkker og arrayer. Teoritimer (plenumsøvinger): 1. Oppgave 4 og 6 i kapittel 4 i læreboka. 2. En blokk er en samling
DetaljerINF1000 : Forelesning 4
INF1000 : Forelesning 4 Kort repetisjon av doble (nestede) løkker Mer om 1D-arrayer Introduksjon til 2D-arrayer Metoder Ole Christian Lingjærde Biomedisinsk forskningsgruppe Institutt for informatikk Universitetet
DetaljerINF Obligatorisk innlevering 5
INF1000 - Obligatorisk innlevering 5 Frist: 2. Oktober kl 22:00 Temaer denne uka: Klasser og objekter. I denne obligen skal du som nytt tema jobbe med klasser og objekter, i tillegg til å bruke det du
DetaljerEksamen i emnet INF100 Grunnkurs i programmering (Programmering I) og i emnet INF100-F Objektorientert programmering i Java I Løsningsforslag
Universitetet i Bergen Det matematisk naturvitenskapelige fakultet Institutt for informatikk Side 1 av 7 Eksamen i emnet INF100 Grunnkurs i programmering (Programmering I) og i emnet INF100-F Objektorientert
DetaljerDagens tema: 12 gode råd for en kompilatorskriver. Sjekking av navn. Lagring av navn. Hvordan finne et navn?
Dagens tema: 12 gode råd for en kompilatorskriver Hva skal gjøres med navn? Sjekking av navn Hvordan sjekke navn? Testutskrifter 12 gode råd En kompilator må også sjekke riktig navnebruk: Det må ikke forekomme
DetaljerLeksjon 7. Filer og unntak
6108 Programmering i Java Leksjon 7 Filer og unntak Del2: 7.2 og 7.4 Roy M. Istad 2015 Fil: Permanent lagring av data PrintWriter(filnavn) throws Exception usjekkede/sjekkede unntak? skriver.println(data-i-tekstlinje)
DetaljerINF1000 (Uke 15) Eksamen V 04
INF1000 (Uke 15) Eksamen V 04 Grunnkurs i programmering Institutt for Informatikk Universitetet i Oslo Anja Bråthen Kristoffersen og Are Magnus Bruaset 22-05-2006 2 22-05-2006 3 22-05-2006 4 Oppgave 1a
DetaljerINF1000 (Uke 15) Eksamen V 04
INF1000 (Uke 15) Eksamen V 04 Grunnkurs i programmering Institutt for Informatikk Universitetet i Oslo Anja Bråthen Kristoffersen og Are Magnus Bruaset 22-05-2006 2 22-05-2006 3 22-05-2006 4 Oppgave 1a
DetaljerDrosjesentralen. I-120: Obligatorisk oppgave 2, 2000
Drosjesentralen I-120: Obligatorisk oppgave 2, 2000 Frist Mandag 20. November 2000 kl.10:00, i skuff merket I120 på UA. Krav Se seksjon 4 for kravene til innlevering. Merk krav om generisk løsning for
DetaljerUNIVERSITETET I OSLO
Kandidatnummer: Bokmål UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Prøveeksamen i : INF1000 Grunnkurs i objektorientert programmering Prøveeksamensdag : Onsdag 12. november 2014 Tid
DetaljerTre måter å lese fra terminal. Java 4. Eksempel. Formatert utskrift til skjerm
Mer om easyio Mer om forgreninger Løkker 7. september 2004 Ole Christian Lingjærde Gruppen for bioinformatikk Institutt for informatikk Universitetet i Oslo Java 4 1 Tre måter å lese fra terminal Først:
DetaljerI dag INF1000 (Uke 4) Mer om forgreninger, While-løkker. Tre måter å lese fra terminal. Tre måter å lese fra terminal.
I dag INF1000 (Uke 4) Mer om forgreninger, While-løkker Grunnkurs i programmering Institutt for Informatikk Universitet i Oslo Repetisjon easyio Enkle if-setninger Mer om forgrening While-løkker Are Magnus
DetaljerGjennomgang av eksamen H99
Gjennomgang av eksamen H99 Administrasjon av kurser, studenter og påmeldinger Ole Christian Lingjærde Gruppen for bioinformatikk Institutt for Informatikk Universitetet i Oslo Oppgave 1 (15 %) (Besvares
DetaljerEn klasse er noe - en metode gjør noe (! / # <= (! * +!! ",-' %. "- -/ %.!#) )! " 0'%! * *$! "1-)) '' % '. 22!'( 7/ /! * 2 2! "*"% 8"%% 9 - -!
(')!'! "#$% &' # (! * +!! ",-' %. "- -/ %.!#) )! " 0'%! * *$! "1-)) '' % '. 22!'( - -'"* 3456% 7/ /! * 2 2! "*"% 8"%% 9 - -!: (! / #
Detaljer1. Finn klassene (hvilke objekter er det i problemet) 1. Dataene som beskriver problemet (hvilke objekter har vi og hvor mange klasser er det?
Obligatorisk oppgave 3 Gulbrand Grås husleiesystem Oblig 3hus litt mer tips enn i oppgaven I denne oppgaven skal vi se på hans studenthus Utsyn. Utsyn består av 3 etasjer, nummerert fra -3. I hver etasje
Detaljeri=0 i=1 Repetisjon: nesting av løkker INF1000 : Forelesning 4 Repetisjon: nesting av løkker Repetisjon: nesting av løkker j=0 j=1 j=2 j=3 j=4
Repetisjon: nesting av løkker Kort repetisjon av doble (nestede) løkker Mer om D-arrayer Introduksjon til D-arrayer Metoder Ole Christian Lingjærde Biomedisinsk forskningsgruppe Institutt for informatikk
Detaljer