CURL *curl;

CURLcode res;

const char *request = "GETas.xxxxE测试发送";

curl_socket_t sockfd; /* socket */

long sockextr;

size_t iolen;

curl = curl_easy_init();

if(curl) {

curl_easy_setopt(curl, CURLOPT_URL, "127.0.0.1");

curl_easy_setopt(curl, CURLOPT_PORT, 7102);

/* Do not do the transfer - only connect to host */

curl_easy_setopt(curl, CURLOPT_CONNECT_ONLY, 1L);

res = curl_easy_perform(curl);

if(CURLE_OK != res)

{

printf("Error: %s\n", strerror(res));

return 1;

}

/* Extract the socket from the curl handle - we'll need it for waiting.

* Note that this API takes a pointer to a 'long' while we use

* curl_socket_t for sockets otherwise.

*/

res = curl_easy_getinfo(curl, CURLINFO_LASTSOCKET, &sockextr);

if(CURLE_OK != res)

{

printf("Error: %s\n", curl_easy_strerror(res));

return 1;

}

sockfd = sockextr;

/* wait for the socket to become ready for sending */

//if(!wait_on_socket(sockfd, 0, 60000L))

//{

//  printf("Error: timeout.\n");

//  return 1;

//}

puts("Sending request.");

/* Send the request. Real applications should check the iolen

* to see if all the request has been sent */

res = curl_easy_send(curl, request, strlen(request), &iolen);

if(CURLE_OK != res)

{

printf("Error: %s\n", curl_easy_strerror(res));

return 1;

}

puts("Reading response.");

/* read the response */

for(;;)

{

char buf[1024];

// wait_on_socket(sockfd, 1, 60000L);

res = curl_easy_recv(curl, buf, 1024, &iolen);

if(CURLE_OK == res)

{

printf("Received %d bytes.\n", iolen);

}

}

/* always cleanup */

curl_easy_cleanup(curl);

}

对于错误的处理

if( res == CURLE_OK && iolen > 0 )

{

//处理数据

printf("Received %lu bytes.\n", iolen);

}

elseif( res == CURLE_RECV_ERROR)

{

CCAssert("Client Miss Connect",NULL);

printf( "socket state error #0 (%d)", res );

//重连

}

elseif (res == CURLE_AGAIN )

{

}

elseif(res == CURLE_UNSUPPORTED_PROTOCOL)

{

//重连

}

elseif(res == CURLE_OPERATION_TIMEDOUT)

{

//超时

printf("连接超时。");

}

  1. CURLcode res;
  2. const char *request = "GETas.xxxxE测试发送";
  3. curl_socket_t sockfd; /* socket */
  4. long sockextr;
  5. size_t iolen;
  6. curl = curl_easy_init();
  7. if(curl) {
  8. curl_easy_setopt(curl, CURLOPT_URL, "127.0.0.1");
  9. curl_easy_setopt(curl, CURLOPT_PORT, 7102);
  10. /* Do not do the transfer - only connect to host */
  11. curl_easy_setopt(curl, CURLOPT_CONNECT_ONLY, 1L);
  12. res = curl_easy_perform(curl);
  13. if(CURLE_OK != res)
  14. {
  15. printf("Error: %s\n", strerror(res));
  16. return 1;
  17. }
  18. /* Extract the socket from the curl handle - we'll need it for waiting.
  19. * Note that this API takes a pointer to a 'long' while we use
  20. * curl_socket_t for sockets otherwise.
  21. */
  22. res = curl_easy_getinfo(curl, CURLINFO_LASTSOCKET, &sockextr);
  23. if(CURLE_OK != res)
  24. {
  25. printf("Error: %s\n", curl_easy_strerror(res));
  26. return 1;
  27. }
  28. sockfd = sockextr;
  29. /* wait for the socket to become ready for sending */
  30. //if(!wait_on_socket(sockfd, 0, 60000L))
  31. //{
  32. //  printf("Error: timeout.\n");
  33. //  return 1;
  34. //}
  35. puts("Sending request.");
  36. /* Send the request. Real applications should check the iolen
  37. * to see if all the request has been sent */
  38. res = curl_easy_send(curl, request, strlen(request), &iolen);
  39. if(CURLE_OK != res)
  40. {
  41. printf("Error: %s\n", curl_easy_strerror(res));
  42. return 1;
  43. }
  44. puts("Reading response.");
  45. /* read the response */
  46. for(;;)
  47. {
  48. char buf[1024];
  49. // wait_on_socket(sockfd, 1, 60000L);
  50. res = curl_easy_recv(curl, buf, 1024, &iolen);
  51. if(CURLE_OK == res)
  52. {
  53. printf("Received %d bytes.\n", iolen);
  54. }
  55. }
  56. /* always cleanup */
  57. curl_easy_cleanup(curl);
  58. }
  59. 对于错误的处理
  60. if( res == CURLE_OK && iolen > 0 )
  61. {
  62. //处理数据
  63. printf("Received %lu bytes.\n", iolen);
  64. }
  65. elseif( res == CURLE_RECV_ERROR)
  66. {
  67. CCAssert("Client Miss Connect",NULL);
  68. printf( "socket state error #0 (%d)", res );
  69. //重连
  70. }
  71. elseif (res == CURLE_AGAIN )
  72. {
  73. }
  74. elseif(res == CURLE_UNSUPPORTED_PROTOCOL)
  75. {
  76. //重连
  77. }
  78. elseif(res == CURLE_OPERATION_TIMEDOUT)
  79. {
  80. //超时
  81. printf("连接超时。");
  82. }

转载自:http://hi.baidu.com/baby_66_/item/24c3f0ce96263936e90f2ece

libcurl网络连接使用tcp/ip的更多相关文章

  1. iOS网络协议 HTTP/TCP/IP浅析

    一.TCP/IP协议       话说两台电脑要通讯就必须遵守共同的规则,就好比两个人要沟通就必须使用共同的语言一样.一个只懂英语的人,和一个只懂中文的人由于没有共同的语言(规则)就没办法沟通.两台电 ...

  2. 嵌入式linux的网络编程(1)--TCP/IP协议概述

    嵌入式linux的网络编程(1)--TCP/IP协议概述 1.OSI参考模型及TCP/IP参考模型 通信协议用于协调不同网络设备之间的信息交换,它们建立了设备之间互相识别的信息机制.大家一定都听说过著 ...

  3. 第12章 网络基础(1)_网络分层和TCP/IP协议族

    1. 协议的概念 (1)计算机网络中实现通信必须有一些约定.如对速率.传输代码.代码结构.传输控制步骤和出错控制等约定,这些约定即被称为通信协议 (2)在两个节点之间要成功地进行通信,两个节点之间必须 ...

  4. 网络编程之TCP/IP各层详解

    网络编程之TCP/IP各层详解 我们将应用层,表示层,会话层并作应用层,从TCP/IP五层协议的角度来阐述每层的由来与功能,搞清楚了每层的主要协议,就理解了整个物联网通信的原理. 首先,用户感知到的只 ...

  5. 网络协议: TCP/IP 和UDP/IP

    网络协议: TCP/IP 和UDP/IP TCP/IP TCP/IP(Transmission Control Protocol/Internet Protocol)是一种可靠的网络数据传输控制协议. ...

  6. TCP/IP概述(网络互联与TCP/IP)

    TCP/IP概述(网络互联与TCP/IP) 用IP实现异构网络互联 从用户角度如何实现异构网络互联: 从用户角度看,实现异构网络互联的关键点就是使各种网络类型之间的差异对自己透明.在TCP/IP协议中 ...

  7. Sqlserver 远程连接的 TCP/IP 和 Named Pipes的区别

    TCP/IP:  TCP/IP是 Internet 上广泛使用的通用协议.它与互连网络中硬件结构和操作系统各异的计算机进行通信.TCP/IP包括路由网络流量的标准,并能够提供高级安全功能.它是目前在商 ...

  8. 【转载】[基础知识]【网络编程】TCP/IP

    转自http://mc.dfrobot.com.cn/forum.php?mod=viewthread&tid=27043 [基础知识][网络编程]TCP/IP iooops  胖友们楼主我又 ...

  9. 【网络编程】TCP/IP、UDP、网络概…

    计算机刚刚发明出来的时候,两台计算机之间是无法通信的,为了使计算机之间能够进行数据的交流,制定了OSI(Open SystemInterconnection)开放系统互联模型,而TCP/IP(我们所使 ...

随机推荐

  1. spring开篇

    本文引用http://www.cnblogs.com/ityouknow/p/5292559.html spring简介: spring是一个开源框架,spring是于2003 年兴起的一个轻量级的J ...

  2. CentOS yum命令报错 Error: File /var/cache/yum/i386/6/epel/metalink.xml does not exist

    最近在虚拟机上执行yum命令一直报错:Could not parse metalink https://mirrors.fedoraproject.org/metalink?repo=epel-7&a ...

  3. 学习python第十二天,函数4 生成器generator和迭代器Iterator

    在Python中,这种一边循环一边计算的机制,称为生成器:generator 要创建一个generator,有很多种方法.第一种方法很简单,只要把一个列表生成式的[]改成(),就创建了一个genera ...

  4. 解答室内定位技术新方向:蓝牙AoA定位,值得了解 ——概念了解

    转载搜狐 室内定位一直被炒的非常火的黑科技,也是近年资本追逐的热点,市场上一直有众多宣称可以做到厘米级,米级精度定位的公司,但问题很多,无法大规模商用.近些年有很多人尝试使用蓝牙beacon方式做定位 ...

  5. 裸机——DDR

    1.DDR介绍 DDR,是SDRAM的改进,是双通道的SDRAM, SDRAM是同步动态随机访问存储器. SDRAM与SRAM相对于,二者的特点是: SDRAM 需要初始化,使用时许访问,价格便宜. ...

  6. Android 渗透小知识点

    客户端用于 ADB 通信的默认端口始终是 5037,设备使用从 5555 到 5585 的端口 adb devices用于显示所有已连接设备, 有时候会出现一些问题, 这时候需要使用adb kill- ...

  7. scrapy进行分布式爬虫

    今天,参照崔庆才老师的爬虫实战课程,实践了一下分布式爬虫,并没有之前想象的那么神秘,其实非常的简单,相信你看过这篇文章后,不出一小时,便可以动手完成一个分布式爬虫! 1.分布式爬虫原理 首先我们来看一 ...

  8. 5.Mongodb聚合

    聚合 aggregate 聚合(aggregate)主要用于计算数据,类似sql中的sum().avg() 语法 db.集合名称.aggregate([{管道:{表达式}}]) 1.管道 管道在Uni ...

  9. 3771: Triple

    3771: Triple 链接 题意 n个斧头,每个斧头的价值都不同(开始时没注意到),可以取1个,2个,3个斧头组成不同的价值,求每种价值有多少种组成方案(顺序不同算一种) 分析: 生成函数 + 容 ...

  10. ListView Viewholder的坑 线性布局的坑

    1.ListView Viewholder的坑 /** * 默认带图片的menu adapter */ public static class MenuImageAdapter extends Bas ...