Network Programming, Simple TCP/IP Server

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:


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*;import*;import java.util.*;import;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()];;					//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					"

" + e + "

"); try{ socket.close(); }catch(IOException ex){System.err.println(ex);} }//end catch }//end constructor}//end class ServerHttp01


Share the Post: