Javaprogrammering
för D3 m fl
måndag 14 januari 2008 kl 14:00 - 19:00 i L003
Gäller som tentamen för:
DT3010 Datateknik C, Java för gränssnitt och nätverk, provkod 0100
JAP004 Java-programmering, provkod 0300
Hjälpmedel: | Inga hjälpmedel. |
Poängkrav: |
Maximal poäng är 40.
För godkänt betyg (3 respektive G) krävs 20 poäng. |
Resultat och lösningar: | Meddelas på kursens hemsida eller via e-post senast måndag 4 februari 2008. |
Visning och frågestund: |
Måndag 11 februari 2008 kl 12:00-12:30 i mitt rum (T2220).
Efter visningen kan tentorna hämtas på institutionen. |
Examinator och jourhavande: | Thomas Padron-McCarthy, telefon 070-73 47 013. |
Skriv inte svaren till uppgifterna direkt här, utan skriv på lösa blad och lämna in.
Det ska finnas två inmatningsfält för att mata in tal, knappar för vanliga räkneoperationer, och ett utmatningsfält. Här har vi tryckt på minusknappen:
Knapparna för addition, subtraktion, multiplikation och division ska beräkna resultatet utifrån de två tal man matat in. Knapparna för kvadratrot och kvadrat ska använda sig av bara det första talet.
Om man försöker utföra in en felaktig operation, ska texten "Error!" skrivas ut i resultatfältet. Fel som ska hanteras är:
Använd exempelvis textfält (JTextField) för inmatningen och presentationen. Knapparna kan vara av klassen JButton. Klienten behöver inte se ut exakt som på bilderna.
Klienten ska koppla upp sig mot servern, och skicka de två talen samt vilken operation som valts. Servern ska utföra felkontrollen och beräkningarna, och skicka tillbaka resultatet som ska presenteras av klienten.
(Vänd blad!)
a) (2p) Designa och beskriv det kommunikationsprotokoll som används mellan klienterna och servern.
b) (10p) Skriv klienten. Servern körs på datorn mathserver.oru.se, och lyssnar på port 2000.
c) (12p) Skriv serverapplikationen. Servern behöver inte ha något grafiskt gränssnitt eller skriva ut något. Den måste kunna hantera flera klienter samtidigt.
d) (1p) Den här lösningen, med en klient och en server, är förstås ganska dum i det här fallet. Varför är den dum?
fungera, och den ska ge de här utskrifterna:public static void main(String[] args) { Punkt p1 = new Punkt(1, 1); Punkt p2 = new Punkt(2, 3); Figur p3 = new Punkt(3, 3); Sträcka s1 = new Sträcka(1, 1, 2, 3); Sträcka s2 = new Sträcka(p1, p2); if (s1 == s2) System.out.println("s1 och s2 är samma sträcka."); else System.out.println("s1 och s2 är INTE samma sträcka."); if (s1.equals(s2)) System.out.println("s1 och s2 är likadana sträckor."); else System.out.println("s1 och s2 är INTE likadana sträckor."); Triangel t1 = new Triangel(1, 1, 2, 3, 3, 3); } // main
s1 och s2 är INTE samma sträcka. s1 och s2 är likadana sträckor.
b) (3p) Visa med ett tydligt exempel hur man kan ersätta multipelt arv i Java med en annan mekanism i språket.
c) (1p) Visa och förklara varför man inte får problemet eller problemen från deluppgift a med denna andra mekanism.
java.lang.Object java.net.ServerSocket
ServerSocket(int port)
Creates a server socket, bound to the specified port.
Socket
accept()
Listens for a connection to be made to this socket and accepts
it.
void
close()
Closes this socket.
java.lang.Object java.net.Socket
Socket()
Creates an unconnected socket, with the
system-default type of SocketImpl.
Socket(InetAddress address,
int port)
Creates a stream socket and connects it to the specified port
number at the specified IP address.
void
close()
Closes this socket.
InputStream
getInputStream()
Returns an input stream for this socket.
OutputStream
getOutputStream()
Returns an output stream for this socket.
java.lang.Object java.io.Reader java.io.BufferedReader
BufferedReader(Reader in)
Create a buffering character-input stream that uses a default-sized
input buffer.
void
close()
Close the stream.
int
read()
Read a single character.
String
readLine()
Read a line of text.
java.lang.Object java.io.Reader java.io.InputStreamReader
InputStreamReader(InputStream in)
Create an InputStreamReader that uses the default charset.
void
close()
Close the stream.
int
read()
Read a single character.
java.lang.Object java.io.Writer java.io.PrintWriter
PrintWriter(OutputStream out)
Create a new PrintWriter, without automatic line flushing, from an
existing OutputStream.
PrintWriter(OutputStream out,
boolean autoFlush)
Create a new PrintWriter from an existing OutputStream.
void
close()
Close the stream.
void
println()
Terminate the current line by writing the line separator string.
void
println(String x)
Print a String and then terminate the line.
java.lang.Object java.net.InetAddress
public static InetAddress getByName(String host) throws UnknownHostExceptionDetermines the IP address of a host, given the host's name.