Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Программирование (VB,C#,ASP,.NET): новости, советы, примеры


Выпуск # 754

Очередной выпуск рассылки! За последнее время на сайте произошло столько всего, столько всего, что все просто не уместилось в этот выпуск! Но ничего, ведь вы всегда можете ознакомиться со всеми обновлениями непосредственно посетив сайт. Кстати, помимо изменения в содержании Kbyte.Ru, появлении новых интересных материалов, проект постоянно совершенствуется технически, и вы можете принять в этом непосредственное участие, присылая свои идеи и предложения.
Надеюсь, этот выпуск будет интересен для вас. Если вы хотите увидеть в следующих выпусках что-то конкретное, напишите мне об этом на ящик subscribe@kbyte.ru.


Содержание выпуска

Читайте в этом выпуске:

Если у вас есть вопросы по программированию или работе с компьютером, не стесняйтесь, спрашивайте.

Форумы Kbyte.Ru

На форумах Kbyte.Ru постоянно появляются новые интересные темы и обсуждения. В этом выпуске представлены лишь новые темы, с момента прошлой рассылки.

Кстати, любой желающий может на форумах Kbyte.Ru совершенно свободно получить помощь грамотных специалистов в области программирования, да и в целом информационных технологий.

Задать свой вопрос прямо сейчас

Сперва общее описание проблемы. У нас есть много датчиков со своими IP, данные от которых проходят через шлюз, который их просто собирает прослушивая определённый порт через сокет. Далее данные передаются серверу, который по IP адресу определяет датчик, от которого пришли данные. Разумеется, это не может быть один адрес шлюза. Вопрос в том, как можно из программы, установленной на шлюзе, менять IP адрес отправителя? То, что отправляемые в ответ сервером данные в таком случае теряются, не имеет значения.

[- к содержанию -]

Ответ #1 @Алексей Немиро 12.12.2013 13:11
Сервер будет получать адрес шлюза в любом случае.

Адрес датчика шлюз может передавать отдельно. Например, как это делают некоторые прокси-сервера, они могут в HTTP-заголовках передавать адрес клиента:
X-Forwarded-For: 127.0.0.1

А серверу нужно будет проверять этот заголовок, чтобы получить адрес датчика. Конечно, это еще зависит от используемого протокола. Но по-другому передать адрес клиента шлюз не сможет.

[- к содержанию -]

Ответ #2 @akisawa 12.12.2013 13:24
Ну почему же совсем нельзя? Есть самый тупой метод изменения IP адреса машины из контрольной панели. Правда, при этом теряются входящие сообщения на основной адрес, приходящие во время временной смены адреса. Но хотя бы так, для начала. Не bat файл же запускать! Должен быть какой-то программный метод. А про дополнительные поля в посылке это первое, что приходит в голову, но сервер не наш, мне его даже не предоставили для разработки. Я должен просто тупо копировать сообщения от датчиков серверу.

[- к содержанию -]

Ответ #3 @Алексей Немиро 12.12.2013 17:39
Есть самый тупой метод изменения IP адреса машины из контрольной панели.
Это очень криво..

Работать будет, если датчики и шлюз находятся в одной сети. Это больше вопрос админский. Подозреваю, что появление в сети двух устройств с одним IP невозможно, и приведет к сбою в работе сети, а если это делать постоянно, то в целом вся система будет глючить. Датчики не смогут отправлять данные шлюзу, или будут отправлять данные другим датчикам, поведение будет зависеть от их конфигурации (например, если есть какой-то лимит ошибок, достижение которого приведет к отключению датчика или еще что-то).
Не bat файл же запускать!
Почему бы и нет. Это просто:
Process.Start(@"C:\setIp.bat");
Решение и так кривое, хуже не станет :)


Я бы не рекомендовал так делать. Лучше сервер заставить понимать адрес датчика из запроса (а может он умеет это делать), связаться с владельцами, разъяснить суть проблемы, наверняка найдется правильное решение. А менять IP - это слишком кривое решение, которое может иметь серьезные негативные последствия.


Думаю, что также должен быть вариант сохранения исходного IP на стороне шлюза. Но это не программирование, а админиг. Может софт какой-то есть для этого..

[- к содержанию -]

Добавить свой ответ в эту тему
Дорогие ребята,
тов.Алексей Немиро.С наступающим Новым Годом.Благополучия Вам, и удачи!
Я собрал нечто, которое умеет нарисованное DrawLine и DrawLines переводить
c Pixel в mm,cm и метры;И измеренное записывать с TextBox и программой в ComboBox.
Проблема: Сохраняется(Save),но если я после некоторых дополнений или изменений
хочу сослаться на этот-же файл,дает исключение.
Вот фрагмент кода:
Dim im As New Bitmap(1660,830)
         Private Sub OpenToolStripMenuItem_Click()
      OpenFileDialog1.Filter = "GIF|*.gif"
      Dim g As Graphics = Graphics.FromImage(im) : pb.Image = im
        If OpenFileDialog1.ShowDialog = Window.Forms.DialogResult.Cancel Then Exit Sub
      im = ImageFromFile(OpenFileDialog1.FileName
      pb.Image = im
        End Sub
    
         Private Sub SavaToolStripMenuItem_Click()
      SaveFileDialog1.Filter = "GIF|*.gif"
      Dim g As Graphics = Graphics.FromImage(im) : pb.Image = im
        If SaveFileDialog1.ShowDialod = Window.Forms.DialogResult.Cancel Then Exit Sub
      im.Save(SaveFaleDialog1.FileName)
      pb.Image = im
         End Sub

[- к содержанию -]

Ответ #1 @Akiva 11.12.2013 20:56
Извините.Не дал объяснения как пользоваться.
1)Для DrawLines-1 : Два щелчка мышью (X1,Y1), (X2,Y) и кнопочка(GO!)
2)Для DrawLines-8 : До 8 щелчков (X1,Y1)...(X8,Y8),массив 8 собранных отрезков.
Остальные объяснения в всплывающих надписях. HELP напишу немного позже.
С уважением, Akiva

[- к содержанию -]

Ответ #2 @Алексей Немиро 12.12.2013 12:41
Переменная im тут лишняя.

Можно работать с pb.Image, это тот же самый Image.
pb.Image = New Bitmap(1660,830)
Dim g As Graphics = Graphics.FromImage(pb.Image)
pb.Image.Save(SaveFaleDialog1.FileName)

[- к содержанию -]

Ответ #3 @Akiva 12.12.2013 18:52
Добавить свой ответ в эту тему
Уважаемые, друзья.
Очень нужна помощь людей которые могут мне помочь.
Я новичок в программировании.
Делаю телефонную книгу на vb.net

Есть несколько листбоксов и строки в них . при заполнении листбоксов появляется поле для скроллинга,но оно неактивно и двигаться по строкам нельзя, подскажите как это сделать, и так чтобы все боксы двигались одновременно. Помогите пожалуйста, очень нужно.
См. скриншот пожалуйста.
Во вложении мой проект. гляньте пожалуйста, как мне быть с прокруткой?
И как организовать в моем случае например поиск по фамилии,должности, т.е некое поле ввода, и при вводе, например, сразу автоматом сортировка по строкам в зависимости от введенных символов.

[- к содержанию -]

Ответ #1 @sanek22bor 11.12.2013 19:43
Ответ #2 @sanek22bor 11.12.2013 19:44
Проект во вложении

[- к содержанию -]

Ответ #3 @Алексей Немиро 12.12.2013 13:04
DataGridView для таких вещей лучше использовать.

Простого управления полосой прокрутки в ListBox нет.
Есть свойство TopIndex, которое позволяет указать индекс элемента списка, который будет находиться сверху, в видимой части списка:
ListBox1.TopIndex = индекс элемента
Еще нужно получить позицию полосы прокрутки, это сложнее. Придется использовать API, или через WndProc ловить. Учитывая, что списков много, решение будет довольно муторным.

Рекомендую DataGridView использовать, он как раз для представления данных создан.

[- к содержанию -]

Ответ #4 @Shark1 12.12.2013 20:09
В Windows Presentation Foundation это очень просто реализовать на уровне ControlTemplate.



см. прикрепленный файл

[- к содержанию -]

Ответ #5 @Dr. Crash 13.12.2013 07:12
sanek22bor Ну раз вам уже подсказали как реализовать скролл. Я подскажу вам про поиск...

Вот код
Public Class Form1

    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        If RadioButton1.Checked = True Then
            Dim massiv_items(ListBox2.Items.Count) As String
            ListBox2.Items.CopyTo(massiv_items, 0)
            For i As Integer = 0 To ListBox2.Items.Count - 1
                If massiv_items(i) = TextBox1.Text Then ListBox1.SelectedIndex = i : ListBox2.SelectedIndex = i : Return
            Next
        ElseIf RadioButton2.Checked = True Then
            Dim massiv_items(ListBox1.Items.Count) As String
            ListBox1.Items.CopyTo(massiv_items, 0)
            For i As Integer = 0 To ListBox1.Items.Count - 1
                If massiv_items(i) = TextBox1.Text Then ListBox1.SelectedIndex = i : ListBox2.SelectedIndex = i : Return
            Next
        End If
    End Sub

    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        RadioButton1.Checked = True
    End Sub
End Class
Код не оптимизирован, даже может выглядит немножко глупо:), но думаю вы справитесь
А если, допустим, вам нужно будет искать несколько одинаковых слов, то можно выводить из куда нибудь. Даже в другое окно, ну или другой лист бокс

[- к содержанию -]

Добавить свой ответ в эту тему
System.NotSupportedException не обработано
HResult=-2146233067
Message=Метод "Distinct" не поддерживается.
Ошибка возникает здесь:
  private void Form1_Load(object sender, EventArgs e)
        {
            var db = GetDBProxy();
            var countries =
                (from c in db.Customers
                 select c.Country).Distinct();
            Debug.Print("1");
            foreach (String item in countries.ToList()) // конкретно тут.
            {
                
            }
            GetDBProxy(true);
            
        }
Сама процедура:
private ServiceReference1.NORTHWNDEntities GetDBProxy(bool LinkDataSource=false)
        {
            ServiceReference1.NORTHWNDEntities proxy = new ServiceReference1.NORTHWNDEntities(new Uri("http://localhost:63672/NorthwindCustomers.svc/"));
            if(LinkDataSource==true)
            {
                this.customerBindingSource.DataSource = proxy.Customers;
            }
            return proxy;
        }

Ну и код, собственно.

[- к содержанию -]

Ответ #1 @Алексей Немиро 08.12.2013 22:58
Раз не найден Distinct, значит его нет :)
Попробуй преобразовать результат в Enumerable и из него дергать Distinct.

Если не разберешься, завтра, когда буду за компом, гляну.

[- к содержанию -]

Ответ #2 @Игорь Голов 08.12.2013 23:20
Не получается у меня. Заморочки выходят. Пример у меня учебный, тестовый. Свою самодеятельность тачаю. ))))))
Им с новой силой овладела
охота выучить урок

[- к содержанию -]

Ответ #3 @Алексей Немиро 09.12.2013 12:18
Посмотрел, проблема не в LIQN, и не в Windows Forms, а где-то между веб-проектом и Windows Forms, либо только в веб.

От LINQ лучше отказаться, чтобы не возникало таких непонятных ситуаций, да и без LINQ отладку проводить проще.
LINQ имеет смысл использовать, есть точно знаешь как это работает и каким будет результат, или каким он может быть.

Entity Framework лучше не использовать, это не лучше типизированных DataSet. Лучше делать все руками, что-нибудь свое.
Но для экспериментов, конечно, сгодится.

...

Посмотрел еще, вероятно проблема в веб-проекте. Дальше не стал смотреть, но возможно в базе просто нет записей Customers.

[- к содержанию -]

Ответ #4 @Игорь Голов 11.12.2013 12:30
Записи там есть - просто фильтрация так не работает. Возможно надо изменить настройки WCF - службы. Надо подумать ещё. Печально что не выходит - было бы хорошо чтобы получилось.
LINQ - отлаженниая технология, а велосипед изобретать - та ещё история.

[- к содержанию -]

Ответ #5 @Игорь Голов 11.12.2013 15:52
Большой и важный вопрос: как извлечь значение значения из IOrderedQueryable<ServiceReference1.Customer> countries?
Спасибо.

[- к содержанию -]

Добавить свой ответ в эту тему · В теме есть еще 8 ответов. Смотреть все ответы.

Все темы и обсуждения

Исходные коды

Аналоговые часы

Visual Basic .NET: Даты и время @Akiva 11.12.2013 20:28
Пример интересных аналоговых часов, которые рисуются через FillPia.

К данном исходному коду прилагаются файлы примеров. Скачать.

[- к содержанию -]

Все исходные коды

Вакансии в IT

Программист 1С

Россия, Чебоксары | Работа в офисе | 30 000,00 KBP

PHP-программист

Россия, Новосибирск | Работа в офисе

Программист C++

Россия, Новосибирск | Работа в офисе

Программист 1С

Россия, Ростов-на-Дону | Работа в офисе | 45 000,00 KBP

Вэб программист WEB

Россия, Ростов-на-Дону | Работа в офисе | 12 000,00 KBP

Разработчик приложений на платформе sap

Россия, Екатеринбург | Работа в офисе

Программист 1С

Россия, Екатеринбург | Работа в офисе

Все вакансии в IT · Создать резюме

[- к содержанию -]

Новости мира IT

Представлен самый компактный терабайтный SSD-накопитель

Компания Samsung представила твердотельный накопитель 840 EVO емкостью в один терабайт. Компания называет его самым компактным на рынке: его форм-фактор — 1,8 дюйма (mSATA), в то время как все вышедшие ранее накопители имели размер 2,5 дюйма или больше. Цена пока не называется.

12.12.2013 12:32 · Категория: Железо · Источник: Lenta.ru

[- к содержанию -]

АНБ уличили в сборе информации из cookie-файлов Google

АНБ вело слежку за пользователями интернета с помощью cookie-файлов и геолокационных данных, собираемых компанией Google. Специалистами ведомства перехватывались так называемые PREF-cookie. Собранная информация в дальнейшем использовалась для проведения хакерских операций и «обеспечения удаленного доступа» к компьютерам.

12.12.2013 12:31 · Категория: Безопасность · Источник: Lenta.ru

[- к содержанию -]

АНБ следило за игроками World of Warcraft и владельцами Xbox

Спецслужбы США и Великобритании отслеживали интернет-активность игроков онлайн-игры World of Warcraft и владельцев приставки Xbox. Ведомства собирали и анализировали переписку игроков в чатах World of Warcraft и Second Life, а также занимались созданием базы данных на 48 миллионов пользователей игровой сети Xbox Live.

12.12.2013 12:30 · Категория: Безопасность · Источник: Lenta.ru

[- к содержанию -]

Аpple и Google потребовали от властей США ограничить слежку за интернетом

Американские интернет-компании обратились с открытым письмом к властям США, призвав их реформировать спецслужбы и прекратить масштабный сбор персональных данных своих пользователей. Под обращением подписались представители таких компаний, как Apple, Facebook, Twitter, Google, Yahoo, Microsoft, LinkedIn и AOL.

12.12.2013 12:30 · Категория: Безопасность · Источник: Lenta.ru

[- к содержанию -]

Google откроет отдел по разработке роботов

Google создаст подразделение по разработке роботов. Для этого компания купила семь японских и американских робототехнических стартапов. Отдел возглавит бывший главный разработчик Android. Задача Google — создать «новое поколение роботов», которые будут использоваться в промышленности и розничной торговле.

09.12.2013 12:25 · Категория: Бизнес в IT · Источник: Lenta.ru

[- к содержанию -]

Все новости


Подпишитесь на тематические RSS-ленты Kbyte.Ru, чтобы быть в курсе последних новостей:

Основная лента · Форумы (темы и сообщения) · Visual Basic 5.0/6.0 · Visual Basic .NET · C# (Си шарп) · Delphi · JavaScript · ActionScript · ASP .NET · ASP .NET MVC

Ищите Kbyte.Ru в социальных сетях FaceBook, ВКонтакте, Twitter.

Если вы занимаетесь программированием, то наверняка вам пригодятся хитрые инструменты.


Международный портал для программистов и разработчиков Kbyte.Ru основан в 2006 году. Целью портала является объединение программистов и специалистов IT-бизнеса, студентов и преподавателей для обмена опытом и знаниями, оказания помощи во всех делах и начинаниях в области IT.
Kbyte.Ru является парнёром компаний Mail.Ru Group, WebMoney Transfer, Ozon.Ru и др.
Выпуск рассылки подготовлен автоматически. Все права на материалы выпуска принадлежат Kbyte.Ru если иное не указано отдельно.


В избранное