Нужна помощь с сокетами на C#

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by l.sEw.l, 27 Oct 2008.

  1. l.sEw.l

    l.sEw.l New Member

    Joined:
    19 Jun 2008
    Messages:
    6
    Likes Received:
    1
    Reputations:
    0
    Написал я кое-что на пхп и мне понадобилось переписать под вин, пришлось осваивать сокеты на С#. В пхп сокеты - мегапросто, а вот в C# ну никак не могу разобраться с кучей возможных вариантов и т.д., кароче путаница полная в голове. Дело в том что я отлично знаю процедуру инициализации и использования сокета, мне нужен именно синтаксис, конкретный, рабочий, небольшой пример использования сокетов на C#, буквально коннект к яндексу, отправпа обчного заголовка и получение(вывод) контента. Выручайте...
     
  2. Feonor

    Feonor Elder - Старейшина

    Joined:
    23 Jul 2008
    Messages:
    128
    Likes Received:
    52
    Reputations:
    19
    ну может так, вот примерчик:
    Code:
    using System;
    using System.Net;
    
    class NetDemo
    {
        public static void Main()
        {
            HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://www.penisbot.ru");
            HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
            Stream istrm = resp.GetResponseStream();
            /*теперь у нас в потоке код html-документа*/
            ...
    
    незабудь закрыть поток resp.Close(); :cool:
     
    #2 Feonor, 27 Oct 2008
    Last edited: 27 Oct 2008
  3. ToniKapuchon

    ToniKapuchon Elder - Старейшина

    Joined:
    26 Feb 2006
    Messages:
    153
    Likes Received:
    45
    Reputations:
    -1
    HttpWebRequest
    WebRequest
    почитай про ети два класса - будет тебе счастья!!
    а ваще про сокеты на шарпе первый раз слышу...
     
  4. 12usver12

    12usver12 Elder - Старейшина

    Joined:
    12 Dec 2007
    Messages:
    50
    Likes Received:
    9
    Reputations:
    0
    проще чем в шарпе уже некуда
    WebClient wc = new WebClient();
    wc.DownloadFile("yandex.ru","C:\\1.html");
    // а потом Streamreader работать

    а можно не сохраняя на диск, в память
    HttpWebRequest webRequest =(HttpWebRequest)WebRequest.Create("http://rambler.ru");
    HttpWebResponse WebResponse = (HttpWebResponse)webRequest.GetResponse();
    StreamReader streamReader = new StreamReader(WebResponse.GetResponseStream(),Encoding.GetEncoding(1251));
    string source = streamReader.ReadToEnd();
    streamReader.Close();
     
  5. Jes

    Jes Elder - Старейшина

    Joined:
    16 Apr 2007
    Messages:
    370
    Likes Received:
    391
    Reputations:
    34
  6. W!z@rD

    W!z@rD Борец за русский язык

    Joined:
    12 Feb 2006
    Messages:
    973
    Likes Received:
    290
    Reputations:
    43
    омг, ToniKapuchon сколько работаешь с шарпом, да вообще с .NET?
    выше указанные классы, это просто оболочки сокетов.

    автор, как вариант можно тупо подгружать библиотеки. Атрибут DllImport (если мне память не изменяет)
    P.S. вот же народ любит код дублировать, типа есть отличия.
     
  7. l.sEw.l

    l.sEw.l New Member

    Joined:
    19 Jun 2008
    Messages:
    6
    Likes Received:
    1
    Reputations:
    0
    А как отправить обычный заголовок? Я попытался подобным образом:

    Code:
    public static void Main()
        {
            HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://yandex.ru");
            HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
    
            StreamReader sr = new StreamReader(resp.GetResponseStream(), Encoding.GetEncoding(1251));
            StreamWriter sw = new StreamWriter(req.GetRequestStream(), Encoding.GetEncoding(1251));
    
            sw.Write("GET / HTTP/1.0\r\nAccept: */*\r\nAccept-Language: ru\r\nUA-CPU: x86\r\nHost: yandex.ru\r\nConnection: Keep-Alive\r\n\r\n");
    
            string source = sr.ReadToEnd();
            Console.WriteLine(source);
            sr.Close();
            sw.Close();
            Console.ReadLine();
        }
    Пишет ошибку в потоке стримрайтера...
     
  8. l.sEw.l

    l.sEw.l New Member

    Joined:
    19 Jun 2008
    Messages:
    6
    Likes Received:
    1
    Reputations:
    0
    Все, нашел, очень полезная статья: _http://www.gotdotnet.ru/LearnDotNet/NETFramework/491563.aspx
     
  9. 12usver12

    12usver12 Elder - Старейшина

    Joined:
    12 Dec 2007
    Messages:
    50
    Likes Received:
    9
    Reputations:
    0
    я ж тебе дал готовый кусок кода, который это все дело выполняет тока без использования httpheaders но они в даном случае и не нужны, да и еще для отображения русских букв используй кодировку utf-8
     
  10. l.sEw.l

    l.sEw.l New Member

    Joined:
    19 Jun 2008
    Messages:
    6
    Likes Received:
    1
    Reputations:
    0
    Можно узнать как в C#, в консольном приложении реализовать вывод(изменения) переменных в реальном времени. То есть, например, в консоль вывел две строки:
    Бэд :
    Гуд :

    после двоиточий по идее должны стоять переменные, которые в процессе работы программы естественно будут изменяться. Так вот, как осуществить подобный вывод?
     
  11. vikseriq

    vikseriq Elder - Старейшина

    Joined:
    31 Jul 2008
    Messages:
    118
    Likes Received:
    44
    Reputations:
    2
    Так и осуществить:
    Code:
    Console.WriteLine("{0}: {1}", "GOOD", a);
    Console.WriteLine("{0}: {1}", "BAD", b);
    
     
  12. vikseriq

    vikseriq Elder - Старейшина

    Joined:
    31 Jul 2008
    Messages:
    118
    Likes Received:
    44
    Reputations:
    2
    Ааа, типа понял.. Тогда перерисовывай окно )
    Товарищи, я тоже не знаю:
    Как в консольном приложении менять определенное значение на выводе? Ну, типа как это: "Загрузка x%. Подождите". Как этот x менять?
     
  13. vid

    vid Member

    Joined:
    16 Aug 2006
    Messages:
    20
    Likes Received:
    5
    Reputations:
    0
    msdn раздел console
     
  14. vikseriq

    vikseriq Elder - Старейшина

    Joined:
    31 Jul 2008
    Messages:
    118
    Likes Received:
    44
    Reputations:
    2
    не спасло.
     
  15. l.sEw.l

    l.sEw.l New Member

    Joined:
    19 Jun 2008
    Messages:
    6
    Likes Received:
    1
    Reputations:
    0
    Вопрос на счет "активной" переменной, еще актуален... А пока еще один, например мне надо проверить проксину на работоспособность, перед использованием, как проще всего это зделать? Инициализировать для этого сокеты, а в C# это меганеудобно, думаю будет глупо.
     
  16. vikseriq

    vikseriq Elder - Старейшина

    Joined:
    31 Jul 2008
    Messages:
    118
    Likes Received:
    44
    Reputations:
    2
    Читай этот топик, ллол ))
    А как юзать прокси в СиШарпе ?
     
  17. 12usver12

    12usver12 Elder - Старейшина

    Joined:
    12 Dec 2007
    Messages:
    50
    Likes Received:
    9
    Reputations:
    0
    в классе WebRequest есть свойство proxy , пробуй посылать запрос на скачку ya.ru, если есть ответный поток то проксик гуд
     
    1 person likes this.
  18. vikseriq

    vikseriq Elder - Старейшина

    Joined:
    31 Jul 2008
    Messages:
    118
    Likes Received:
    44
    Reputations:
    2
    А как в VB заюзать прокси? :)
     
  19. vid

    vid Member

    Joined:
    16 Aug 2006
    Messages:
    20
    Likes Received:
    5
    Reputations:
    0
    http://msdn.microsoft.com/en-us/library/ms686025(VS.85).aspx
     
    1 person likes this.
  20. l.sEw.l

    l.sEw.l New Member

    Joined:
    19 Jun 2008
    Messages:
    6
    Likes Received:
    1
    Reputations:
    0
    Приведи примерчик пожалуйсто, если не сложно?!

    ЗЫ по ссылке способы на С++, а мы обсуждаем C#!
     
    #20 l.sEw.l, 6 Nov 2008
    Last edited: 6 Nov 2008