Ответы пользователя по тегу C#
  • Что означает символ :X?

    AlexXYZ
    @AlexXYZ
    O Keep Clear O
    Мьсе никогда не слышал про системы счисления? (двоичная, восьмиричная, шестнадцатиричная)
    129(10)=81(16)
    Ответ написан
    4 комментария
  • Возможно ли реализовать кнопку выполняющую действие от имени администратора (иконка с щитом) в WPF?

    AlexXYZ
    @AlexXYZ
    O Keep Clear O
    Ещё не пробовал, но простое гугление c# run function as administrator даёт хороший ответ: stackoverflow.com/questions/2021831/admin-rights-f...
    Вроде как WPF тут уже ни при чём. ;)
    Ответ написан
    Комментировать
  • Библиотека для построения графиков без winForm?

    AlexXYZ
    @AlexXYZ
    O Keep Clear O
    Так вроде как в документации написано, что через IPython/IronPython можно использовать matplotlib в Visual Studio https://msdn.microsoft.com/ru-ru/library/dn705848.aspx + интеграция в проект Python stackoverflow.com/questions/23129054/integration-o...
    и далее: https://microsoft.github.io/PTVS/
    stackoverflow.com/questions/11779143/how-to-run-a-...
    Не могут быть уверенным на 100%, что заработает, но в принципе надежда есть.
    Не очень понял, вывод графики куда предполагается? В файл или на экран? GUI запрещён или можно использовать как опцию? (Вот пример с WPF: https://www.codeproject.com/Articles/42174/High-pe... Просто из консоли можно вызывать и WinForm и WPF.
    Ответ написан
    Комментировать
  • [Решено] Shortcut Visual Studio 2015 выделить код в блоке между фигурными скобками когда курсор в произвольном месте блока?

    AlexXYZ
    @AlexXYZ Автор вопроса
    O Keep Clear O
    Нашёл extension для 2015, который расширяет выделение от текущего места в коде сначала до слова, потом до строки, потом расширяет выделение на родительские блоки: HotCommandsforVisualStudio

    3b389c598f594cb889d6f7c916dfff98.gif
    Ответ написан
    Комментировать
  • Часто ли вы используете интерфейсы?

    AlexXYZ
    @AlexXYZ
    O Keep Clear O
    У каждого своё понимание интерфейса и в зависимости от этого и пишутся программы с использованием тех или иных шаблонов. Обычно для задачи выбирается стек технологий и если выбран удачно, то программа будет жить долго и счастливо. Ну, а если нет, то... не повезло.
    Ответ написан
    Комментировать
  • C#, требуется отправить сырой HTTP(S) запрос?

    AlexXYZ
    @AlexXYZ Автор вопроса
    O Keep Clear O
    Разобрался!
    Маленькая тонкость - сервером выступает ElasticSearch.

    Действительно, решение через
    new Socket()
    правильное. Но! Нужно ООООЧЕНЬ внимательно следить за тем, что пишется в заголовках, а особенно за заголовком "Content-Length: NNN":
    1. Обязательно его вставлять, даже если он не указан!
    2. Правильно считать длину тела запроса. Не по символам, а по байтам.

    Вот переработанный пример кода MS из совета Петр, который уже нормально заработал:

    private void btnRequest_Click(object _sender, EventArgs e)
            {
                /* Текстовое поле, из которого я беру текст вида:
    GET http://HOST:9200/_search HTTP/1.1
    Host: HOST:9200
    
    {
    ....
        "highlight" : {
            "fields" : {
                "*" : {}
    
            }
        }
    }
               */
                string str = request_text.Text; 
                byte[] bytes = new byte[100024];  // Примерное число, которое надо поменять, если требуется! Мне для экспериментов подошло. В дальнейшем можно будет сделать какой-нибудь ByteStream
    
                // Connect to a remote device.
                try
                {
                    string str_first = str.Split(new char[] { '\r', '\n' })[0];
                    string[] arr_str_first = str_first.Split(' ');
                    string[] arr_str_address = arr_str_first[1].Split('/');
                    Uri uri = (new Uri(arr_str_first[1]));
                    string new_str_first = arr_str_first[0] + " /" + arr_str_address.Last() + " " + arr_str_first[2];
    
                    // разделить запрос на две части - заголовки и тело:
                    string str_headers = str.Substring(str_first.Length + 2, str.IndexOf("\r\n\r\n") - str_first.Length - 2);
                    string str_body = str.Substring(str.IndexOf("\r\n\r\n") + 4);
    
                    int index_substring_content_length = str_headers.IndexOf("Content-Length:");
                    if (index_substring_content_length >= 0)
                    {
                        string tmp = str_headers.Substring(index_substring_content_length);
                        string[] arr_temp = tmp.Split(new char[] { '\r', '\n' });
                        string sub_string_content_length = arr_temp[0];
                        sub_string_content_length = "\r\n" + sub_string_content_length;
                        Regex regex = new Regex(sub_string_content_length);
                        str_headers = regex.Replace(str_headers, "", 1);
                    }
    
                    // Establish the remote endpoint for the socket.
                    IPHostEntry ipHostInfo = Dns.GetHostEntry(uri.Host);
                    IPAddress ipAddress = ipHostInfo.AddressList[0];
                    IPEndPoint remoteEP = new IPEndPoint(ipAddress, uri.Port);
    
                    // Create a TCP/IP  socket.
                    Socket sender = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
    
                    // Connect the socket to the remote endpoint. Catch any errors.
                    try
                    {
                        sender.Connect(remoteEP);
    
                        Console.WriteLine("Socket connected to {0}", sender.RemoteEndPoint.ToString());
    
                        string raw_request = new_str_first+"\r\n"+str_headers+ "\r\nContent-Length: "+ Encoding.UTF8.GetBytes(str_body).Length+"\r\n\r\n"+str_body;
    
                        // Encode the data string into a byte array.
                        byte[] msg = Encoding.UTF8.GetBytes(raw_request); // + "<Client Quit>");
    
                        // Send the data through the socket.
                        int bytesSent = sender.Send(msg);
                        Console.WriteLine("bytesSent = {0}", bytesSent.ToString());
    
                        // Receive the response from the remote device.
                        int bytesRec = sender.Receive(bytes); 
                        Console.WriteLine("Echoed test = {0}", Encoding.UTF8.GetString(bytes, 0, bytesRec)); // bytesRec));
    
                        // Release the socket.
                        sender.Shutdown(SocketShutdown.Both);
                        sender.Close();
    
                    }
                    catch (ArgumentNullException ane)
                    {
                        Console.WriteLine("ArgumentNullException : {0}", ane.ToString());
                    }
                    catch (SocketException se)
                    {
                        Console.WriteLine("SocketException : {0}", se.ToString());
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine("Unexpected exception : {0}", ex.ToString());
                    }
    
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.ToString());
                }
            }


    Вот результат, который было нужно получить в ответе от сервера:
    e9834dff7f9d4bfa849a2f10ae73a9a6.png

    Результат получен.

    P.S.
    Понял, почему не получалось с самого начала. Посмотрев, как Fiddler2 достаточно вольно обращается с синтаксисом запросов в разделе Composer, я и подумал, что и мне так можно. Но, скорее всего, в фоне Fiddler2 всё-таки перерабатывает запрос, стараясь максимально приблизить его к стандарту. Вот пример разницы того, что записано в Composer уменя и что показывает Inspector:

    cbe1feb2544f445e8b99fa03a5f306eb.png
    Ответ написан
  • Изучение c# путем создания игр, стоит ли идти по такому пути и какие есть варианты?

    AlexXYZ
    @AlexXYZ
    O Keep Clear O
    Программирование происходит в голове. Компьютер всего лишь средство выражения, так же как и windows forms. Приучите себя писать не только код, но и документацию. В общем программирование игр на игру совсем не похоже и обрастает кучей допработ, которые делать не всегда хочется, потому что а) я это миллион раз видел у других и б) я думал это должно работать само, а оно во как вышло, что мне нужно сделать то, что пользователи будут стремиться "пропустить" как назойливое препятствие на пути к экшену.
    Из маленьких наблюдений за профессией - просто делайте по одному два открытия/инсайта для себя, но каждый день. Сохраняйте темп, продолжайте бежать. :)
    Ответ написан
    Комментировать
  • Как выполнить javascript во внешнем браузере?

    AlexXYZ
    @AlexXYZ
    O Keep Clear O
    А если написать html страницу и вставить туда ваш скрипт?
    Ответ написан
  • Как сменить ip адрес сетевой карты через C#?

    AlexXYZ
    @AlexXYZ
    O Keep Clear O
    Менял так (в публичных свойствах задавал требуемые параметры, потом вызывал set):

    (прокрутка вправо-влево shift-колёсико)
    using System.Management;
    
            private class StaticIP : IConfigurationIP
            {
                // mac-адрес адаптера, которому присваиваются настройки:
                public String macAddress;
                public string[] IPAddress;
                public string[] IPSubnet;
                public string[] DefaultIPGateway;
                public string[] DNSServerSearchOrder;
                public UInt16[] GatewayCostMetric;
                public int proxyStatus;
    
                /// <summary>
                /// Установить конфигурацию сетевого адаптера, используя имеющиеся в классе настройки.
                /// В принципе было бы корректно освобождать IP-адрес перед установкой статического адреса. см. msdn.microsoft.com/en-us/library/aa393047(v=vs.85).aspx
                /// (ReleaseDHCPLease)
                /// </summary>
                void IConfigurationIP.set()
                {
                    ManagementClass objMC = new ManagementClass("Win32_NetworkAdapterConfiguration");
                    ManagementObjectCollection objMOC = objMC.GetInstances();
    
                    foreach (ManagementObject objMO in objMOC)
                    {
                        if ((bool)objMO["IPEnabled"])
                        {
                            try
                            {
                                // Параметры objMO: http://msdn.microsoft.com/en-us/library/aa394217%28v=vs.85%29.aspx
                                // Найти сетевую карту с mac-адресом, для которой предназначена эта настройка:
                                string _macAddress = (string)objMO["MACAddress"];
                                if (_macAddress.Equals(this.macAddress))
                                {
                                    // http://www.java2s.com/Tutorial/CSharp/0580__Network/GetIPaddressfromWin32NetworkAdapterConfiguration.htm
    
                                            // http://msdn.microsoft.com/en-us/library/aa394217%28v=vs.85%29.aspx
                                            ManagementBaseObject EnableStatic = objMO.GetMethodParameters("EnableStatic");
                                            ManagementBaseObject EnableStatic_ret;
                                            EnableStatic["IPAddress"] = this.IPAddress;
                                            EnableStatic["SubnetMask"] = this.IPSubnet;
                                            EnableStatic_ret = objMO.InvokeMethod("EnableStatic", EnableStatic, null);
    
                                            ManagementBaseObject DNSServerSearchOrder = objMO.GetMethodParameters("SetDNSServerSearchOrder");
                                            ManagementBaseObject DNSServerSearchOrder_ret;
                                            DNSServerSearchOrder["DNSServerSearchOrder"] = this.DNSServerSearchOrder;
                                            DNSServerSearchOrder_ret = objMO.InvokeMethod("SetDNSServerSearchOrder", DNSServerSearchOrder, null);
    
                                            ManagementBaseObject SetGateways = objMO.GetMethodParameters("SetGateways");
                                            ManagementBaseObject SetGateways_ret;
                                            SetGateways["DefaultIPGateway"] = this.DefaultIPGateway;
                                            SetGateways["GatewayCostMetric"] = this.GatewayCostMetric;
                                            SetGateways_ret = objMO.InvokeMethod("SetGateways", SetGateways, null);
    
                                            RegistryKey registry = Registry.CurrentUser.OpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings", true);
                                            registry.SetValue("ProxyEnable", this.proxyStatus);
                                            //proxyStatus = (int)registry.GetValue("ProxyEnable");
    
                                            Console.WriteLine(" set {0} to {1} finished", this.macAddress, this.IPAddress[0]);
                                            return;
                                }
                            }
                            catch (Exception)
                            {
                                throw;
                            }
                        }
                    }
                }
            }
    Ответ написан
    Комментировать