UDT :: send в цикле for отправляет только один раз. Нет ошибок - PullRequest
0 голосов
/ 20 ноября 2010

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

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");
}

Ответы [ 3 ]

1 голос
/ 20 ноября 2010

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

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

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;
  }
....................
....................
}
1 голос
/ 15 октября 2011

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

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

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

1 голос
/ 20 ноября 2010

Проходит ли он цикл 10 раз или проходит только один раз?

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...