МИР ВАШЕМУ ДОМУ!!!
57 / 58 / 7
Регистрация: 01.04.2009
Сообщений: 890
Записей в блоге: 1
1

Http-сервер: Как сделать чтоб этот сервер понимал файлы расширением .php и .aspx

12.01.2012, 11:20. Показов 3428. Ответов 4
Метки нет (Все метки)

Здравствуйте друзья

Как сделать чтоб этот сервер понимал файлы расширением .php и .aspx?
Простые странички он понимает нормально
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
using System;
using System.Text;
using System.IO;
using System.Collections;
using System.Net;
using System.Net.Sockets;
using System.Threading;
 
namespace HTTPServer
{
    public class Interaction
    {
        const string Server_Directory = "C:\\WroxServer\\";
        const string Error_Message = "None";
 
        const string Main_Page = "index.aspx";
 
        TcpClient Client;
        Hashtable Contents = new Hashtable();
        /// <summary>
        /// По строке запроса вычисляем путь к файлу.
        /// </summary>
        public string GetPath(string request)
        {
            int space1 = request.IndexOf(" ");
            int space2 = request.IndexOf(" ", space1 + 1);
            string url = request.Substring(space1 + 2, space2 - space1 - 2);
            if (url == "")
                url = Main_Page;
            return Server_Directory + url;
        }
        /// <summary>
        /// По файлу вычисляем тип содержимого в нём
        /// </summary>
        public string GetContent(string file_path)
        {
            string ext = "";
            int dot = file_path.LastIndexOf(".");
            if (dot >= 0)
                ext = file_path.Substring(dot, file_path.Length - dot).ToUpper();
            if (Contents[ext] == null)
                return "application/" + ext;
            else
                return (string)Contents[ext];
        }
        /// <summary>
        /// Отправляем заголовок клиенту.
        /// </summary>
        public void WriteHeaderToClient(string content_type, long length)
        {
            string str = "HTTP/1.1 200 OK\nContent-type: " + content_type
                   + "\nContent-Encoding: 8bit\nContent-Length:" + length.ToString()
                   + "\n\n";
            Client.GetStream().Write(Encoding.ASCII.GetBytes(str), 0, str.Length);
        }
        /// <summary>
        ///  Отвечаем на запрос клиенту
        /// </summary>
        public void WriteToClient(string request)
        {
            string file_path = GetPath(request);
            if (file_path.IndexOf("..") >= 0 || !File.Exists(file_path))
            {
                WriteHeaderToClient("text/plain", Error_Message.Length);
                Client.GetStream().Write(Encoding.ASCII.GetBytes(Error_Message), 0, Error_Message.Length);
                return;
            }
            FileStream file = File.Open(file_path, FileMode.Open);
            WriteHeaderToClient(GetContent(file_path), file.Length);
            byte[] buf = new byte[1024];
            int len;
            while ((len = file.Read(buf, 0, 1024)) != 0)
                Client.GetStream().Write(buf, 0, len);
            file.Close();
        }
        public void Interact()
        {
            try
            {
                byte[] buffer = new byte[1024];
                string request = "";
                while (true)
                {
                    int count = Client.GetStream().Read(buffer, 0, 1024);
                    request += Encoding.ASCII.GetString(buffer, 0, count);
                    if (request.IndexOf("\r\n\r\n") >= 0) // Запрос обрывается \r\n\r\n последовательностью
                    {
                        WriteToClient(request);
                        request = "";
                    }
                }
            }
            catch (Exception)
            {
            }
        }
        protected void SetContents()
        {
            Contents.Add("", "application/unknown");
            Contents.Add(".ASPX", "text/html");
            Contents.Add(".PHP", "text/html");
            Contents.Add(".HTML", "text/html");
            Contents.Add(".HTM", "text/html");
            Contents.Add(".TXT", "text/plain");
            Contents.Add(".GIF", "image/gif");
            Contents.Add(".JPG", "image/jpeg");
        }
        public Interaction(TcpClient client)
        {
            Client = client;
            SetContents();
            Thread interact = new Thread(new ThreadStart(Interact));
            interact.Start();
        }
    }
 
    public class Server
    {
        private TcpListener Listener;
 
        public Server(int port)
        {
            Listener = new TcpListener(port);
            Listener.Start();
            Listen();
        }
        ~Server()
        {
            if (Listener != null)
                Listener.Stop();
        }
        /// <summary>
        /// Ждём подключений к нашему серверу и обрабатываем их
        /// </summary>
        public void Listen()
        {
            while (true)
                new Interaction(Listener.AcceptTcpClient());
        }
        [STAThread]
        static void Main(string[] args)
        {
            Server server = new Server(8001);
        }
    }
}
Набирая в браузере ip своего пк/8001 сохраняет страницу (index.aspx) как файл.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.01.2012, 11:20
Ответы с готовыми решениями:

Как сделать чтоб файлы с моим расширением открывались моей программой?
В винде поклацал, теперь при запуске файлов с моим расширением открывается моя программа, что...

Как сделать http сервер на С#?
Привет! Помогите, пожалуйста, сделать http сервер на С#? нашла здесь ...

файлы *.aspx не запускаются. сервер код не обрабатывает.
У меня стоит win2000 pro. Установлен IIS 5.0 и я установил Visual Studio.NET. Проблема в том, что...

Как сделать, чтоб клиент не вылетал, когда сервер недоступен?
Доброе время суток! У меня есть клиент и сервер, общающиеся по WCF. Клиент забирает с сервера...

4
_
2363 / 1239 / 78
Регистрация: 28.10.2009
Сообщений: 4,331
12.01.2012, 11:56 2
A_R_S, смотри тут - я выкладывал веб-сервер с поддержкой php/aspx - правда он на vb net, но думаю на шарп не составит труда перевести. С php - там вообще все легко, а вот с aspx - есть свои заморочки.
2
МИР ВАШЕМУ ДОМУ!!!
57 / 58 / 7
Регистрация: 01.04.2009
Сообщений: 890
Записей в блоге: 1
12.01.2012, 16:16  [ТС] 3
В книге "сетевое программирование для профессионалов" есть такого рода пример.
Вот пример.
Этот пример работает когда в case добавляешь .aspx
Спасибо Евгений вам за помощь!.

Добавлено через 1 час 14 минут
Создав простую страницу default.aspx с текстом и загрузив ее в папку сервера переходя на нее из браузера, работает нормально.
Добавив соединение с базой и выгрузив данные и базы, опубликовал в папку сервера, запустил нету данных (ошибок нету)
0
_
2363 / 1239 / 78
Регистрация: 28.10.2009
Сообщений: 4,331
12.01.2012, 16:49 4
A_R_S, я свой пример по работе с aspx-страницами делал как раз по книге "сетевое программирование для профессионалов" плюс еще смотрел несколько подобных примеров, однако все равно остались некоторые проблемы - обычные страницы aspx загружаются нормально, а вот сложные сценарии - с бД я не смотрел, но другие - вот там проблемы, сходу я их не смог решить, а потом и вовсе забил. В любом случае лучше IIS не придумать.
Но могу посоветовать посмотреть еще на один сервер на шарпе - http://www.codeproject.com/KB/IP/minihttpd.aspx. Правда не знаю, как он будет работать.
Плюс на том же codeproject был еще один неплохой пример с aspx на шарпе, только не помню где.
1
МИР ВАШЕМУ ДОМУ!!!
57 / 58 / 7
Регистрация: 01.04.2009
Сообщений: 890
Записей в блоге: 1
13.01.2012, 09:05  [ТС] 5
http://www.codeproject.com/KB/IP/minihttpd.aspx - работает нормально с aspx.
Спасибо.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.01.2012, 09:05
Помогаю со студенческими работами здесь

Как можно сделать чтоб сервер понимал что ему пришло файл или строка?
Как можно сделать чтоб сервер понимал что ему пришло файл или строка?

Клиент Сервер (Как сделать так, что бы Сервер считал этот код и давал ВЫВОД в форме)?
Здравствуйте Уважаемые форумчанины!!! У меня есть вот один код который считает массивы с...

Как сделать Http запрос на сервер
Ребят подскажите как правильно сделать get запрос. Пытаюсь так: DefaultHttpClient hc = new...

Как сделать, чтоб при отключении электроэнергии в сети и переводе энергии на аккумулятор, сервер сам выключался не аварийно
Сервер windows 2008 r2 подключен к ИБП как сделать, чтоб при отключении электроэнергии в сети и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru