コード例 #1
0
ファイル: ListenClass.cs プロジェクト: Neoniks/Studies
 public ListenClass()
 {
     _sender = new SenderClass();
 }
コード例 #2
0
ファイル: Program.cs プロジェクト: Neoniks/Studies
        public void StartListen()
        {
            SenderClass _sender = new SenderClass();
            int iStartPos = 0;
            String sRequest;
            String sRequestedFile;
            String sErrorMessage;
            String sLocalDir;
            String sMyWebServerRoot = "E:\\Lab02\\";
            String sPhysicalFilePath = "";
            String sFormattedMessage = "";
            String sResponse = "";

            while (true)
            {
                //Accept a new connection
                Socket mySocket = myListener.AcceptSocket();
                String sMimeType = @"text/html";

                if (mySocket.Connected)
                {
                    Console.WriteLine("\nClient Connected!!\n==================\nCLient IP {0}\n",
                        mySocket.RemoteEndPoint);

                    Byte[] bReceive = new Byte[1024];
                    int i = mySocket.Receive(bReceive, bReceive.Length, 0);
                    string sBuffer = Encoding.ASCII.GetString(bReceive);

                    if (sBuffer.Substring(0, 3) != "GET")
                    {
                        Console.WriteLine("Only Get Method is supported..");
                    }
                    else
                    {
                        iStartPos = sBuffer.IndexOf("HTTP", 1);
                        string sHttpVersion = sBuffer.Substring(iStartPos, 8);

                        sRequest = sBuffer.Substring(0, iStartPos - 1);

                        iStartPos = sRequest.LastIndexOf("/") + 1;
                        sRequestedFile = sRequest.Substring(iStartPos);

                        sLocalDir = sMyWebServerRoot;

                        if (sLocalDir.Length == 0)
                        {
                            sErrorMessage = "<H2>Error!! Requested Directory does not exists</H2><Br>";
                            _sender.SendHeader(sHttpVersion, "", sErrorMessage.Length, " 404 Not Found", ref mySocket);
                            _sender.SendToBrowser(sErrorMessage, ref mySocket);
                            mySocket.Close();
                            continue;
                        }
                        if (sRequestedFile.Length == 0)
                        {
                            sRequestedFile = "index.html";
                        }

                        sPhysicalFilePath = sLocalDir + sRequestedFile;

                        if (File.Exists(sPhysicalFilePath) == false)
                        {
                            sErrorMessage = "<H2>404 Error! File Does Not Exists...</H2>";
                            _sender.SendHeader(sHttpVersion, "", sErrorMessage.Length, " 404 Not Found", ref mySocket);
                            _sender.SendToBrowser(sErrorMessage, ref mySocket);

                            Console.WriteLine(sFormattedMessage);
                        }

                        else
                        {
                            int iTotBytes = 0;

                            sResponse = "";

                            FileStream fs = new FileStream(sPhysicalFilePath, FileMode.Open, FileAccess.Read, FileShare.Read);

                            BinaryReader reader = new BinaryReader(fs);
                            byte[] bytes = new byte[fs.Length];
                            int read;
                            while ((read = reader.Read(bytes, 0, bytes.Length)) != 0)
                            {
                                sResponse = sResponse + Encoding.ASCII.GetString(bytes, 0, read);
                                iTotBytes = iTotBytes + read;
                            }
                            reader.Close();
                            fs.Close();

                            _sender.SendHeader(sHttpVersion, sMimeType, iTotBytes, " 200 OK", ref mySocket);
                            _sender.SendToBrowser(bytes, ref mySocket);
                        }
                    }
                    mySocket.Close();
                }
            }
        }