Login | Register   
LinkedIn
Google+
Twitter
RSS Feed
Download our iPhone app
TODAY'S HEADLINES  |   ARTICLE ARCHIVE  |   FORUMS  |   TIP BANK
Browse DevX
Sign up for e-mail newsletters from DevX


Tip of the Day
Language: Java, Web
Expertise: Intermediate
Oct 19, 1998

Network Programming, Simple TCP/IP Server

The following program is a simple version of a TCP/IP server that responds to requests from a client and delivers files. I wrote it to be as small as possible to make it easy to understand so that you can get started in the right direction and write your own improved version. There is no security manager so when the program is running, your computer is subject to invasion from the network.

To test the program locally, run the program and then point your browser to http://localhost/PathAndFile, where PathAndFile specifies the path to a file relative to the folder where the program is running. For example, if the folder where the program is running also contains the source file for this program, point your browser to:

 
http://localhost/ServerHttp01.java
Your browser should download the file and allow you to specify where to save it. If an exception is thrown, the program will terminate. Otherwise, you will have to terminate it manually:
 
import java.net.*;
import java.io.*;
import java.util.*;
import java.util.zip.DataFormatException;

public class ServerHttp01{
	PrintWriter outputStream;
	Socket socket;
  
	public static void main(String[] argv){
		new ServerHttp01();
	}//end main
	//-----------------------------------------------------//
  
ServerHttp01(){//constructor
    
	try{  
			//Get a server socket on port 80
			ServerSocket serverSocket = new ServerSocket(80);
			while(true){//loop and listen
				socket = serverSocket.accept();//block
     
				//Get input and output text streams
				BufferedReader inputStream = 
						new BufferedReader(new InputStreamReader(
								socket.getInputStream()));
				outputStream = 
						new PrintWriter(new OutputStreamWriter(
								socket.getOutputStream()),true);
                           
				//Get output stream for byte data
				DataOutputStream byteOutput = new DataOutputStream(
						socket.getOutputStream());

				//Get request from client
				String request = inputStream.readLine();
  
				//Respond to the request. Only supports GET request
				StringTokenizer stringTokenizer = 
															new StringTokenizer(request);
				if(stringTokenizer.nextToken().equals("GET")){
					request = stringTokenizer.nextToken();
					if(request.indexOf("/") == 0){
					request = request.substring(1);//strip the /
					}//end if(request...

					//Try to read the file into the a byte array.
					FileInputStream fileInputStream = 
							new FileInputStream(request);
					byte[] data = 
							new byte[fileInputStream.available()];
					fileInputStream.read(data);

					//Send the bytes in the array to the client.
					byteOutput.write(data);
					byteOutput.flush();
					socket.close();
				}//end if stringTokenizer....
				else//not a GET request
					throw new DataFormatException("Not GET");
			}//end while loop
		}catch(Exception e){
			System.err.println(e);//display at server
			outputStream.println(//send to client
					"<HTML><BODY><P>" + e + "<P></BODY></HTML>");
			try{
				socket.close();
			}catch(IOException ex){System.err.println(ex);}
		}//end catch
	}//end constructor
}//end class ServerHttp01
Richard G.
 
Comment and Contribute

 

 

 

 

 


(Maximum characters: 1200). You have 1200 characters left.

 

 

Sitemap
Thanks for your registration, follow us on our social networks to keep up-to-date