0

这仅发送一次数据,这对我来说似乎是不合理的,因为它处于 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");
}
4

3 回答 3

1

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

我不熟悉您正在使用的库,但我没有看到任何类型的flush命令。如果它通过循环 10 次但只发送一次数据,您可能需要刷新。

于 2010-11-20T14:46:25.223 回答
1

您是否检查过服务器端代码。客户端在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;
  }
....................
....................
}
于 2010-11-20T14:59:22.510 回答
1

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

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

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

于 2011-10-14T20:24:42.497 回答