Dear All,
The following program uses socket. How can I convert it to servlet? Please
help. Thank you.
Yours Sincerely,
TEH
import java.io.*;
import java.net.*;
import java.awt.*;
import java.awt.event.*;
public class Exercise18_3Server {
// Declare a random access file
RandomAccessFile raf = null;
public static void main(String args[]) {
new Exercise18_3Server();
}
public Exercise18_3Server() {
// Open the local file on the server side
try {
// Open the file if the file exists, create a new file if the file does
not exist
raf = new RandomAccessFile("student.dat", "rw");
}
catch(IOException e) {
System.out.print("Error: " + e);
System.exit(0);
}
// Establish server socket
try {
// Create a server socket
ServerSocket ss = new ServerSocket(8000);
int count = 1;
ThreadGroup tg = new ThreadGroup("serving clients");
while (true) {
if (tg.activeCount() < 2) {
// Connect to a client
Socket s = ss.accept();
// Start a new thread to register a client
Thread t = new Thread(tg, new RegistrationThread(s, count++));
t.start();
System.out.println(tg.activeCount() + " active threads");
}
else {
try {Thread.sleep(200); }
catch (InterruptedException ex) { }
}
}
}
catch (IOException e) {
System.err.println(e);
}
}
// Define a thread to process the client registration
class RegistrationThread extends Thread {
private Socket sock; // The socket to serve a client
private int num; //the socket label
// The file to store the records
// Buffer reader to get input from the client
private BufferedReader in;
private PrintWriter out;
public RegistrationThread(Socket sock, int num) {
this.sock = sock;
this.num = num;
System.out.println("Thread " + num + " running");
// Create an input stream to receive data from a client
try {
in = new BufferedReader
(new InputStreamReader(sock.getInputStream()));
out = new PrintWriter(sock.getOutputStream(), true);
}
catch(IOException ex) {
System.out.println("Error " + ex);
}
}
public void run() {
String name;
String street;
String city;
String state;
String zip;
try {
// Get command
String command = in.readLine();
if (command.equals("Register")) {
// Receive data from the client
name = new String(in.readLine());
street = new String(in.readLine());
city = new String(in.readLine());
state = new String(in.readLine());
zip = new String(in.readLine());
// Display data received
System.out.println("The following data received from the client");
System.out.println("name: " + name);
System.out.println("street: " + street);
System.out.println("city: " + city);
System.out.println("state: " + state);
System.out.println("zip: " + zip);
// Create a student instance
Student s = new Student(name, street, city, state, zip);
// Append it to "student.dat"
raf.seek(raf.length());
s.writeStudent(raf);
}
else if (command.equals("View")) {
name = new String(in.readLine());
Student s = search(name);
if (s == null) {
out.println("not found");
}
else {
out.println("found");
out.println(s.getStreet());
out.println(s.getCity());
out.println(s.getState());
out.println(s.getZip());
}
}
}
catch (IOException e) {
System.err.println(e);}
}
public Student search(String name) {
Student s = new Student();
try {
raf.seek(0);
long length = raf.length();
while (raf.getFilePointer() < length) {
s.readStudent(raf);
if (name.trim().equals(s.getName().trim())) return s;
System.out.println("Find anything?" + name + " " + s.getName());
}
}
catch(IOException ex) {
System.out.print("Error: " + ex);
}
return null;
}
}
class Student {
private String name;
private String street;
private String city;
private String state;
private String zip;
// The size of five string fields in the record
final int NAME_SIZE = 32;
final int STREET_SIZE = 32;
final int CITY_SIZE = 20;
final int STATE_SIZE = 2;
final int ZIP_SIZE = 5;
// The total size of the record in bytes, a Unicode
// character is 2 bytes size.*/
final int RECORD_SIZE =
(NAME_SIZE + STREET_SIZE + CITY_SIZE + STATE_SIZE + ZIP_SIZE);
Student() {
}
Student(String name, String street, String city,
String state, String zip ) {
this.name = name;
this.street = street;
this.city = city;
this.state = state;
this.zip = zip;
}
public String getName() {
return name;
}
public String getStreet() {
return street;
}
public String getCity() {
return city;
}
public String getState() {
return state;
}
public String getZip() {
return zip;
}
public void writeStudent(DataOutput out) throws IOException {
FixedLengthStringIO.writeFixedLengthString(
name, NAME_SIZE, out);
FixedLengthStringIO.writeFixedLengthString(
street, STREET_SIZE, out);
FixedLengthStringIO.writeFixedLengthString(
city, CITY_SIZE, out);
FixedLengthStringIO.writeFixedLengthString(
state, STATE_SIZE, out);
FixedLengthStringIO.writeFixedLengthString(
zip, ZIP_SIZE, out);
}
public void readStudent(DataInput in) throws IOException {
name = FixedLengthStringIO.readFixedLengthString(
NAME_SIZE, in);
street = FixedLengthStringIO.readFixedLengthString(
STREET_SIZE, in);
city = FixedLengthStringIO.readFixedLengthString(
CITY_SIZE, in);
state = FixedLengthStringIO.readFixedLengthString(
STATE_SIZE, in);
zip = FixedLengthStringIO.readFixedLengthString(
ZIP_SIZE, in);
}
}
}
Fussy? Opinionated? Impossible to please? Perfect. Join Yahoo!'s user
panel and lay it on
us.http://us.rd.yahoo.com/evt=48516/*http://surveylink.yahoo.com/gmrs/yahoo_panel_invite.asp?a=7
hot CTA = Join Yahoo!'s user panel