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

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


Выпуск # 677

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


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

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

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

Форумы Kbyte.Ru

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

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

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

Всем привет, я пишу прокси сервер, использовал для этого HttpListener. Все запросы идут через мой прокси сервер на пхп шлюз.
Прокси сервер:

Hi. I write http proxy using http listener. REquest from browser goes through HttpListener and then through php gate.
My Proxy Server:

namespace HtppListenerWebServer
{
 class Program
 {
 static void Main(string[] args)
 {
 if (!HttpListener.IsSupported)
 {
 //Console.WriteLine("Windows XP SP2 or Server 2003 is required to use the HttpListener class.");
 return;
 } 
 HttpListener listener = new HttpListener();

 listener.Prefixes.Add("http://*:8561/");

 while (true)
 { 
  
 listener.Start();
 IAsyncResult result = listener.BeginGetContext(new AsyncCallback(ListenerCallback), listener);
  
 Console.WriteLine("Waiting for request to be processed asyncronously.");
 result.AsyncWaitHandle.WaitOne();
 Console.WriteLine("Request processed asyncronously.");
 }

 listener.Close();
 }

 public static void ListenerCallback(IAsyncResult result)
 {
 HttpListener listener = (HttpListener)result.AsyncState;
 
 HttpListenerContext context = listener.EndGetContext(result);
 HttpListenerRequest request = context.Request;

 System.Collections.Specialized.NameValueCollection headersCollection = request.Headers;
 string headers = "";

 foreach (string key in headersCollection.AllKeys)
 {
 string[] values = headersCollection.GetValues(key);

 headers += key + ": " + values[0] + "\r\n";
 }
 
 headers = request.HttpMethod + " " + request.RawUrl + " HTTP/1.0\r\n" + headers + "\r\n";

 HttpWebRequest werequest = WebRequest.Create("http://phpProxy1") as HttpWebRequest;
 werequest.Method = "POST";
 werequest.ContentType = "application/x-www-form-urlencoded";
 
 string post_data = "host=" + Program.EncodeTo64(request.UserHostName) + "&Data=" + Program.EncodeTo64(headers); 
 byte[] byteArray = System.Text.ASCIIEncoding.UTF8.GetBytes(post_data);
 werequest.ContentLength = byteArray.Length;

 Stream dataStream = werequest.GetRequestStream();
 dataStream.Write(byteArray, 0, byteArray.Length);
 dataStream.Close(); 
			
 HttpWebResponse response = (HttpWebResponse)werequest.GetResponse();
 using (Stream receiveStream = response.GetResponseStream())
 {
 HttpListenerResponse responseOut = context.Response;
  
 responseOut.ContentLength64 = response.ContentLength >= 0 ?response.ContentLength : 0;
 int bytesCopied = CopyStream(receiveStream, responseOut.OutputStream);
 responseOut.OutputStream.Close();
 Console.WriteLine("Copied {0} bytes", bytesCopied);
 }
 
 }

 static public string EncodeTo64(string toEncode)
 { 
 byte[] toEncodeAsBytes

  = System.Text.ASCIIEncoding.ASCII.GetBytes(toEncode);

 string returnValue

  = System.Convert.ToBase64String(toEncodeAsBytes);

 return returnValue; 
 } 
 public static int CopyStream(Stream input, Stream output)
 {
 byte[] buffer = new byte[32768];
 int bytesWritten = 0;
 while (true)
 {
 int read = input.Read(buffer, 0, buffer.Length);
 if (read <= 0)
  break;
 output.Write(buffer, 0, read);
 bytesWritten += read;
 }
 return bytesWritten;
 }
 }
}
http://phpProxy1 - пхп шлюз:
$host = base64_decode($_POST['host']);
$Data = base64_decode($_POST['Data']); 
 
 $stream = fopen('data://text/plain,' . $Data,'r');
 $fsok = fsockopen($host, 80, $errno, $errstr, 20);
 $BuffLen = 4096;
 
if($fsok)
{
 while ($wbuffer = fread($stream , $BuffLen)) {
	 fwrite($fsok, $wbuffer);
 } 
	 
 fflush($fsok);

 while ($rbuffer = fread($fsok, $BuffLen)) { 
		echo $rbuffer; 
 }
}
 
fflush($fsok);
fclose($fsok);

Проблема в том, что юзая мой прокси, в браузере я получаю текстовый контент


HTTP/1.1 200 OK
Date: Wed, 22 Feb 2012 11:22:41 GMT
Server: Apache
Set-Cookie: last_visit_time=1329909761; expires=Sat, 21-Feb-2015 11:22:41 GMT; path=/
Pragma: no-cache
Cache-Control: no-cache, must-revalidate
Expires: Sat, 22 Nov 2003 14:18:11 GMT
X-robots-tag: noarchive
Content-Length: 1578
Connection: close
Content-Type: text/html

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Documentation - System Favorites</title>
<meta name="description" content="TrueCrypt - free open-source disk encryption - documentation - System Favorites">
<meta name="keywords" content="encryption, security">
<meta name="robots" content="noarchive">
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7">
 
</head>
<frameset rows="113,*" frameborder="no" border="1" framespacing="0" >
 <frame src="/navigation" name="frameTCDocsNavBar" scrolling="no" noresize >
 <frameset rows="*" cols="182,685,*" frameborder="no" border="1" bordercolor="#0099FF" >
 <frame src="/docs/toc" name="frameTCDocsTOC" scrolling="yes" noresize topmargin="0" leftmargin="0" marginheight="0" marginwidth="0">
 <frame src="/docs/system-favorites" name="frameTCDocsMain" scrolling="yes" noresize marginheight="10" marginwidth="30">
 <frame src="/docs/rightbar" name="frameTCDocsRightBar" scrolling="no" noresize marginheight="0" marginwidth="0">
 </frameset>
</frameset>
</html>

Почему результат запроса отображается как текст ? Кто-нибудь может помочь?/frameset

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

Ответ #1 @Aleksey Nemiro 23.02.2012 17:00
И в чем именно проблема?

Или в браузер отдаются данные вместе с HTTP-заголовками?
Заголовки HTTP:
HTTP/1.1 200 OK
Date: Wed, 22 Feb 2012 11:22:41 GMT
Server: Apache
Set-Cookie: last_visit_time=1329909761; expires=Sat, 21-Feb-2015 11:22:41 GMT; path=/
Pragma: no-cache
Cache-Control: no-cache, must-revalidate
Expires: Sat, 22 Nov 2003 14:18:11 GMT
X-robots-tag: noarchive
Content-Length: 1578
Connection: close
Content-Type: text/html

Если так, то значит в таком виде данные были перенаправлены в браузер. Думаю, здесь нужно на стороне PHP парсить полученные HTTP-заголовки и передавать их клиенту. И отделять содержимое от HTTP-заголовков, чтобы в браузер был передан только контент. Отделять HTTP-заголовки нужно по первому вхождению пары символов \r\n. Т.е. все, что до первого вхождения \r\n\r\n - это HTTP-заголовки, а после - контент.

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

Добавить свой ответ в эту тему
Добрый день. По работе возникла необходимость работать с БД через Qt'шный Interview Framework. Проблема в том, что таблиц там используется две, а способов работать с более чем одной таблицей, в фреймворке кроме как через представление (view), я не нашёл. Издеваться над логикой БД через применение view'шек не сильно хочется.
Собственно вопрос - есть ли другой способ? Я искал, везде где нашёл, были только советы писать view и скармливать фреймворку как таблицу, т.е. тот вариант, которого я стараюсь избежать.

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

Привет всем! Ребятя мне нужна ваша помощь. Я тут создал одну маленькую програмку на бэйзик 2010, вообщем это база данных телефонов компании. Для быстрого поика сотрудников на форму я поставил TEXTBOX. Мне нужны чтоб когда я ввожу какие-либо данные в TEXTBOX, то программа сразу же находила нужную информацию из базы. Для базы данных я использовал SQL Server 2008. Спасибо большое!!!

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

Ответ #1 @Aleksey Nemiro 19.02.2012 14:09
Запросы на выборку данных могут быть следующими:
SELECT * FROM [таблица] WHERE [имя поля] = 'точное совпадение'
SELECT * FROM [таблица] WHERE [имя поля] LIKE '%поиск части строки%'

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

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

Private Sub DataGridView1_MouseDown(sender As Object, e As System.Windows.Forms.MouseEventArgs)
Handles DataGridView1.MouseDown
    Dim HitTest As System.Windows.Forms.DataGridView.HitTestInfo
    Dim CM As New ContextMenuStrip
    HitTest = DataGridView1.HitTest(e.X, e.Y)
    Select Case e.Button
      Case System.Windows.Forms.MouseButtons.Right
        Select Case e.Button
          Case MouseButtons.Right
            CM.Items.Clear()
            CM.Items.Add("Загрузить...")
            CM.Items.Add("Удалить...")
            CM.Items.Add("Создать водяной знак...")
            CM.Items.Add("Копировать")
            DataGridView1.ContextMenuStrip = CM
            DataGridView1.ContextMenuStrip.Show(DataGridView1, New Point(e.X, e.Y))
        End Select
    End Select
  End Sub

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

Ответ #1 @Aleksey Nemiro 19.02.2012 11:57
Подскажите, пожалуйста, как программным путём прикрепить контектное меню к определённой колонке в DataGridView?
Меню в идеале должно быть одно. Можно менять список элементов, в зависимости от колонки. Либо Visible, либо Enable.
Обработчик можно сделать в событие Opening контекстного меню. Проверять свойство CurrentCell у DataGridView. Индекс колонки можно найти в свойстве ColumnIndex.
Private Sub ContextMenuStrip1_Opening(sender As System.Object, e As System.ComponentModel.CancelEventArgs) Handles ContextMenuStrip1.Opening
  If DataGridView1.CurrentCell Is Nothing Then Return 'ячейка не выбрана
  Select Case DataGridView1.CurrentCell.ColumnIndex
   Case 0
    ToolStripMenuItem2.Visible = False
    ToolStripMenuItem3.Visible = True
    ToolStripMenuItem4.Visible = True

   Case 1
    ToolStripMenuItem2.Visible = False
    ToolStripMenuItem3.Visible = True
    ToolStripMenuItem4.Visible = False

   Case 2
    ToolStripMenuItem2.Visible = True
    ToolStripMenuItem3.Visible = False
    ToolStripMenuItem4.Visible = True
  End Select
End Sub

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

Ответ #2 @Scryaga 19.02.2012 16:09
Алексей, это, именно, -то, что мне было необходимо! Спасибо огромное!
В общем, нарисовалась такая картина:

Private Sub CMS_Opening(sender As System.Object, e As System.ComponentModel.CancelEventArgs) Handles CMS.Opening
    If DataGridView1.CurrentCell Is Nothing Then Return 'ячейка не выбрана
    Select Case DataGridView1.CurrentCell.ColumnIndex

      Case 0
        TSM1.Visible = False
        TSM2.Visible = True
        TSM3.Visible = True
        TSM4.Visible = True
      Case 1
        TSM1.Visible = False
        TSM2.Visible = True
        TSM3.Visible = False
        TSM4.Visible = True
      Case 2
        TSM1.Visible = True
        TSM2.Visible = False
        TSM3.Visible = True
        TSM4.Visible = False
    End Select
      End Sub

 Private Sub CMSLoad()
    CMS = New ContextMenuStrip
    DGV = New DataGridView
    TSM1 = New ToolStripMenuItem
    TSM2 = New ToolStripMenuItem
    TSM3 = New ToolStripMenuItem
    TSM4 = New ToolStripMenuItem
    
    CMS.Items.AddRange(New System.Windows.Forms.ToolStripMenuItem() {TSM1, TSM2, TSM3, TSM4})
    
    TSM1.Text = "Загрузить фото"
    TSM2.Text = "Удалить..."
    TSM3.Text = "Копировать..."
    TSM4.Text = "Создать водяной знак"
    TSM1.Name = "PhotoLoader"
    TSM2.Name = "Deleter"
    TSM3.Name = "Copier"
    TSM4.Name = "Creator"
    
    AddHandler CMS.Click, AddressOf CMS_Opening
    AddHandler TSM1.Click, AddressOf TSM1_Click
    AddHandler TSM2.Click, AddressOf TSM2_Click
    AddHandler TSM3.Click, AddressOf TSM3_Click
    AddHandler TSM4.Click, AddressOf TSM4_Click
    
    ContextMenuStrip = CMS
    DGV.ContextMenuStrip = CMS
    
  End Sub

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

Добавить свой ответ в эту тему
Крупная компания по подбору персонала ООО Light Media , всвязи с получением крупного государственного заказа на создание аудиокниг,приглашает к сотрудничеству молодых, грамотных людей. Все вопросы по адресу aizo.vera@yandex.ru

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

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

Вакансии в IT

Программист Ruby

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

Программист

Россия, Москва | Работа в офисе | 73 000.00 RUB

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

Россия, Москва | Работа в офисе | 60 000.00 RUB

Программист

Россия, Москва | Работа в офисе | 30 000.00 RUB

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

Россия, Москва | Работа в офисе | 40 000.00 RUB

Web программист

Россия, Москва | Работа в офисе | 90 000.00 RUB

WEB-Программист (JavaScript)

Россия, Москва | Работа в офисе | 100 000.00 RUB

Web-программист, php-программист

Россия, Москва | Работа в офисе | 60 000.00 RUB

WEB- программист, администратор сайта

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

Веб дизайнер - верстальщик

Россия, Москва | Работа в офисе | 40 000.00 RUB

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

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

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

С Днем Защитника Отечества!

Администрация Kbyte.Ru поздравляет мужскую половину пользователей портала с Днем Защитника Отечества! Желаем здоровья, здоровья и еще раз здоровья, а также счастья, успехов и всего самого наилучшего! С праздником!

ps: и помните, не вы нужны армии, а она нужна вам ;-)

23.02.2012 12:08 · Категория: Новости Kbyte.Ru · Источник: Kbyte.Ru

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

Panasonic анонсировала водонепроницаемый смартфон Eluga

Panasonic представила мобильный аппарат Eluga с защитой от попадания внутрь корпуса пыли и влаги. Он поступит в продажу в апреле 2012 года и станет первым смартфоном компании, предназначенным не для японского, а для европейского рынка. Цена на устройство пока не называется.

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

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

К концу 2011 года Россия стала лидером по количеству DDOS-трафика

Во втором полугодии 2011 года Интернет захлестнула новая волна DDoS-атак, главной виновницей которых оказалась Россия. Наша страна стала источником 16% DDoS-трафика, зафиксированного системой Kaspersky DDoS Prevention. Чуть меньшую угрозу в этот период представляли Украина (12%), Таиланд (7%) и Малайзия (6%). В общей сложности 90% зарегистрированных атак велись с компьютеров, расположенных в 23 странах мира.

В конце первого полугодия на вершине рейтинга, где сейчас прочно обосновалась Россия, располагались совсем иные территории – США, Индонезия и Польша. Изменение в тройке лидеров и попадание России на верхнюю строчку отчасти связано с усилением мер по защите от DDoS-угроз. Речь идет о системах фильтрации, которые во время атаки блокируют трафик из всех стран кроме той, где живет большинство пользователей сайта. Такие действия вынуждают злоумышленников создавать зомби-сети там же, где находятся их жертвы. Поэтому для атак в Рунете, заказов на которые традиционно много, все больше ботнетов создается на территории России. 

Количество компьютеров в ботсетях также увеличивается. Это отражается и на средней мощности DDoS-атак, которая за полгода выросла на 57%.

Интересно, что активизация зараженных машин, как правило, совпадает с началом рабочего дня – 9-10 часов по местному времени, пик активности приходится на его середину – около 16.00, а вот заканчиваются «трудовые будни» ботов только под утро – в районе 4 часов.

Главной мишенью преступников по-прежнему остаются сайты интернет-торговли – на них приходится четверть всех зафиксированных атак. Следом по популярности идут электронные торговые площадки и игровые сайты – 20% и 15% случаев. Постепенно растет и количество атак на государственные ресурсы (2%), мотивами которых, как правило, являются политические протесты: россиянам достаточно вспомнить атаки на сайты партий и политических движений во время декабрьских выборов в Госдуму РФ.

23.02.2012 12:06 · Категория: Безопасность · Источник: CyberSecurity.ru

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

Канцелярская скрепка помогла обойти пароль в iPhone

Группа разработчиков предложила способ "взлома" защищенного паролем iPhone. Для этого требуется канцелярская скрепка или любой другой предмет, способный открыть отсек с SIM-картой. После нескольких простых манипуляций "взломщик" получает возможность совершать с аппарата звонки и писать SMS.

23.02.2012 03:25 · Категория: Безопасность · Источник: Lenta.ru

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

Вышел веб-сервер Apache 2.4

Фонд разработки открытого программного обеспечения Apache Software Foundation сегодня сообщил о выпуске веб-сервера Apache HTTP Server 2.4, ставшего крупнейшим обновлением этого популярнейшего в интернете веб-сервера. Сегодняшний релиз относится к мейджор-релизам. Предыдущий мейджор - версия Apache 2.2 - был выпущен еще в 2005 году. Версия 2.3 позиционировалась как сборка для программистов и тестеров, тогда как версия 2.4 рекомендована для повседневного использования.

На сегодня, согласно данным веб-мониторинговой компании Netcraft, сервер Apache обслуживает около 65% сайтов в интернете, что составляет порядка 400 млн проектов. Вторым популярным сервером в сети является Microsoft IIS, управляющий 14,5% проектов. На третьем месте сервер Nginx, и хотя на базе него сейчас работают менее 10% сайтов, этот проект является на сегодня самым серьезным конкурентом для Apache, так как по сути оба сервера ориентированы на одну и ту же аудиторию.

Очевидно, что это понимают разработчики Apache, и в версии 2.4 они попытались ликвидировать пробел Apache, который и послужил ростом популярности Nginx - производительность сервера при больших нагрузках. Разработчики Apache подчеркивают, что в версии 2.4 были реализованы новинки, направленные именно на рост производительности их программного обеспечения.

22.02.2012 10:54 · Категория: Программирование · Источник: CyberSecurity.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 если иное не указано отдельно.


В избранное