Windows CE上的libcurl - curl_easy_perform(...)没有返回

时间:2014-03-25 16:08:23

标签: c windows windows-ce libcurl

作为项目的一部分,我需要在自定义WindowsCE设备上实现libcurl,然后通过有线LAN和GET,POST和DELETE数据与服务器通信(我使用的编程语言是 C )。这是我所取得的进展:

  1. 我找到了几个教程来为我的CE设备重新实现库。 (http://stasyan.wordpress.com/2009/12/08/libcurl-for-windows-mobile-and-windows-ce/http://rxwen.blogspot.com/2012/05/port-libcurl-to-wince.html做得非常好。)

  2. 我能够构建一个DLL和一个静态libcurl库,然后将其链接到我的Visual Studio 2005应用程序。

  3. 我将自定义CE设备和服务器连接到交换机。我可以从CE设备ping服务器,反之亦然,所以我知道他们都能够相互发送和接收数据。

  4. 我的服务器(Linux)使用lighttpd网络服务器,当我从连接到N / W开关的Windows PC请求URL(如下面的代码所示)时,它工作得很好。

  5. 这是我用于测试应用的代码:

    #include <stdio.h>
    #include <curl/curl.h>
    
    int main(void)
    {
        printf("STARTING APP...\n");
        CURL *curl;
        CURLcode res;
    
        printf("curl = curl_easy_init();\n");
        curl = curl_easy_init();
        if(curl)
        {
            printf("Enabling followlocation...\n");
            curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1l);
    
            printf("Setting Verbose...\n");
            curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
    
            printf("Setting Connect time out...\n");
            curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 5);
    
            printf("Setting Server time out...\n");
            curl_easy_setopt(curl, CURLOPT_ACCEPTTIMEOUT_MS , 5000);
    
            printf("Setting URL...\n");
            curl_easy_setopt(curl, CURLOPT_URL, "http://165.26.79.10:8080");
    
            /* Perform the request, res will get the return code */ 
            printf("Perform(curl)...;\n");
            res = curl_easy_perform(curl);
    
            /* Check for errors */
            if(res != CURLE_OK)
                    fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res));
    
            else
                printf("\nGET sucessful.\n");
    
            /* always cleanup */ 
            curl_easy_cleanup(curl);
        }
        getchar();
        return 0;
    }
    getchar();
    return 0;
    }
    

    我的问题是应用程序永远不会返回。它甚至没有超过curl_easy_perform(curl)。

    这是我得到的输出(Google Drive链接):[http://goo.gl/IKgiqW]

    我可能做错了什么?

1 个答案:

答案 0 :(得分:0)

我设法找出问题所在。

由于兼容性库中某个文件中的错误,curl_easy_perform(...)命令进入无限循环。它在cURL开发论坛(google it)中引用,但我在下面对其进行了总结:

我使用的WCE兼容性库(https://github.com/mauricek/wcecompat/)有一个名为 wce211_string.c 的文件。文件中的函数 _CRTIMP char * __cdecl strrchr(const char * s,int c),使用不减少的const char * p指针。要修复此错误,请在行后面添加以下行: p- = 1; &#39;返回(char *)p;&#39;,这样功能将内容如下:

_CRTIMP char* __cdecl strrchr(const char* s, int c)
{
    const char* p = s + strlen(s) - 1;
    while (p >= s)
    {
        if (*p == c)
            return (char*)p;
        p -= 1;
    }
    return NULL;
}

这解决了无限循环问题。