Web server
Jeg har fået en opgave der lyder sådan:Formål.
Kod en flere trådet server.
Udover øvelse med socket og tråde i java opnås et vist praktisk kendskab til HTTP-protokollen.
Kursusarbejdet må godt antage en eksperimentel form.
Mål.
• En kørende flere trådet server, der fungerer som simpel WEB-server.
• En kortfattet teknisk rapport dækkende hvad der er afprøvet og om eventuelle erfaringer/problemer.
Opgaven som kan danne ramme for arbejdet.
Flertrådet server.
Konstruer en flere trådet simpel web-server. Serveren skal kunne tilgås af en standard Browser – f.eks. IE, via en socket-grænseflade. Serveren skal svare Browseren med standard status koder. Serveren skal kunne findes på porten 8888.
Statuskoder som serveren skal kunne klare at returnere er 200 og 404. Derudover kan eksperimenteres med koderne 307 og 301.
Dette indebærer at serveren skal kunne sende data/header-linier der matcher statuskoderne. Af filer serveren kan sende tilbage, kan 2 eller få være nok. En default fil (som index.html) skal sendes tilbage hvis ikke browseren (brugeren) angiver et navn i stien.
Vores lærer har givet et hint der består af disse tre klasser, som skal bruges til løsning:
Server:
import java.io.*;
import java.net.*;
public class MultiEchoServer
{
private static ServerSocket servSocket;
private static final int PORT = 1234;
public static void main(String[] args) throws IOException
{
try
{
servSocket = new ServerSocket(PORT);
}
catch (IOException e)
{
System.out.println("\nUnable to set up port!");
System.exit(1);
}
do
{
//Wait for client...
Socket client = servSocket.accept();
System.out.println("\nNew client accepted.\n");
//Create a thread to handle communication with
//this client and pass the constructor for this
//thread a reference to the relevant socket...
ClientHandler handler = new ClientHandler(client);
handler.start();//As usual, this method calls run.
}while (true);
}
}
ClientHandler:
class ClientHandler extends Thread
{
private Socket client;
private BufferedReader in;
private PrintWriter out;
public ClientHandler(Socket socket)
{
//Set up reference to associated socket...
client = socket;
try
{
in = new BufferedReader(
new InputStreamReader(
client.getInputStream()));
out = new PrintWriter(
client.getOutputStream(),true);
}
catch(IOException e)
{
e.printStackTrace();
}
}
public void run()
{
try
{
String received;
do
{
//Accept message from client on
//the socket's input stream...
received = in.readLine();
//Echo message back to client on
//the socket's output stream...
out.println("ECHO: " + received);
//Repeat above until 'QUIT' sent by client...
}while (!received.equals("QUIT"));
}
catch(IOException e)
{
e.printStackTrace();
}
finally
{
try
{
if (client!=null)
{
System.out.println(
"Closing down connection...");
client.close();
}
}
catch(IOException e)
{
e.printStackTrace();
}
}
}
}
Client:
import java.io.*;
import java.net.*;
public class MultiEchoClient
{
private static InetAddress host;
private static final int PORT = 1234;
private static Socket link;
private static BufferedReader in;
private static PrintWriter out;
private static BufferedReader keyboard;
public static void main(String[] args) throws IOException
{
try
{
host = InetAddress.getLocalHost();
link = new Socket(host, PORT);
in = new BufferedReader(
new InputStreamReader(
link.getInputStream()));
out = new PrintWriter(
link.getOutputStream(),true);
keyboard = new BufferedReader(
new InputStreamReader(System.in));
String message, response;
do
{
System.out.print(
"Enter message ('QUIT' to exit): ");
message = keyboard.readLine();
//Send message to server on
//the socket's output stream...
out.println(message);
//Accept response from server on
//the socket's input stream...
response = in.readLine();
//Display server's response to user...
System.out.println(response);
}while (!message.equals("QUIT"));
}
catch(UnknownHostException uhEx)
{
System.out.println(
"\nHost ID not found!\n");
}
catch(IOException ioEx)
{
ioEx.printStackTrace();
}
finally
{
try
{
if (link!=null)
{
System.out.println(
"Closing down connection...");
link.close();
}
}
catch(IOException ioEx)
{
ioEx.printStackTrace();
}
}
}
}
Er der nogen der kan hjælpe??