Аватар для CEDOROK
0 / 0 / 0
Регистрация: 01.07.2018
Сообщений: 45

Как стартануть? Запустить прогу через свою функцию в функции main()!?

13.07.2018, 16:04. Показов 1409. Ответов 9

Студворк — интернет-сервис помощи студентам
1) Как правильно стартануть!?
2) Как правильно подковать эти дела потоками чтобы работало во веке веков и не висло!?



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
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Web;
 
namespace HttpServer
{
    class Server
    {
        HttpListener Listener;
 
        public void StartServer()
        {
            if (File.Exists("setting.txt") == true)//http://192.168.0.16:8080/
            {
                string[] data = File.ReadAllLines("setting.txt");
                server(data[0]);
                Console.WriteLine("Start...");
            }
            else
            {
                Console.WriteLine("No file, error...");
            }
        }
 
        private void server(string url)
        {
            Listener = new HttpListener();
            if (!HttpListener.IsSupported) return;
            if (string.IsNullOrEmpty(url))
                throw new ArgumentException("url");
            Listener.Prefixes.Add(url);
            //запускаем север
            Listener.Start();
            //сервер запущен? Тогда слушаем входящие соединения
            while (Listener.IsListening)
            {
                //Application.DoEvents();
                //ожидаем входящие запросы
                HttpListenerContext context = Listener.GetContext();
                //получаем входящий запрос
                HttpListenerRequest request = context.Request;
                //обрабатываем POST запрос
                if (request.HttpMethod == "POST")
                {
                    //показать, что пришло от клиента
                    RequestData(request, context);
                }
            }
        }
 
        private void RequestData(HttpListenerRequest request, HttpListenerContext context)
        {
            //есть данные от клиента?
            if (!request.HasEntityBody) return;
            //смотрим, что пришло
            using (Stream body = request.InputStream)
            {
                using (StreamReader reader = new StreamReader(body))
                {
                    string text = reader.ReadToEnd();
                    text = HttpUtility.UrlDecode(text, Encoding.UTF8);
                    //===========================================================================================================================
                    Dictionary<string, string> postParams = new Dictionary<string, string>();
                    string[] rawParams = text.Split('&');//rawData.Split('&');
                    foreach (string param in rawParams)
                    {
                        string[] res = param.Split('=');
                        string key = res[0];
                        string value = HttpUtility.UrlDecode(res[1]);
                        postParams.Add(key, value);
                    }
                    //===========================================================================================================================
                    if (postParams.Count() > 0 && postParams.ContainsKey("Число"))
                    {
                        int z = ((Int32.Parse(postParams["Число"])) * (Int32.Parse(postParams["Число"])));
                        Response(context, z.ToString());
                    }
                }
            }
        }
 
        private void Response(HttpListenerContext _context, string sms)
        {
            //отправка данных клиенту
            HttpListenerResponse response = _context.Response;
            response.ContentType = "text/html; charset=UTF-8";
            byte[] buffer = Encoding.UTF8.GetBytes(sms);
            response.ContentLength64 = buffer.Length;
            using (Stream output = response.OutputStream)
            {
                output.Write(buffer, 0, buffer.Length);
            }
        }
 
        static void Main(string[] args) 
        {
            //StartServer();
            //как стартануь!? =(...
        }
    }
}
За ранее всем огромное спасибо....

Прога представляет собой ограниченный http-server. Задача которого принимать от пользователей переменную "Число"(методом POST), возводить в квадрат и возвращать ответ обратно.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
13.07.2018, 16:04
Ответы с готовыми решениями:

как свою прогу запустить на других компах
Здравствуйте! Написал игрульку ну и решил её опробовать на других компах. Она не работает. У меня windows 7. И на тех компах где windows...

Как запустить свою OpenGL прогу на чужом компьютере?
Пишу на windows 8, VC++,скомпилировал программу и взял exe в папке debug, добавил туда шейдеры и т. д. На моем компе все работает,а вот...

Что я делаю не так или как запустить свою первую прогу на Perl?
Отсюда скачал IDE Perl, так её назову http://www.softportal.com/get-70-activeperl.html А вот отсюда...

9
Администратор
Эксперт .NET
 Аватар для OwenGlendower
17952 / 14039 / 5356
Регистрация: 17.03.2014
Сообщений: 28,715
Записей в блоге: 1
13.07.2018, 17:38
Лучший ответ Сообщение было отмечено CEDOROK как решение

Решение

Цитата Сообщение от CEDOROK Посмотреть сообщение
1) Как правильно стартануть!?
Создать файл setting.txt с одной строкой
Code
1
http://127.0.0.1:8080/
В Main написать код
C#
1
new Server().StartServer();
Или не создавать файл и написать так:
C#
1
new Server().server("http://127.0.0.1:8080/");
Цитата Сообщение от CEDOROK Посмотреть сообщение
2) Как правильно подковать эти дела потоками чтобы работало во веке веков и не висло!?
А сейчас оно не ведет себя так разве?
1
 Аватар для CEDOROK
0 / 0 / 0
Регистрация: 01.07.2018
Сообщений: 45
13.07.2018, 18:08  [ТС]
Я ничего умнее не придумал как запихать весь код в main()....
Это привело к неработаспасобности сервера...

По поводу файла(setting.txt), он нужен, буду там собирать настройки сервера...
Не компилить же приложение постоянно...

Сейчас испытаю new Server().StartServer();
и отпишусь...

Добавлено через 9 минут
Цитата Сообщение от OwenGlendower Посмотреть сообщение

new Server().StartServer();

За это отдельное спасибо.
Так глупо вышло аж не по себе =(...
0
Эксперт JS
6496 / 3907 / 2006
Регистрация: 14.06.2018
Сообщений: 6,781
13.07.2018, 18:11
CEDOROK, вообще прогу надо стартовать как службу )) Так что есть что малясь попилить.
Цитата Сообщение от CEDOROK Посмотреть сообщение
По поводу файла(setting.txt), он нужен, буду там собирать настройки сервера...
Несолидно. XML или JSON ))
0
 Аватар для CEDOROK
0 / 0 / 0
Регистрация: 01.07.2018
Сообщений: 45
13.07.2018, 18:17  [ТС]
Цитата Сообщение от OwenGlendower Посмотреть сообщение
Сообщение от CEDOROK
2) Как правильно подковать эти дела потоками чтобы работало во веке веков и не висло!?
А сейчас оно не ведет себя так разве?
Да оно работает возвращает клиентам ответы...
Но окно консоли висит(не реагирует на ввод символов, не выводит сообщения"Console.WriteLine("Start..."); ").


1) выполнено OwenGlendower
2) актуально....

Добавлено через 1 минуту
Цитата Сообщение от amr-now Посмотреть сообщение
По поводу файла(setting.txt), он нужен, буду там собирать настройки сервера...
Несолидно. XML или JSON ))
будет данных более 2-х
запилим JSON
это меня пока не беспокоит от слова совсем...
0
Эксперт JS
6496 / 3907 / 2006
Регистрация: 14.06.2018
Сообщений: 6,781
13.07.2018, 18:20
Консоль службы пилится отдельно.
0
 Аватар для CEDOROK
0 / 0 / 0
Регистрация: 01.07.2018
Сообщений: 45
13.07.2018, 18:31  [ТС]
Не понял, прошу перефразировать...
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
17952 / 14039 / 5356
Регистрация: 17.03.2014
Сообщений: 28,715
Записей в блоге: 1
13.07.2018, 19:51
Цитата Сообщение от CEDOROK Посмотреть сообщение
Но окно консоли висит(не реагирует на ввод символов, не выводит сообщения"Console.WriteLine("Start..."); ").
Теперь ясно что имелось в виду под "подвисанием". Несложно исправляется
Кликните здесь для просмотра всего текста
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
sing System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading;
using System.Web;
 
namespace HttpServer
{
    class Server
    {
        HttpListener Listener;
 
        public static void Start()
        {
            if (!HttpListener.IsSupported) return;
 
            if (File.Exists("setting.txt") == true)//http://192.168.0.16:8080/
            {
                string[] data = File.ReadAllLines("setting.txt");
                var thread = new Thread(() =>
                {
                    new Server().server(data[0]);
                });
                thread.IsBackground = true;
                thread.Start();
                Console.WriteLine("Start...");
            }
            else
            {
                Console.WriteLine("No file, error...");
            }
        }
 
        private void server(string url)
        {
            if (string.IsNullOrEmpty(url))
                throw new ArgumentException("url");
 
            Listener = new HttpListener();
            Listener.Prefixes.Add(url);
            //запускаем север
            Listener.Start();
            //сервер запущен? Тогда слушаем входящие соединения
            while (Listener.IsListening)
            {
                //Application.DoEvents();
                //ожидаем входящие запросы
                HttpListenerContext context = Listener.GetContext();
                //получаем входящий запрос
                HttpListenerRequest request = context.Request;
                //обрабатываем POST запрос
                if (request.HttpMethod == "POST")
                {
                    //показать, что пришло от клиента
                    RequestData(request, context);
                }
            }
        }
 
        private void RequestData(HttpListenerRequest request, HttpListenerContext context)
        {
            //есть данные от клиента?
            if (!request.HasEntityBody) return;
            //смотрим, что пришло
            using (Stream body = request.InputStream)
            {
                using (StreamReader reader = new StreamReader(body))
                {
                    string text = reader.ReadToEnd();
                    text = HttpUtility.UrlDecode(text, Encoding.UTF8);
                    //===========================================================================================================================
                    Dictionary<string, string> postParams = new Dictionary<string, string>();
                    string[] rawParams = text.Split('&');//rawData.Split('&');
                    foreach (string param in rawParams)
                    {
                        string[] res = param.Split('=');
                        string key = res[0];
                        string value = HttpUtility.UrlDecode(res[1]);
                        postParams.Add(key, value);
                    }
                    //===========================================================================================================================
                    if (postParams.Count() > 0 && postParams.ContainsKey("Число"))
                    {
                        int z = ((Int32.Parse(postParams["Число"])) * (Int32.Parse(postParams["Число"])));
                        Response(context, z.ToString());
                    }
                }
            }
        }
 
        private void Response(HttpListenerContext _context, string sms)
        {
            //отправка данных клиенту
            HttpListenerResponse response = _context.Response;
            response.ContentType = "text/html; charset=UTF-8";
            byte[] buffer = Encoding.UTF8.GetBytes(sms);
            response.ContentLength64 = buffer.Length;
            using (Stream output = response.OutputStream)
            {
                output.Write(buffer, 0, buffer.Length);
            }
        }
    }
 
    class Program
    {
        static void Main(string[] args)
        {
            Server.Start();
            Console.ReadLine();
        }
    }
}


Кстати если это попытка решить проблему с авторизацией на стороннем ресурсе, то лучше найти способ попроще. Например класс для работы с HTTP под Unity.
0
 Аватар для CEDOROK
0 / 0 / 0
Регистрация: 01.07.2018
Сообщений: 45
13.07.2018, 21:06  [ТС]
Цитата Сообщение от OwenGlendower Посмотреть сообщение
Теперь ясно что имелось в виду под "подвисанием". Несложно исправляется
Кликните здесь для просмотра всего текста
Кстати если это попытка решить проблему с авторизацией на стороннем ресурсе, то лучше найтм способ попроще. Например класс для работы с HTTP под Unity.
А вы я вижу весьма наблюдателен! =)
Да это действительно авторизация + сёрфинг.(у сайта есть даже API, но эта дорога не для меня)

Цитата Сообщение от OwenGlendower Посмотреть сообщение
Например класс для работы с HTTP под Unity.
И тут вы правы. Но к сожалению чтобы купить такой класс у меня нет денег а, FREE вариантов достойных так и не нашёл. А написать свой я пока не осилю. Если линковать сторонние библиотеки, unity отказывается собирать проект под Android.

Если есть под рукой готовое решение (класс под Unity) c радостью приму его в дар! Хотя вы мне и так очень помогли, от души огромное спасибо.
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
17952 / 14039 / 5356
Регистрация: 17.03.2014
Сообщений: 28,715
Записей в блоге: 1
13.07.2018, 21:39
CEDOROK, с классом для http помочь не смогу т.к. не работаю с Unity. Посмотри обсуждение на форуме. Там говорится что с cookie можно работать, хоть и не совсем удобно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
13.07.2018, 21:39
Помогаю со студенческими работами здесь

Как запустить такую функцию из main.c ?
Есть h-файл. HFile.h в нем: typedef struct { } Struct Есть c-файл CFile.c

Как запустить программу через свою?
Как запустить прочую программу по нажатии кнопки ? unit Unit1; interface uses Windows, Messages, SysUtils, Variants,...

Как запустить java прогу не через консоль.
Доброго времени суток! Проблема в следующем. Допустим я создал некое оконное преложение состоящее из пакетов и java классов. Затем я...

Как через свою программу запустить другую от имени админа?
Как через свою программу запустить другую от имени админа? Ну что бы вылезло окно подтверждения.

Как можно запустить прогу, не используя функцию Shell, а используя API функцию?
Привет Всем! Подскажите, как можно запустить прогу, не используя функцию Shell, а используя API функцию. Наверное PostMessage или...


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

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

Новые блоги и статьи
Мастер-класс по микросервисам на Node.js
Reangularity 21.06.2025
Node. js стал одной из самых популярных платформ для микросервисной архитектуры не случайно. Его неблокирующая однопоточная модель и событийно-ориентированный подход делают его идеальным для. . .
Управление Arduino из WPF приложения
Wired 21.06.2025
Зачем вообще связывать Arduino с WPF-приложением? Казалось бы, у Arduino есть собственная среда разработки, своя экосистема, свои способы управления. Однако при создании серьезных проектов. . .
Звёздная пыль
kumehtar 20.06.2025
Я просто это себе представляю: как создавался этот мир. Как энергия слипалась в маленькие частички. Как они собирались в первые звёзды, как во вселенной впервые появился Свет. Как эти звёзды. . .
Создание нейросети с PyTorch
AI_Generated 19.06.2025
Ключевое преимущество PyTorch — его питоновская натура. В отличие от TensorFlow, который изначально был построен как статический вычислительный граф, PyTorch предлагает динамический подход. Это. . .
JWT аутентификация в ASP.NET Core
UnmanagedCoder 18.06.2025
Разрабатывая веб-приложения, я постоянно сталкиваюсь с дилеммой: как обеспечить надежную аутентификацию пользователей без ущерба для производительности и масштабируемости? Классические подходы на. . .
Краткий курс по С#
aaLeXAA 18.06.2025
Здесь вы найдете все необходимые функции чтоб написать програму на C# Задание 1: КЛАСС FORM 1 public partial class Form1 : Form { Spisok listin = new Spisok(); . . .
50 самых полезных примеров кода Python для частых задач
py-thonny 17.06.2025
Эффективность работы разработчика часто измеряется не количеством написаных строк, а скоростью решения задач. Готовые сниппеты значительно ускоряют разработку, помогают избежать типичных ошибок и. . .
C# и продвинутые приемы работы с БД
stackOverflow 17.06.2025
Каждый . NET разработчик рано или поздно сталкивается с ситуацией, когда привычные методы работы с базами данных превращаются в источник бессонных ночей. Я сам неоднократно попадал в такие ситуации,. . .
Angular: Вопросы и ответы на собеседовании
Reangularity 15.06.2025
Готовишься к техническому интервью по Angular? Я собрал самые распространенные вопросы, с которыми сталкиваются разработчики на собеседованиях в этом году. От базовых концепций до продвинутых. . .
Архитектура Onion в ASP.NET Core MVC
stackOverflow 15.06.2025
Что такое эта "луковая" архитектура? Термин предложил Джеффри Палермо (Jeffrey Palermo) в 2008 году, и с тех пор подход только набирал обороты. Суть проста - представьте себе лук с его. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru