UDT :: Отправить в цикл для цикла отправляет только один раз. Нет ошибок

StackOverflow https://stackoverflow.com/questions/4233179

  •  26-09-2019
  •  | 
  •  

Вопрос

Это отправляет данные только один раз, когда кажется иррациональным для меня, так как она находится в цикле для:

char* hello;
for (int i = 0; i < 10; i++) {

    hello = "Hello world!\n";
    if (UDT::ERROR == UDT::send(client, hello, strlen(hello) + 1, 0))
    {
        cout << "send: " << UDT::getlasterror().getErrorMessage();
    }

}

Разве он не должен отправлять данные 10 раз? Я этого не понимаю. Вот вся программа (она довольно коротка):

int main()
{
    UDTSOCKET client;
    sockaddr_in serv_addr;
    serv_addr.sin_family = AF_INET;
    serv_addr.sin_port = htons(9000);
    inet_pton(AF_INET, "127.0.0.1", &serv_addr.sin_addr);
    memset(&(serv_addr.sin_zero), '\0', 8);

    client = UDT::socket(AF_INET, SOCK_STREAM, 0);

    // connect to the server, implict bind
    if (UDT::ERROR == UDT::connect(client, (sockaddr*)&serv_addr, sizeof(serv_addr)))
    {
        cout << "connect: " << UDT::getlasterror().getErrorMessage();
    }

    char* hello;
    for (int i = 0; i < 10; i++) {

        hello = "Hello world!\n";

        if (UDT::ERROR == UDT::send(client, hello, strlen(hello) + 1, 0))
        {
            cout << "send: " << UDT::getlasterror().getErrorMessage();
        }

    }

    UDT::close(client);

    system("pause");
}
Это было полезно?

Решение

Вы проверили бокомый код сервера. Клиент делает отправки в цикле для цикла, как их сторона сервера получает их?

Редактировать: по ссылке на ваш пост здесь. Отказ Если ваш серверный код выглядит так, он получит только один раз. Сервер получает соединение от клиента, затем получает один раз, затем снова ждет подключения от клиента. Но клиент продолжает посылать в цикле. Это просто предположение, что это ваш код сервера, я мог бы ошибиться.

while (true)
{
  UDTSOCKET recver = UDT::accept(serv, (sockaddr*)&their_addr, &namelen);

  cout << "new connection: " << inet_ntoa(their_addr.sin_addr) << ":" << ntohs(their_addr.sin_port) << endl;

  if (UDT::ERROR == UDT::recv(recver, data, 100, 0))
  {
    cout << "recv:" << UDT::getlasterror().getErrorMessage() << endl;
    //return 0;
  }
....................
....................
}

Другие советы

Это проходит через петлю 10 раз или только пройти через петлю один раз?

Я не знаком с библиотекой, которую вы используете, но я не видел никого flush команда. Если он проходит через петлю 10 раз, но только отправляет данные только один раз, вам может потребоваться промойте.

Структура клиента и сервера не совпадает.

Клиент отправляет 10 раз внутри 1 соединения. Сервер принимает 10 соединений и читает только 1 раз внутри каждого.

Очевидно, каждое соединение Simmarile для контейнера. Данные отправлены, но не прочитанные после закрытия соединения отбрасываются и (конечно) не доступны из других соединений.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top