ФорумПрограммированиеБольше языковC/C++ и C# → C# №3: Работа с сетью. Sockets.

C# №3: Работа с сетью. Sockets.

  • Frozzeg

    Сообщения: 5641 Репутация: N Группа: Джедаи

    Spritz Янв. 6, 2011, 1:33 д.п., спустя 543 дня 8 часов 20 минут

    ебаный стыд
    You can be anything you want to be. Just turn yourself into anything you think that you could ever be.
  • Butcher

    Сообщения: 10 Репутация: N Группа: Кто попало

    Spritz Фев. 16, 2011, 12:23 п.п., спустя 41 день 10 часов 49 минут

    Здравствуйте. Может кто нить вытаскивал письма с ящика?. На php написать подобное не составило труда, но в шарпе не получается. Во-первых, присоединиться получилось только рамблеровскому серваку (к тому, к котрому надо и в частности маил.ру ошибка - CURL_CUIDNT_CONNECT). Код:

    Easy.WriteFunction rf = new Easy.WriteFunction(OnWriteData);

    easy.SetOpt(CURLoption.CURLOPT_URL, "pop.rambler.ru");
    easy.SetOpt(CURLoption.CURLOPT_USERPWD, login + ":" + passwd);
    easy.SetOpt(CURLoption.CURLOPT_WRITEFUNCTION, rf); // записываю результат в буфер


    public static Int32 OnWriteData(Byte[] buf, Int32 size, Int32 nmemb, Object extraData) // функцию тупо взял с инета
    {
    SockBuff = SockBuff + System.Text.Encoding.UTF8.GetString(buf);
    return size * nmemb;
    }

    Результат на скрине..

    Вооот, т.е. я получил html-код страницы, а как бы получить содержимое письма??))), наверн надо по другому в буфер инфу класть?
    1. (753)
    2. .jpg_1 (749)
  • Butcher

    Сообщения: 10 Репутация: N Группа: Кто попало

    Spritz Фев. 16, 2011, 12:28 п.п., спустя 5 минут 5 секунд

    Ах да, забыл сказать, работаю c libcurl..
  • Rotten

    Сообщения: 2243 Репутация: N Группа: Адекваты

    Spritz Фев. 17, 2011, 11:55 д.п., спустя 23 часа 27 минут 34 секунды

    бля, пиздец..
    методы начинаются с большой буквы.. это только в си шарп так)?
  • Frozzeg

    Сообщения: 5641 Репутация: N Группа: Джедаи

    Spritz Фев. 17, 2011, 12:25 п.п., спустя 30 минут 1 секунду

    пиздец это когда наоборот
    You can be anything you want to be. Just turn yourself into anything you think that you could ever be.
  • Butcher

    Сообщения: 10 Репутация: N Группа: Кто попало

    Spritz Фев. 17, 2011, 4:06 п.п., спустя 3 часа 40 минут 59 секунд

    Кароче, забил на cURL, через сокеты все получается быстрее).
  • Rotten

    Сообщения: 2243 Репутация: N Группа: Адекваты

    Spritz Фев. 17, 2011, 6:20 п.п., спустя 2 часа 13 минут 59 секунд

    "test".isEmpty();

    такое в сишарпе тоже возможно?
  • Frozzeg

    Сообщения: 5641 Репутация: N Группа: Джедаи

    Spritz Фев. 17, 2011, 6:23 п.п., спустя 2 минуты 38 секунд

    нет
    You can be anything you want to be. Just turn yourself into anything you think that you could ever be.
  • krasun

    Сообщения: 1370 Репутация: N Группа: Джедаи

    Spritz Фев. 19, 2011, 12:32 д.п., спустя 1 день 6 часов 9 минут

    такое в сишарпе тоже возможно?

    Да. И можно даже так 1.ToString() или "some".IndexOf("s").
  • Frozzeg

    Сообщения: 5641 Репутация: N Группа: Джедаи

    Spritz Фев. 19, 2011, 1:20 п.п., спустя 12 часов 47 минут 22 секунды

    ололо, а нахуй это нужно? я думал это типа доступ к объекту по его названию
    You can be anything you want to be. Just turn yourself into anything you think that you could ever be.
  • krasun

    Сообщения: 1370 Репутация: N Группа: Джедаи

    Spritz Фев. 19, 2011, 1:36 п.п., спустя 16 минут 28 секунд

    Frozzeg, все в .net - объекты, даже литералы. Мне если и доводилось так писать, так разве, что бы "сговнять" или просто по-быстрому, например, "".PadLeft('0', 5). А так больше случаев не знаю.

  • Maxim

    Сообщения: 2 Репутация: N Группа: Кто попало

    Spritz Май 5, 2012, 9:26 п.п., спустя 441 день 6 часов 50 минут

    Подскажите, когда создаем сервер, форму надо создавать??? Так же при создании клиента скажите нужна форма????
  • Frozzeg

    Сообщения: 5641 Репутация: N Группа: Джедаи

    Spritz Май 7, 2012, 4:47 п.п., спустя 1 день 19 часов 20 минут

    все на формах
    You can be anything you want to be. Just turn yourself into anything you think that you could ever be.
  • Maxim

    Сообщения: 2 Репутация: N Группа: Кто попало

    Spritz Май 7, 2012, 10:04 п.п., спустя 5 часов 16 минут 32 секунды

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.Net;
    using System.Net.Sockets;
    using System.Threading;


    namespace Server
    {
    public partial class Form1 : Form
    {
    public Form1()
    {
    InitializeComponent();
    }

    // Здесь будет хранится статус сервера
    bool isServerRunning;
    // Здесь будет список наших клиентов
    private Hashtable clients;
    // Это сокет нашего сервера
    Socket listener;
    // Порт, на котором будем прослушивать входящие соединения
    int port = 1991;
    // Точка для прослушки входящих соединений (состоит из адреса и порта)
    IPEndPoint Point;
    // Список потоков
    private List<Thread> threads = new List<Thread>();

    private void ServerStart()
    {
    clients = new Hashtable(30);
    isServerRunning = true;
    listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
    // Определяем конечную точку, IPAddress.Any означает что наш сервер будет принимать входящие соединения с любых адресов
    Point = new IPEndPoint(IPAddress.Any, port);
    // Связываем сокет с конечной точкой
    listener.Bind(Point);
    // Начинаем слушать входящие соединения
    listener.Listen(10);

    SocketAccepter();
    }

    private void SocketAccepter()
    {
    // Запускаем цикл в отдельном потоке, чтобы приложение не зависло
    Thread th = new Thread(delegate()
    {
    while (isServerRunning)
    {
    // Создаем новый сокет, по которому мы сможем обращаться клиенту
    // Этот цикл остановится, пока какой-нибудь клиент не попытается присоединиться к серверу
    Socket client = listener.Accept();
    // Теперь, обратившись к объекту client, мы сможем отсылать и принимать пакеты от последнего подключившегося пользователя.
    // Добавляем подключенного клиента в список всех клиентов, для дальнейшей массовой рассылки пакетов
    clients.Add(client, "");
    // Начинаем принимать входящие пакеты
    Thread thh = new Thread(delegate()
    {
    MessageReceiver(client);
    });
    thh.Start();
    }
    });
    // Приведенный выше цикл пока что не работает, запускаем поток. Теперь цикл работает.
    th.Start();
    threads.Add(th);
    }

    private void MessageReceiver(Socket r_client)
    {
    // Для каждого нового подключения, будет создан свой поток для приема пакетов
    Thread th = new Thread(delegate()
    {
    while (isServerRunning)
    {
    try
    {
    // Сюда будем записывать принятые байты
    byte[] bytes = new byte[1024];
    // Принимаем
    r_client.Receive(bytes);
    if (bytes.Length != 0)
    {
    // Отсылаем принятый пакет от клиента всем клиентам
    foreach (Socket s_client in clients.Keys)
    {
    MessageSender(s_client, bytes);
    }
    }
    }
    catch { }
    }
    });
    th.Start();
    threads.Add(th);
    }

    private void MessageSender(Socket c_client, byte[] bytes)
    {
    try
    {
    // Отправляем пакет
    c_client.Send(bytes);

    }
    catch { }
    }
    }
    }

    при создании сервака, выдает ошибку: Не удалось найти имя типа или пространство имен "Hashtable"(пропущена директива using или ссылка на сборку?)
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz Май 7, 2012, 10:05 п.п., спустя 1 минуту 12 секунд

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.Net;
    using System.Net.Sockets;
    using System.Threading;

    и где туит Hashtable? вс верно ругается
    Сапожник без сапог

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