0

これは、forループにあるため、私には不合理に思えるデータを1回だけ送信します。

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

サーバー側のコードを確認しましたか。クライアントは for ループで送信を行っていますが、サーバー側はそれらをどのように受信していますか?

編集:ここの投稿を参照してください。サーバー コードが次のようになっている場合、受信は 1 回だけです。サーバーはクライアントから接続を取得し、一度受信してから再びクライアントからの接続を待ちます。しかし、クライアントはループで送信し続けます。これはあなたのサーバー コードであるという推測にすぎません。間違っている可能性があります。

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 に答える
1

ループを 10 回通過しますか、それとも 1 回だけループしますか?

あなたが使用しているライブラリには詳しくありませんが、どのようなflushコマンドも見当たりませんでした。ループを 10 回通過するが、データを 1 回しか送信しない場合は、フラッシュが必要になる可能性があります。

于 2010-11-20T14:46:25.223 に答える