代码之家  ›  专栏  ›  技术社区  ›  Richard Knop

UDT::在for循环中只发送一次。没有错误

  •  0
  • Richard Knop  · 技术社区  · 14 年前

    它只发送一次数据,这在我看来是不合理的,因为它是在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 回复  |  直到 14 年前
        1
  •  1
  •   Community vonPryz    7 年前

    你检查过服务器端代码了吗。客户端正在做一个for循环发送,服务器端如何接收它们?

    编辑: 关于你的职位 here . 如果您的服务器代码是这样的,它将只接收一次。服务器从客户端获取连接,然后再次接收,然后再次等待来自客户端的连接。但是客户端一直在循环发送。只是猜测这是你的服务器代码,我可能错了。

    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;
      }
    ....................
    ....................
    }
    
        2
  •  1
  •   John Dibling    14 年前

    是循环10次,还是只循环一次?

    我对你使用的图书馆不熟悉,但我没有看到 flush 命令。如果循环10次,但只发送一次数据,则可能需要刷新。

        3
  •  1
  •   Will    13 年前

    客户端和服务器结构不匹配。

    客户端在一个连接内发送10次。 服务器接受10个连接,每个连接只读取1次。

    显然,每个连接都类似于一个容器。关闭连接后发送但未读取的数据将被丢弃,并且(当然)无法从其他连接访问。