3

サーバーから HTTP GET を実行するクライアントとして lwip を使用しています。私が受け取りたいファイルはおよそ 75kB です。最初の ~9kB を正しく取得しましたが、それ以上データが到着しません。スタックに到着する各パケットは、適切に ACK されます。

長いコードを短くするために、次のコマンドで netconn インターフェースを使用しています。いくつかのパケットが到着するまでエラーは発生しません。この後、netconn_recv はタイムアウトを開始し、約 15 分後にサーバーがパケットを送信して接続を閉じます (これは、接続が少なくとも何らかの意味でまだ機能していることを示しています)。

#define HTTP_GET_TEMPLATE "GET /%s HTTP/1.0\r\nHost: %s\r\n\r\n"

addr = <the ip address I'm talking to>
location = <location of the filename on the host>
host = <hostname>

upg = netconn_new(NETCONN_TCP);
netconn_set_recvtimeout(upg, 30000);
err = netconn_bind(upg, IP_ADDR_ANY, 0);
err = netconn_connect(upg, &addr, 80);
sprintf(request, HTTP_GET_TEMPLATE, location, host);
siRc = netconn_write(upg, request, (strlen(request)+1)*sizeof(char), NETCONN_COPY);
while (true)
{
    err = netconn_recv(upg, &netbuf);
    if (ERR_IS_FATAL(err))
    {
        break;
    }
    if (err == ERR_OK)
    {
        do
        {
            err = netbuf_data(netbuf, &data, &len);
            < handle the data in "data">
        } while (netbuf_next(netbuf) >= 0);

        netbuf_delete(netbuf);
    }
}

次に何を試すべきか、誰かヒントを教えてもらえますか? ありがとう

4

0 に答える 0