Gästföreläsningen. Synpunkter?

Relevanta dokument
Gästföreläsningen. Synpunkter?

Erfarenheter från biljardprojektet. måndag 23 november 15

Klasser som datastrukturer

Undantagshantering. Fördjupad Java. Undantag. Fel. Grupper av Undantag. Fånga Undantag

Undantagshantering. Fördjupad Java. Fel. Undantag. Fånga Undantag. Grupper av Undantag

Fördjupad Java. Undantagshantering. Fel

Att skriva till och läsa från terminalfönstret

OOP Objekt-orienterad programmering

Undantag. Engelska: exceptions. Skansholm: exceptionella händelser

Tung bakgrundsaktivitet t.ex. Aktiva objekt t.ex. Animering, simulering. DD2385 Programutvecklingsteknik Några bilder till föreläsning 9 6/5 2013

Javas Exceptions. DD2385 Programutvecklingsteknik Fler bilder till föreläsning 7 23/ Kort om Javas Exceptions Trådar i Java

Surfning. Webbklienter och webbservrar. Specialskrivna webbservrar. Kommunikation med sockets

Objektorienterad Programkonstruktion. Föreläsning 4 8 nov 2016

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2

Objektorienterad Programkonstruktion. Föreläsning 11 6 dec 2016

Kungl. Tekn. Högskolan Förel 1, bild 1 Föreläsning 1: Introduktion ffl Kursinnehåll ffl Javarepetition ffl Referenser ffl Nyckelordet static ffl Klass

Idag. Exempel, version 2. Exempel, version 3. Ett lite större exempel

Instuderingsuppgifter läsvecka 6 - LÖSNINGAR

10 Kommunikation i Java

Språkkonventioner och redigering av tal.

Tentamen Nätverksprogrammering Lösningsförslag

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 8 Erik Nilsson, Institutionen för Datavetenskap, LiU

Översikt. Skriva och läsa data. Kontrollflöde. Två sorters loopar. For-loop. For-loop

Tentamensskrivning Nätverksprogrammering (EDA095 - FED) , kl 8-13

Föreläsnings 9 - Exceptions, I/O

Objektorienterad programmering i Java Undantag Sven-Olof Nyström Uppsala Universitet Skansholm: Kapitel 11

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

F2 Java I/O - strömmar Meddelandesändning med TCP

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

Tentamen Nätverksprogrammering Lösningsförslag

LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p

Objektorienterad programmering i Java Undantag Sven-Olof Nyström Uppsala Universitet Skansholm: Kapitel 11

Föreläsning 14. Filhantering

DI-institutionen Sid 1 av 6 Hans-Edy Mårtensson Sten Sundin

Föreläsning 2, vecka 8: Repetition

Tentamen Nätverksprogrammering Lösningsförslag

Objektorienterad Programmering DAT043. Föreläsning 4 23/1-18 Moa Johansson (delvis baserat på Fredrik Lindblads material)

Tentamen Nätverksprogrammering Lösningsförslag

Föreläsning 8 - del 2: Objektorienterad programmering - avancerat

Lösningar för tenta 2 DAT043,

Kort om klasser och objekt En introduktion till GUI-programmering i Java

Föreläsning 5 Meddelandesändning med TCP

Föreläsning 6: Metoder och fält (arrays)

FÖRSLAG TILL LÖSNINGAR FÖR TENTAMEN I INTERNETPROGRAMMERING MED JAVA, 5p för SY , kl

Idag. Javas datatyper, arrayer, referenssemantik. Arv, polymorfi, typregler, typkonvertering. Tänker inte säga nåt om det som är likadant som i C.

Dagens program. Programmeringsteknik och Matlab. Objektorienterad programmering. Vad är vitsen med att ha både metoder och data i objekten?

Objektorienterad programmering E. Telefonboken, än en gång. Gränssnitt. Telefonboken med gränssnitt specificerat, del 1.

F4. programmeringsteknik och Matlab

2D1311 Programmeringsteknik för Bio1 och Bio2, vt 2003 Fiktivt prov På flervalsfrågorna är endast ett svar rätt om inget annat anges i frågan! Det rik

F5 Meddelandesändning med TCP

Objektorienterad programmering i Java

Föreläsning 11 Aktiva objekt och trådar, strömmar, kommunikation DAT043,

DI-institutionen Sid 1 av 5 Hans-Edy Mårtensson Sten Sundin Micael Karlsson

Variabler som hör till enskilda objekt. Deklareras på översta nivån i klassen och i regel som private.

1 Comparator & Comparable

DUGGA: Objektorienterade applikationer. Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad.

Transport Layer. Transport Layer. F9 Meddelandesändning med UDP EDA095 Nätverksprogrammering. Java och UDP TCP/UDP

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList.

DD2310. Javaprogrammering för Pythonprogrammerare. Johan Boye

Felhantering. Andra brott mot språkets regler. Man kan också i programmet bryta mot ett antal olika regler som gäller. Exempelvis:

1 Uppgift 1. a) Skapar ett Company-objekt med hjälp av den överlagrade konstruktorn. Du kan själv välja värden på instansvariablerna.

F8 Meddelandesändning med UDP

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU

Command line argumenter. Objektorienterad Programmering (TDDC77) Vad blir resultatet? Nu då? Ahmed Rezine. Hösttermin 2016

Objektorienterad Programmering (TDDC77)

Objektorienterad Programkonstruktion. Föreläsning 10 7 dec 2015

Tentamen ID1004 Objektorienterad programmering May 29, 2012

Monday, November 16, Senaste Labben

Dagens föreläsning. Arrayer och klasser. Medan ni väntar: Gå till m.voto.se/prog11 och svara på några gamla tentamensfrågor! (26 januari 2018 F3 1 )

F2 Java I/O - strömmar Meddelandesändning med TCP EDA095 Nätverksprogrammering

Föreläsning 12. Föreläsning 12. Rörliga figurer Klassen Timer Undantag Något om applets. Rörliga appletsfigurer Klassen Timer Undantag

Java: Utvecklingsverktyg, datatyper, kontrollstrukturer

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 4 Erik Nilsson, Institutionen för Datavetenskap, LiU

JAVAUTVECKLING LEKTION 7

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 7 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Kapitel 6. Hakparenteser fšr att ange index MŒnga všrden av samma typ

Föreläsning 3. Stack

Outline. Objektorienterad Programmering (TDDC77) En frukt har ett namn. Man kan lägga en frukt i en korg... Hashing. Undantag. Ahmed Rezine.

Objektorienterad Programmering (TDDC77)

Tentamen , Grundläggande programmering i Java

Objektorienterad programmering. Fält som funktionsresultat. Mer om fält: att uppdatera ett parameterfält. Kontrast: Parametrar av primitiv typ

Omtentamen för TDA540 Objektorienterad Programmering. Institutionen för Datavetenskap CTH HT-17, TDA540. Dag: , Tid:

Tentamen , Introduktion till Java, dtaa98, dtea53

Föreläsning 5 Meddelandesändning med TCP

Hämta data mha URLer Föreläsning 2b. Innehåll Klassen URL

Föreläsning 3: Abstrakta datastrukturer, kö, stack, lista

Omtentamen för TDA540 Objektorienterad Programmering. Institutionen för Datavetenskap CTH HT-17, TDA540. Dag: , Tid:

Frivillig Java-swing-Graphics-lab Programmeringsteknik MN1 vt02

Grundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 14

Inre klasser Anonyma klasser Kloning I/O-ramverket. anonyma klasser

Tänk på följande: Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Objektorientering. Objekt och metoder. Objektorientering. Viktiga begrepp. Klass. Objekt. Deklarativ programmering

Tentamensskrivning Nätverksprogrammering (EDA095) , kl 8-13

Skillnader mellan Python och Java

TENTAMEN. Kurs: Objektorienterad programmeringsmetodik 5DV133 Ansvarig lärare: Anders Broberg. VT-13 Datum: Tid: kl

DAT043 Objektorienterad Programmering

Tentamen för TDA540 Objektorienterad Programmering. Institutionen för Datavetenskap CTH HT-16, TDA540. Dag: , Tid:

Classes och Interfaces, Objects och References, Initialization

Transkript:

Gästföreläsningen Synpunkter?

Syfte: Att stadfästa Interface överenskommelser mellan flera personer som använder varandras kod.

Interface Syfte: Att stadfästa överenskommelser mellan flera personer som använder varandras kod. Du definierar ett interface <=> Du ställer ett krav på den som använder din kod. Kräver: ska finnas en viss metod med viss signatur interface TwoDimBoard { public int mark(int x, int y);

Interface Syfte: Att stadfästa överenskommelser mellan flera personer som använder varandras kod. Du definierar ett interface <=> Du ställer ett krav på den som använder din kod. Du implementerar ett interface <=> Du använder någons kod och uppfyller ett krav som någon ställt. Kräver: ska finnas en viss metod med viss signatur interface TwoDimBoard { public int mark(int x, int y); Tillhandahåller metoden class Board implements TwoDimBoard {... public int mark(int x, int y) { return squares[x][y].mark;...

Exceptions (L&L kap 10) Division med 0 Array index out of bounds File not found onormal I/O-händelse Null reference...

try - catch Python Java try: a = 1/b except: a = 0 try { a = 1/b; catch (Exception e) { a = 0; except i Python heter catch i Java. Inga kolon, men krullparanteser. Man måste alltid ange vilka exceptions som avses inom parantes efter catch.

try statement try block catch block aka catch clause aka exception handler try { a = 1/b; catch (Exception e) { a = 0; Grundidé: Börja köra try block. Om ett fel inträffar avbryt, och kör catch block

try { c1; c2; catch (Exception e) { c3; c4; c5; Allt OK c1 c2 Exception inträffar c3 c4 c5

Exception classes Detta är bara en liten del! En stor hierarki av klasser. Se L&L fig 10.1

Varje klass svarar mot en typ av händelse. Klasserna är ordnade hierarkiskt och underklasserna ärver överklasserna på vanligt sätt. Exempel: Exception är en klass för alla slags exception. IOException är en underklass för en del exceptions, nämligen de som orsakas av IO. I varje catch ska man alltid deklarera vilken typ av exception som man ska fånga. Till ett try can finnas flera catch för att fånga olika typer av exception.

try { Ett kodblock som kan ge upphov till många olika exception catch (IndexOutOfBoundsException e) { Kodblock som hanterar indexeringsfel catch (IOException e) { Kodblock som hanterar IO-fel Beroende på vilket slags exception som inträffar i try blocket kommer man till rätt catch block. Det första blocket som svarar mot det inträffade exception Try blocket måste ha minst ett catch block

Exception objects När exception inträffar skapar Java ett objekt: en instans av klassen. Objektet innehåller information om händelsen. Objektet kan man komma åt i motsvarande catch.

Objektets namn skrivs efter klassnamnet inom paranteserna efter catch. Det ser alltså lite ut som en deklaration. Objektnamnet räknas som en lokal variabel med scope som är resten av denna catch clause Exception object catch (IndexOutOfBoundsException e) { System.out.println( Exception + e.getmessage() ) Använd exception object för att få felmeddelande Till exempel har ett sådant objekt ett meddelande som nås med metoden getmessage()

finally Efter alla catch block får det finnas (men måste inte finnas) ett finally block. Ett finally block utförs hur try blocket än avslutas - vare sig någon exception inträffat eller ej. Även om try blocket avslutas med en return eller break. Användning: för att säkerställa att reserverade resurser (tex filer) släpps.

Grundmönster för IO try { Ett kodblock som öppnar en fil/enhet och försöker läsa/skriva catch (IOException e) { Kod som upplyser användaren om att något gick fel finally { Kod som stänger filen/enheten

Checked exceptions Terminologi: exception inträffar = exception kastas, exception is thrown En del exception classes kallas checked De som programmeraren borde förutse och ta hand om Typexempel: IOException En metod som kan kasta ett sådant måste antingen själv ta hand om det i en catch eller tydligt deklarera att anroparen måste ta hand om det

En metod som läser fil och hanterar eventuella exception själv: void readfile() { try { Ett kodblock som öppnar en fil och försöker läsa catch (IOException e) { Kod som upplyser om att något gick fel vid läsning finally { Kod som stänger filen

En metod som läser fil och låter anroparen hantera exceptions Ny deklaration i metodhuvudet void readfile() throws IOException { Ett kodblock som öppnar en fil och försöker läsa Notera: ingen try - catch här Med ordet throws följt av exceptiontyp deklareras att metoden kan kasta sådana exceptions utan att själv fånga dem. De bör fångas av anroparen: try { readfile() catch (IOException e) {...

OBS: Java håller jättenoga reda på vad som kan orsaka IOException (och andra checked exceptions) Om du använder något sådant - tex öppnar en fil - så vet Java det. Du måste ta hand om ett IOException i en catch. Annars kompileringsfel (netbeans protesterar och du kan inte ens köra programmet). Antingen i samma metod där IOException kan inträffa, eller i den anropande metoden. I det senare fallet måste du skriva throws IOException i huvudet på den metod som ger upphov till det.

Sammanfattning try {... catch (Exception e) {... finally {... Får finnas flera catch Varje måste ange felklass lokal variabel e är ett exceptionobjekt finally är bra för att släppa resurser En metod som kan åstadkomma IOException måste antingen fånga dem själv eller deklareras med throws IOException

Javas IOsystem http://java.sun.com/docs/books/tutorial/essential/io/ Uppbyggt runt så kallade strömmar (stream) En ström: enkelriktad överföring av data Input stream: från något externt till programmet Output stream: från programmet till något externt Externt : ex annan enhet, fil, url, annan dator import java.io.*;

Lokal användare System.in Javaprogram Filer Andra datorer via internet xxx xxxxxx xx xx xxxxxxx xxxx xxxxxxxxx xxxxxxxxx xxxxxxxxxxxx xxxxx xxxxxx xxx xxxxxx xx xx xxxxxxx xxxx xxxxxxxxx xxxxxxxxx xxxxxxxxxxxx xxxxx xxxxxx xxx xxxxxx xx xx xxxxxxx xxxx xxxxxxxxx xxxxxxxxx xxxxxxxxxxxx xxxxx xxxxxx

Strömtyper Olika slags strömmar för att överföra olika slags saker Byte stream Character stream Data stream Object stream

Strömtyper = klasser ObjectOutputStream DataInputStream FileReader... Som alltid: omöjligt att lära sig allt. Lär dig ett exempel som funkar och var du ska slå upp information

Strömmar = objekt Instansiera en klass för att få en ström Typiskt: konstruktorn har en parameter som talar om vart strömmen leder. ex: new FileReader("words.txt") Detta returnerar en inputström från filen words.txt Den bör bindas till en variabel så att vi kan använda den, ex wordsinput = new FileReader("words.txt") Sådana variabler ska förstås deklareras som alla andra. Ofta ligger viktiga strömmar i instansvariabler.

read / write Inputströmobjekt har metoder för att läsa från strömmen. Typiskt heter de något med read. Exakt vad och vilken signatur beror på strömmen. Ex: readobject() På samma sätt har outputströmmar metoder för att skriva till strömmen. Alla metoder för att skapa, skriva till eller läsa från strömmar kan kasta IOException, och måste ha exception handlers

Exempel: filkopiering FileReader inputstream = null; FileWriter outputstream = null; try { Skapar strömmar inputstream = new FileReader("xanadu.txt"); till och från filer outputstream = new FileWriter("characteroutput.txt"); int c; while ((c = inputstream.read())!= -1) { outputstream.write(c); catch (IOException e) { System.out.println( Error: +e.getmessage()); finally { if (inputstream!= null) inputstream.close(); if (outputstream!= null) outputstream.close(); inputstream.read() läser ett tecken i form av heltal. Do för outputstream.write() Exception kan kastas när vi skapar, läser eller skriver Se till att stänga filerna när vi är klara

Exempel: ObjectStream Den mest generella strömmen Kan transportera objekt av skilda slag ObjectOutputStream och ObjectInputStream Wrapping: Konstruktorn tar en parameter som är en dataström. Returnerar en objektström som använder denna

Javaprogram mystream xxx xxxxxx xx xx xxxxxxx xxxx xxxxxxxxx xxxxxxxxx xxxxxxxxxxxx xxxxx xxxxxx xxx xxxxxx xx xx xxxxxxx xxxx xxxxxxxxx xxxxxxxxx xxxxxxxxxxxx xxxxx xxxxxx xxx xxxxxx xx xx xxxxxxx xxxx xxxxxxxxx xxxxxxxxx xxxxxxxxxxxx xxxxx xxxxxx

Javaprogram myobjectstream mystream xxx xxxxxx xx xx xxxxxxx xxxx xxxxxxxxx xxxxxxxxx xxxxxxxxxxxx xxxxx xxxxxx xxx xxxxxx xx xx xxxxxxx xxxx xxxxxxxxx xxxxxxxxx xxxxxxxxxxxx xxxxx xxxxxx xxx xxxxxx xx xx xxxxxxx xxxx xxxxxxxxx xxxxxxxxx xxxxxxxxxxxx xxxxx xxxxxx ObjectInputStream myobjectstream = new ObjectInputStream(myStream)

ObjectOutputStream har en metod writeobject() Den är void och tar en parameter: det objekt som ska skrivas. parametern måste implementera det speciella interfacet Serializable. De flesta enkla klasser som String implementerar detta. Vill du att objekten i en egen klass ska kunna skickas skriv implements Serializable i klasshuvudet. Interfacet är tomt men talar om för Java att finna ett sätt att överföra objekten

ObjectInputStream har en metod readobject() Den har inga parametrar och returnerar något av typ Object. Object är Javas översta klass i klasshierarkin: alla klasser är underklasser till Object. Använd casting för att specifiera objektet närmare Anrop till readobject message = (String)myObjectStream.readObject(); Downcasting till String. Gör så att högerledet anses ha typ String. Om det i själva verket har annan typ kastas ett exception

Paradigm try { String message = (String)myObjectStream.readObject(); process the message as a String catch (ClassNotFoundException e) { System.out.println("Unknown object received");

class MyData implements Serializable { int a; String name;..... Exempel MyData dataitem; ObjectOutputStream output;... try { output = new ObjectOutputStream( new FileOutputStream( myfile )); catch (IOException e) { System.out.println ( Error opening file );... try { output.writeobject(dataitem); catch (IOException e) { System.out.println ( Error writing to file );

class MyData implements Serializable { int a; String name;... MyData dataitem; ObjectInputStream input;... try { input = new ObjectInputStream( new FileInputStream( myfile )); catch (IOException e) { System.out.println ( Error opening file );... try { dataitem = (MyData)input.readObject(); catch (ClassNotFoundException e) { System.out.println ( Incorrect object on file ); catch (IOException e) { System.out.println ( Error reading from file ); Exempel

Nätverksprogrammering http://java.sun.com/docs/books/tutorial/networking/sockets/ Hur man skickar data mellan datorer via internet

Internet Protokoll: Serie konventioner för hur kommunikation ska gå till IP: Internet Protocol, ett protokoll som används vid internet. Vanligast nu är IPv4. Paketorienterat (jfr skicka avgränsade paket) TCP: Transmission Control Protocol, använder sig av IP. Förbindelseorieterat (jfr ett telefonsamtal) Sockets: ett programmeringsgränssnitt för att använda TCP. Java har olika Socketklasser: import java.net.*;

IP-adresser Varje internetansluten dator har en IP-adress. Kan jämföras med telefonnummer. För att kontakta datorn måste man ange dess IP-adress. En IP-adress består av 4 bytes separerade av punkt. Varje byte är ett tal mellan 0 och 255. Exempel: min IP just nu är 130.238.11.198 IP-adressen ändras när datorn rör sig fysiskt mellan olika nät (till skillnad från tex telefonnummer). Den speciella adressen localhost leder alltid tillbaka till samma dator. Bra när man testar.

Vad är min IP? InetAddress.getLocalHost().getHostAddress() Returnerar en String som representerar IPadressen. OBS: Den kastar IOException try { title = "I am at IP "+InetAddress.getLocalHost().getHostAddress(); catch (IOException e) { title = "Unable to determine IP";

Portar Varje dator har 216 = 65536 stycken portar Portarna har ingen fysisk motsvarighet. Kan anses vara lokala anknytningar inom datorn. Varje tillämpning har en specifik port den kan bli kontaktad på. För din egen tillämpning: välj ett portnummer. Helst inte ett som redan är i bruk. Undvik nummer mindre än 1024.

Sockets Ett sätt att etablera TCP-förbindelse mellan två datorer. När förbindelsen väl är igång är situationen symmetrisk: Båda datorerna har en inputstream och en outputstream. Uppkopplingsfasen är asymmetrisk. Den ena, Client, kopplar upp aktivt mot ett visst IP och viss port. Den andra, Server, lyssnar efter uppkopplingsförsök vid en viss port. Jfr telefonsamtal. Den ena ringer och den andra blir uppringd, men sedan är samtalet symmetriskt

Klassen Socket Objekt av klassen socket svarar mot existerande uppkopplingar mot andra datorer. De har metoder bl.a. för att ta fram strömmarna och för att stänga sig. OutputStream getoutputstream() InputStream getinputstream() För att skicka data, ta fram Outputströmmen och skriv på den. Samma för input. void close()

Kommunikation Symmetrisk. En förbindelse mellan två datorer använder en socket i vardera datorn, och kan ta fram input och outputströmmar

Kommunikation Symmetrisk. En förbindelse mellan två datorer använder en socket i vardera datorn, och kan ta fram input och outputströmmar myinput = mysocket.getinputstream()

Kommunikation Symmetrisk. En förbindelse mellan två datorer använder en socket i vardera datorn, och kan ta fram input och outputströmmar myinput = mysocket.getinputstream() myoutput = mysocket.getoutputstream()

Uppkoppling Asymmetrisk. Det finns en Client sida och en Server sida. Client skapar sin socket genom att helt enkelt använda konstruktorn Socket(). Den tar två parametrar: 1. IP-numret att koppla upp sig mot (String) 2. Portnumret för tillämpningen (int) mysocket = new Socket( 130.238.11.198, 12345)

OBS: Kastar IOException om uppkopplingen misslyckades. try { mysocket = new Socket( 130.238.11.198, 12345) catch (IOException e) { System.out.println( Could not connect to server )

Servern använder klassen ServerSocket. Konstruktorn har en parameter: portnumret den ska betjäna (int) Den skapar ett ServerSocketobjekt. Detta objekt har en metod accept() som väntar på anslutningar från en client När en sådan kommer returnerar accept() en Socket. myserver = new ServerSocket(12345); mysocket = myserver.accept(); OBS: detta kastar också IOException och bör omslutas av try-catch.

Client mysocket = new Socket(ipNumber, port) Server myserver = new ServerSocket(port); mysocket = myserver.accept(); Uppkoppling klar myinput = mysocket.getinputstream() myoutput = mysocket.getoutputstream() myinput = mysocket.getinputstream() myoutput = mysocket.getoutputstream() objectinput = new ObjectInputStream(myInput) objectinput = new ObjectInputStream(myInput) objectoutput = new ObjectOutputStream(myOutput) Strömmar klara objectoutput = new ObjectOutputStream(myOutput) objectoutput.writeobject( Hello ) m = (String)objectInput.read() m = (String)objectInput.read() objectoutput.writeobject( Hi )

Superviktigt Allt måste omslutas av en try-catch med ett finally block. Finally blocket måste göra close() på alla strömmar och sockets. I annat fall kan en port forsätta vara reserverad efter att programmet slutat. Om det händer, logga ut och logga in

Exempel En meddelandesändare: Läser in ett meddelande och skickar det. Klassen Sender gör allt jobb public class Main { public static void main(string[] args) { new Sender(); Instansvariabler: sådant som lever mellan metodanrop class Sender { ObjectOutputStream output; Socket socket; String ip; int port; String message;

Konstruktor Tre faser, alla i ett try block Sender () { try { getdata(); getconnection(); sendmessage(); catch (IOException e) { System.out.println("Det misslyckades: "+e.getmessage()); finally { close();

Avslut Stäng allt du kan void close() { try { if (socket!= null) socket.close(); if (output!= null) output.close(); catch (IOException e) { System.out.println("Error in closing");

Avändarinteraktion Använd Swings dialoger. Obs att portnumret måste omvandlas till int. void getdata () { ip = JOptionPane.showInputDialog("To what IP?", null); String portstring = JOptionPane.showInputDialog("To what port?", null); port = Integer.parseInt(portString); message = JOptionPane.showInputDialog("What message?", null);

Kommunikation void getconnection () throws IOException { socket = new Socket(ip,port); output = new ObjectOutputStream(socket.getOutputStream()); output.flush(); flush() sägs vara bra att göra på ny ström void sendmessage () throws IOException { output.writeobject(message);

Java utan netbeans Du har gjort ett program i netbeans. Hur exportera det så att andra kan köra det utan att använda netbeans? Välj projektet som main project. Högerklicka på det och välj Clean and Build. Därmed skapas en.jar fil: en fil som innehåller kompilerad Java. För att hitta filen gå till mappen NetBeansProjects. Välj undermappen med rätt projekt, och sedan undermapp dist. Där ligger.jar-filen. Om Java är rätt installerat (netbeans behövs inte) räcker det att dubbelklicka på.jar filen för att köra programmet Demo

Ladda ner och kör: http://user.it.uu.se/~joachim/send.jar

Motsvarande mottagare En meddelandemottagare: Tar emot ett meddelande och visar det. public class Main { public static void main(string[] args) { new Receiver(); class Receiver extends JFrame { final int port = 12345; Socket socket; ObjectInputStream input; ServerSocket serversocket; String message;

Konstruktor visa IP Vanliga grafikköret Börja lyssna efter anrop Oändlig loop (sluta genom att stänga fönstret!) Receiver () { add(new JLabel("My IP is: " + myip())); setdefaultcloseoperation(jframe.exit_on_close); pack(); setvisible(true); try { startserver(); while (true) { getsocket(); getmessage(); displaymessage(); catch (IOException e) { System.out.println("Det misslyckades: " + e.getmessage()); finally { close();

myip String myip() { try { return InetAddress.getLocalHost().getHostAddress(); catch (IOException e) { return "Couldn't determine IP: "+e.getmessage();

close void close() { try { if (serversocket!= null) serversocket.close(); if (socket!= null) socket.close(); if (input!= null) input.close(); catch (IOException e) { System.out.println("Error in closing");

Kommunikation void startserver () throws IOException { serversocket = new ServerSocket(port); void getsocket() throws IOException { socket = serversocket.accept(); input = new ObjectInputStream (socket.getinputstream()); void getmessage() throws IOException { try { message = (String)input.readObject(); catch (ClassNotFoundException e) { System.out.println("Unexpected object class: + e.getmessage());

Användarinteraktion void displaymessage() { JOptionPane.showMessageDialog(this, message);

Uppgift: gör en chat Nästa lab Ny partner. Välj fritt utom den ni labbat med de tre senaste gångerna Förberedelser: L&L kap 10, valfritt om strömmar och sockets. Börja med att göra en grov design. Det mesta kan ligga i samma klass men dela upp i metoder, bestäm signatur och vad de ska göra innan ni börjar koda. Efter denna lab: projekt, där ni får välja mellan att bygga ut chatten eller bygga ut luffarschacket.