Programmering i Java
för Dataingenjörsprogrammet m fl
tisdag 16 augusti 2005 kl 08:00 - 13:00 i L003
Hjälpmedel: | Inga hjälpmedel. |
Poängkrav: |
Maximal poäng är 40.
För betyget 3 krävs 20 poäng. För betyget 4 krävs 27 poäng. För betyget 5 krävs 33 poäng. |
Resultat och lösningar: | Meddelas på kursens hemsida senast tisdag 6 september 2005. |
Visning: |
Tid för visningen meddelas samtidigt som resultatet.
Efter visningen kan tentor hämtas på expeditionen. |
Examinator och jourhavande: | Thomas Padron-McCarthy, telefon 0707-347013. |
Skriv inte svaren till uppgifterna direkt här, utan skriv på lösa blad och lämna in.
a) (1p)
Hur skiljer sig denna virtuella maskin från en vanlig maskin, till exempel den här datorn med en Pentium-processor som står här på mitt skrivbord?
b) (2p)
Vilka fördelar och nackdelar finns med att kompilera till en virtuell maskin?
prompt> javac UndersökArgument.java prompt> java UndersökArgument hej 7 hopp -17 4711 3 tillåtna heltal. Summan är 4701. prompt>
Idén är att när någon användare skriver en rad i sin klient, ska raden genast skickas till servern, som skickar vidare raden till alla de andra klienterna. Var och en av de andra klienterna ska sen visa raden.
a) (1p)
Servern bör använda flera trådar. Varför? Om man ändå skriver en enkeltrådad server, vilket beteende kan man då få i systemet?
b) (1p)
Även klienten bör använda flera trådar. Varför? Om man ändå gör klienten enkeltrådad, vilket beteende kan man då få i systemet?
c) (10p)
Skriv klienten. Den behöver inte vara grafisk. Servern kör på port 3000 på datorn chat.oru.se. För full poäng på uppgiften krävs att klienten är flertrådad. En lösning utan flera trådar ger maximalt fem poäng på deluppgift c.
När en användare trycker på Hjälp!-knappen ska ett meddelande dyka upp på datasupportgruppens skärm, så att en av dem genast kan springa iväg och hjälpa användaren.
För enkelhets skull kan vi anta att varje applet ska få ett klientnummer när den kopplar upp sig mot servern, och att det klientnumret visas både för användaren och för datasupportgruppen. (De får väl springa runt och fråga alla användarna vem som har det numret, när de fått en begäran om hjälp.)
Appleten ska också ha en Fortare!-knapp, som användarna kan använda om de tycker att datasupportgruppen dröjer för länge med att komma och hjälpa till. Den ska ge upphov till ett lämpligt "skynda på!"-meddelande hos datasupportgruppen.
Så här kan appleten se ut:
Så här kan servern se ut:
Det finns inga krav på att appleten eller applikationen ska se ut exakt som på bilderna.
Det är inte nödvändigt att göra en grafisk serverapplikation, men en rent textbaserad server ger max 15 poäng på hela uppgiften. (Det räcker dock om serverapplikation visar meddelandena som text i ett fönster, som i exemplet ovan.)
Några tips:
a) (4p)
Skapa ett protokoll för kommunikationen mellan appleten och servern. Beskriv hur protokollet fungerar, och ge exempel på hur kommunikationen kan se ut.
b) (6p)
Skriv appleten.
c) (10p)
Skriv servern. För full poäng på uppgiften måste servern ha ett grafiskt gränssnitt.
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.