Информация об изменениях

Сообщение Вопрос НЕ про Poco! Любая простая net библиотека от 01.02.2017 20:16

Изменено 03.02.2017 4:39 Мёртвый Даун

Вопрос НЕ про Poco! Любая простая net библиотека
Здравствуйте, Мёртвый Даун, Вы писали:

МД>P.S. 21-ый век на дворе, но как оказалось нигде не найти примера нормального асинхронного TCP клиента. Жесть! Вообще разочарован.


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

Если я там сделал socket.shutdownSend(), то на следующий socket.send() ошибка. А как возобновить передачу? Жесть.
Если сокеты блокирующие, то таймауты не работают. Если не блокирующие то вообще беда. Как там товарищ привел в пример, SocketReactor, так оно вообще всё наглухо вешает, ибо эти хэндлеры стреляют. Жесть.
Socket::receiveBytes() всегда ноль возвращает, типа graceful shutdown. Жесть!!!
Ну как этим дерьмом пользоваться то?
Про многопоточность вообще молчу, сокеты там даже и не работают.

Сейчас совсем нет никаких нормальных библиотек для работы с сокетами? Это же беда совсем. Я уже незнаю, хочу очень простого, но побольше чем хэлоу ворлд.

Жаль что Qt нельзя использовать в проекте, там всё это за 5 мин пишется.

Псевдо:

class client_connection
{
public:
  client_connection() {
    m_socket.connect(...);
    // register some handlers
    ...
  }
  ~client_connection() {
    m_socket.disconnect();
  }

  void on_read_data() {
    int bytes = m_socket.read();
    ...
  }

  void send(unsigned char* data, int length) {
    m_socket.send(data, length);
  }
  
private:
  socket m_socket;
}

// где то используем

class some_thread_or_widget_or_some_shit {
public:
  void OnButtonClickOrJustAnythingElse() {
    m_client.send(...);
    m_client.getData(...);

    m_client.send(...);
    m_client.getData(...);

    m_client.send(...);
    m_client.getData(...);

    m_client.send(...);
    m_client.getData(...);

    m_client.send(...);
    m_client.send(...);
    m_client.send(...);
    m_client.getData(...);
  }
private:
  client_connection m_client;
}


Я сильно много хочу?
Вопрос НЕ про Poco! Любая простая net библиотека
Здравствуйте, Мёртвый Даун, Вы писали:

МД>P.S. 21-ый век на дворе, но как оказалось нигде не найти примера нормального асинхронного TCP клиента. Жесть! Вообще разочарован.


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

Если я там сделал socket.shutdownSend(), то на следующий socket.send() ошибка. А как возобновить передачу? Жесть.
Если сокеты блокирующие, то таймауты не работают. Если не блокирующие то вообще беда. Как там товарищ привел в пример, SocketReactor, так оно вообще всё наглухо вешает, ибо эти хэндлеры стреляют. Жесть.
Socket::receiveBytes() всегда ноль возвращает, типа graceful shutdown. Жесть!!!
Ну как этим дерьмом пользоваться то?
Про многопоточность вообще молчу, сокеты там даже и не работают.

Сейчас совсем нет никаких нормальных библиотек для работы с сокетами? Это же беда совсем. Я уже незнаю, хочу очень простого, но побольше чем хэлоу ворлд.

Почему везде избегают написание примера TCP клиента с использованием библиотеки? Почему везде только примеры сервера?

Жаль что Qt нельзя использовать в проекте, там всё это за 5 мин пишется.

Псевдо:

class client_connection
{
public:
  client_connection() {
    m_socket.connect(...);
    // register some handlers
    ...
  }
  ~client_connection() {
    m_socket.disconnect();
  }

  void on_read_data() {
    int bytes = m_socket.read();
    ...
  }

  void send(unsigned char* data, int length) {
    m_socket.send(data, length);
  }
  
private:
  socket m_socket;
}

// где то используем

class some_thread_or_widget_or_some_shit {
public:
  void OnButtonClickOrJustAnythingElse() {
    m_client.send(...);
    m_client.getData(...);

    m_client.send(...);
    m_client.getData(...);

    m_client.send(...);
    m_client.getData(...);

    m_client.send(...);
    m_client.getData(...);

    m_client.send(...);
    m_client.send(...);
    m_client.send(...);
    m_client.getData(...);
  }
private:
  client_connection m_client;
}


Я сильно много хочу?