a simple http server plz help

L

lucifer

hi,
i am creating an simple http server ie it serves only static pages .
u can compile the code then use ur browser if it is IE then the it
shows the page but the http header is also shown
HTTP/1.0 200 OK Content-Type: text/html
nweb Web Server Sorry:
but if the browser is mozilla/Firefox it shows the recieved data as an
application and tells me to save it.

also i want that the program should continiously listen on the port and
send data to more than one client

also is it possible to invoke a thread that calls a function with
arguments

using System;
using System.Collections.Generic;
using System.Text;
using System.Net;
using System.Net.Sockets;
using System.IO;
using System.Threading;

class Program
{
static int BUFSIZE= 8096;

enum msg
{
ERROR =42,
SORRY =43,
LOG = 44,
}

static void log(msg type,string s1,string s2) //used for logging
of errors
{
string logfile = "http.log";
string logbuffer;
FileStream file = new FileStream(logfile, FileMode.Append);
StreamWriter sw = new StreamWriter(file);
switch (type)
{
case msg.ERROR: logbuffer = "Error: " + s1 +" "+ s2 + "
exiting ";
sw.WriteLine(logbuffer);
sw.WriteLine();
sw.Close();
break;
case msg.SORRY: logbuffer = "sorry: " + s1 + " " + s2 + "
";
sw.WriteLine(logbuffer);
//add funtion to send data to user;
sw.WriteLine();
sw.Close();
break;
case msg.LOG: logbuffer = "info: " + s1 + " " + s1 + " ";
sw.WriteLine(logbuffer);
sw.WriteLine();
sw.Close();
break;
}
if (type == msg.ERROR || type == msg.SORRY)
{
System.Environment.Exit(0);
}

}
public static extn[] fileextsused( )
{
extn []extentions =new extn[10];
extentions[1].ext= "gif";
extentions[1].filetype="image/gif" ;
extentions[2].ext="jpg";
extentions[2].filetype="image/jpeg";
extentions[3].ext="png";
extentions[3].filetype= "image/png";
extentions[4].ext="zip";
extentions[4].filetype="image/zip";
extentions[5].ext="gz";
extentions[5].filetype= "image/gz";
extentions[6].ext="tar";
extentions[6].filetype= "image/tar";
extentions[7].ext="htm";
extentions[7].filetype="text/html";
extentions[8].ext="html";
extentions[8].filetype="text/html";
extentions[9].ext="0";
extentions[9].filetype="0";
return extentions;

}
public struct extn
{
public String ext;
public string filetype;
}
public static void web(Socket suck ) //used for sending data to
the //client
{
Encoding enc = Encoding.Unicode;
byte [] rbuffer =new byte[BUFSIZE+1];//recieve buffer
byte [] sbuffer =new byte[BUFSIZE+1];//data to be send
byte[] header = enc.GetBytes("HTTP/1.0 200
OK\r\nContent-Type: %s\r\n\r\n");//http header
string str="<HTML><BODY><H1>nweb Web Server
Sorry:</H1></BODY></HTML>\r\n";//actual page

sbuffer = enc.GetBytes(str);
suck.Receive(rbuffer);
suck.Send(header);
suck.Send(sbuffer);

}

static void Main(string[] args)
{
DirectoryInfo dir;

args = new string[2];
args[0] = "80";
args[1] = @"c:\a";
int port;
port = Convert.ToInt32(args[0]);
dir = new DirectoryInfo(args[1]);

int i=0;
extn []extentions =new extn[10];
extentions=fileextsused();
if (args.Length <2 || args.Length >2 || args[0] == "/?")
{
Console.WriteLine("hint: nweb Port-Number
Top-Directory\n\n"+
"\tnweb is a small and very safe mini web server\n"+
"\tnweb only servers out file/web pages with extensions named
below\n"+
"\t and only from the named directory or its
sub-directories.\n"+
"\tThere is no fancy features = safe and secure.\n\n"+
"\tExample: nweb 8181\n c:\\web &\n\n"+
"\tOnly Supports:");
for(i=0;i<extentions.Length;i++)
{

Console.WriteLine("\t"+extentions.ext+"\t"+extentions.filetype+"");
}

Console.WriteLine("\n\tNot Supported: URLs including
\"..\",Java, Javascript, CGI\n"+
"\tNot Supported: directories \n\tc:\\ " + "\n\t"
+
Environment.GetFolderPath(Environment.SpecialFolder.System)+"\n\t"

+Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles) +
"\n\t"
+
Environment.GetFolderPath(Environment.SpecialFolder.Personal) + "\n\t"
+
Environment.GetFolderPath(Environment.SpecialFolder.CommonProgramFiles)+"\n"
+"\tNo warranty given or implied\n\tUmesh Tangnu
(e-mail address removed)\n");
Console.ReadLine();
System.Environment.Exit(0);
}

else
{
if ((args[1] ==
Environment.GetFolderPath(Environment.SpecialFolder.System)) ||
(args[1] ==
Environment.GetFolderPath(Environment.SpecialFolder.Personal)) ||
(args[1] ==
Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles)))
{
Console.WriteLine("ERROR: Bad top directory "+
args[1]+" see nweb /?\n");
Console.ReadLine();

System.Environment.Exit(0);
}
if(!dir.Exists)
{
Console.WriteLine("ERROR : Top Directory
"+args[1]+" doesnot exist");
Console.Read();
System.Environment.Exit(0);
}

}
if (port < 0 || port > 60000)
log(msg.ERROR, "Invalid port number (try 1->60000)",
args[0]);
log(msg.LOG, "nweb starting", args[0]);

IPAddress iadd =IPAddress.Parse("192.168.1.2");
IPEndPoint ipe = new IPEndPoint(iadd, port);
Socket sock = new Socket(AddressFamily.InterNetwork,
SocketType.Stream, ProtocolType.Tcp);
sock.Bind(ipe);
sock.Listen(32);
sock = sock.Accept();
web(sock);
sock.Shutdown(SocketShutdown.Both);
sock.Close();
}
}
 
J

John Timney \( MVP \)

have you looked at how someone else might have done this already?

http://www.devhood.com/tools/tool_details.aspx?tool_id=351

--
Regards

John Timney
ASP.NET MVP
Microsoft Regional Director

lucifer said:
hi,
i am creating an simple http server ie it serves only static pages .
u can compile the code then use ur browser if it is IE then the it
shows the page but the http header is also shown
HTTP/1.0 200 OK Content-Type: text/html
nweb Web Server Sorry:
but if the browser is mozilla/Firefox it shows the recieved data as an
application and tells me to save it.

also i want that the program should continiously listen on the port and
send data to more than one client

also is it possible to invoke a thread that calls a function with
arguments

using System;
using System.Collections.Generic;
using System.Text;
using System.Net;
using System.Net.Sockets;
using System.IO;
using System.Threading;

class Program
{
static int BUFSIZE= 8096;

enum msg
{
ERROR =42,
SORRY =43,
LOG = 44,
}

static void log(msg type,string s1,string s2) //used for logging
of errors
{
string logfile = "http.log";
string logbuffer;
FileStream file = new FileStream(logfile, FileMode.Append);
StreamWriter sw = new StreamWriter(file);
switch (type)
{
case msg.ERROR: logbuffer = "Error: " + s1 +" "+ s2 + "
exiting ";
sw.WriteLine(logbuffer);
sw.WriteLine();
sw.Close();
break;
case msg.SORRY: logbuffer = "sorry: " + s1 + " " + s2 + "
";
sw.WriteLine(logbuffer);
//add funtion to send data to user;
sw.WriteLine();
sw.Close();
break;
case msg.LOG: logbuffer = "info: " + s1 + " " + s1 + " ";
sw.WriteLine(logbuffer);
sw.WriteLine();
sw.Close();
break;
}
if (type == msg.ERROR || type == msg.SORRY)
{
System.Environment.Exit(0);
}

}
public static extn[] fileextsused( )
{
extn []extentions =new extn[10];
extentions[1].ext= "gif";
extentions[1].filetype="image/gif" ;
extentions[2].ext="jpg";
extentions[2].filetype="image/jpeg";
extentions[3].ext="png";
extentions[3].filetype= "image/png";
extentions[4].ext="zip";
extentions[4].filetype="image/zip";
extentions[5].ext="gz";
extentions[5].filetype= "image/gz";
extentions[6].ext="tar";
extentions[6].filetype= "image/tar";
extentions[7].ext="htm";
extentions[7].filetype="text/html";
extentions[8].ext="html";
extentions[8].filetype="text/html";
extentions[9].ext="0";
extentions[9].filetype="0";
return extentions;

}
public struct extn
{
public String ext;
public string filetype;
}
public static void web(Socket suck ) //used for sending data to
the //client
{
Encoding enc = Encoding.Unicode;
byte [] rbuffer =new byte[BUFSIZE+1];//recieve buffer
byte [] sbuffer =new byte[BUFSIZE+1];//data to be send
byte[] header = enc.GetBytes("HTTP/1.0 200
OK\r\nContent-Type: %s\r\n\r\n");//http header
string str="<HTML><BODY><H1>nweb Web Server
Sorry:</H1></BODY></HTML>\r\n";//actual page

sbuffer = enc.GetBytes(str);
suck.Receive(rbuffer);
suck.Send(header);
suck.Send(sbuffer);

}

static void Main(string[] args)
{
DirectoryInfo dir;

args = new string[2];
args[0] = "80";
args[1] = @"c:\a";
int port;
port = Convert.ToInt32(args[0]);
dir = new DirectoryInfo(args[1]);

int i=0;
extn []extentions =new extn[10];
extentions=fileextsused();
if (args.Length <2 || args.Length >2 || args[0] == "/?")
{
Console.WriteLine("hint: nweb Port-Number
Top-Directory\n\n"+
"\tnweb is a small and very safe mini web server\n"+
"\tnweb only servers out file/web pages with extensions named
below\n"+
"\t and only from the named directory or its
sub-directories.\n"+
"\tThere is no fancy features = safe and secure.\n\n"+
"\tExample: nweb 8181\n c:\\web &\n\n"+
"\tOnly Supports:");
for(i=0;i<extentions.Length;i++)
{

Console.WriteLine("\t"+extentions.ext+"\t"+extentions.filetype+"");
}

Console.WriteLine("\n\tNot Supported: URLs including
\"..\",Java, Javascript, CGI\n"+
"\tNot Supported: directories \n\tc:\\ " + "\n\t"
+
Environment.GetFolderPath(Environment.SpecialFolder.System)+"\n\t"

+Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles) +
"\n\t"
+
Environment.GetFolderPath(Environment.SpecialFolder.Personal) + "\n\t"
+
Environment.GetFolderPath(Environment.SpecialFolder.CommonProgramFiles)+"\n"
+"\tNo warranty given or implied\n\tUmesh Tangnu
(e-mail address removed)\n");
Console.ReadLine();
System.Environment.Exit(0);
}

else
{
if ((args[1] ==
Environment.GetFolderPath(Environment.SpecialFolder.System)) ||
(args[1] ==
Environment.GetFolderPath(Environment.SpecialFolder.Personal)) ||
(args[1] ==
Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles)))
{
Console.WriteLine("ERROR: Bad top directory "+
args[1]+" see nweb /?\n");
Console.ReadLine();

System.Environment.Exit(0);
}
if(!dir.Exists)
{
Console.WriteLine("ERROR : Top Directory
"+args[1]+" doesnot exist");
Console.Read();
System.Environment.Exit(0);
}

}
if (port < 0 || port > 60000)
log(msg.ERROR, "Invalid port number (try 1->60000)",
args[0]);
log(msg.LOG, "nweb starting", args[0]);

IPAddress iadd =IPAddress.Parse("192.168.1.2");
IPEndPoint ipe = new IPEndPoint(iadd, port);
Socket sock = new Socket(AddressFamily.InterNetwork,
SocketType.Stream, ProtocolType.Tcp);
sock.Bind(ipe);
sock.Listen(32);
sock = sock.Accept();
web(sock);
sock.Shutdown(SocketShutdown.Both);
sock.Close();
}
}
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top