Pregunta

Esto envía los datos sólo una vez que parece irracional para mí como lo es en un bucle:

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

}

¿No debería enviar datos 10 veces? Yo no lo entiendo. Aquí está todo el programa (es bastante corta):

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");
}
¿Fue útil?

Solución

¿Ha comprobado el código del lado del servidor. Cliente está haciendo envía en un bucle for, cómo es el lado del servidor recibirlos?

Editar: En referencia a su puesto aquí . Si su código de servidor se parece a esto, recibirá sólo una vez. El servidor está recibiendo la conexión desde el cliente recibe entonces una vez y luego otra vez espera a la conexión de un cliente. Pero el cliente mantiene el envío en un bucle. Su sólo una suposición de que este es su código de servidor, podría estar equivocado.

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;
  }
....................
....................
}

Otros consejos

¿Va a través del bucle 10 veces, o sólo van a través del bucle de una vez?

No estoy familiarizado con la biblioteca que está utilizando, pero no vi ningún tipo de mando flush. Si pasa a través del bucle 10 veces, pero sólo envía los datos una vez, puede que tenga que tirar.

Cliente y estructura del servidor no coincide.

Cliente envía 10 veces dentro de 1 conexión. Server acepta 10 conexiones y lee solamente 1 hora dentro de cada uno.

Obviamente, cada conexión es del mismo tipo que un recipiente. Los datos enviados pero no lee después de cerrar una conexión se descarta y (por supuesto) no es accesible desde otras conexiones.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top