libcurl网络连接使用tcp/ip

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

时间: 2024-11-10 13:13:39

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

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

TCP/IP:  TCP/IP是 Internet 上广泛使用的通用协议.它与互连网络中硬件结构和操作系统各异的计算机进行通信.TCP/IP包括路由网络流量的标准,并能够提供高级安全功能.它是目前在商业中最常用的协议.将计算机配置为使用 TCP/IP可能会很复杂,但大多数联网的计算机已经配置正确.若要配置未在 SQL Server 配置管理器中出现的 TCP/IP 设置,请参阅Microsoft Windows 文档.  Named Pipes:  Named Pipes 是为局域网而开发的协议

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

1. 协议的概念 (1)计算机网络中实现通信必须有一些约定.如对速率.传输代码.代码结构.传输控制步骤和出错控制等约定,这些约定即被称为通信协议 (2)在两个节点之间要成功地进行通信,两个节点之间必须约定使用共同的"语言",这些被通信各方共同遵守的约定.语言.规则被称为协议 (3)在Internet中,最为通用的网络协议是TCP/IP协议. 2. 网络分层模型 (1)应用层:提供用户接口,特指能够发起网络通信的应用程序,如客户端程序.QQ.MSN.浏览器等,服务器程序有Web服务器.邮

网络结构----ISO/OSI七层网络模型和TCP/IP四层网络模型

对等实体在一次交互作用中传送的信息单位称为协议数据单元,它包括控制信息和用户数据两部分.上下层实体之间的接口称为服务访问点. ISO/OSI参考模型分为:物理层.数据链路层.网络层.传输层.会话层.表示层和应用层. 物理层:表示一些物理设备,还包括网络拓扑结构.信令与编码方法等,涉及到在信道上传输的原始比特流,在信号传输中,物理层处理数据传输速率,监控数据出错频率并处理电压电平. 数据链路层:将物理层提供的可能出错的物理连接改造成逻辑上无差错的数据链路,并对物理层的原始数据进行封装,也就是负责在

iOS网络协议----HTTP/TCP/IP浅析

一.TCP/IP协议 话说两台电脑要通讯就必须遵守共同的规则,就好比两个人要沟通就必须使用共同的语言一样.一个只懂英语的人,和一个只懂中文的人由于没有共同的语言(规则)就没办法沟通.两台电脑之间进行通讯所共同遵守的规则,就是网络协议. 那么谁来制定这个网络协议? 国际标准化组织(ISO)定义了网络协议的基本框架,被称为OSI模型.要制定通讯规则,内容会很多,比如要考虑A电脑如何找到B电脑,A电脑在发送信息 给B电脑时是否需要B电脑进行反馈,A电脑传送给B电脑的数据的格式又是怎样的?内容太多太杂,

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

网络编程之TCP/IP各层详解 我们将应用层,表示层,会话层并作应用层,从TCP/IP五层协议的角度来阐述每层的由来与功能,搞清楚了每层的主要协议,就理解了整个物联网通信的原理. 首先,用户感知到的只是最上面一层--应用层,自上而下每层都依赖于下一层,所以我们从最下层开始切入,比较好理解. 每层都运行特定的协议,越往上越靠近用户,越往下越靠近硬件. 一.物理层 由来:孤立的计算机之间要一起"玩耍",就必须接入Internet,即计算机之间必须完成组网. 物理层功能:主要是基于电器特性发

linux网络编程之TCP/IP基础篇(一)

从今天起,将会接触到网络编程,平台是linux,实现语言C语言,最后将会实现一个简易的miniftp服务器. 主要的内容安排为:linux网络编程之TCP/IP基础篇,SOCKET编程篇,进程间通信篇,线程篇,实战ftp篇. 1.ISO/OSI参考模型:open system interconnection开放系统互联模型是由OSI(international organization for standardization )国际标准化组织定义的网络分层模型,共七层. 各层的具体含义: 物理层

ISO/OSI网络体系结构和TCP/IP协议模型

1. ISO/OSI的参考模型共有7层,由低层至高层分别为:物理层.数据链路层.网络层.传输层.会话层.表示层.     应用层.各层功能分别为: (1)物理层          提供建立.维护和拆除物理链路所需的机械.电气.功能和规程的特性:提供有关在传输介质上传输非结构的位流 及物理链路故障检测指示.在这一层,数据还没有被组织,仅作为原始的位流或电气电压处理,单位是比特. (2)数据链路层         负责在两个相邻结点间的线路上,无差错地传送以帧为单位的数据,并进行流量控制.每一帧包括

2015/12/14 Python网络编程,TCP/IP客户端和服务器初探

一直不是很清楚服务器的定义,对于什么是服务器/客户端架构也只有一个模糊的感觉.最近开始学习,才明白一些什么服务器和客户端的关系. 所谓的服务器,就是提供服务的东西,它是一个硬件或者软件,可以向一个或者多个客户端提供所需要的服务.它存在的目的就是等待客户的请求,然后给客户服务,再接着等待请求. 而客户端,就来连上一个服务器,提出自己的请求,然后等待获得反馈. 比如说,打印机就是一个服务器的例子,与之相连的计算机就是客户端,通过网络连接打印机后,给它提出服务需求(打印)和传输数据(传输内容),然后打

android 网络编程--socket tcp/ip udp http之间的关系

网络七层由下往上分别为物理层.数据链路层.网络层.传输层.会话层.表示层和应用层,一般编程人员接触最多的就是应用层和运输层,再往下的就是所谓的媒体层了,不是我们研究的对象. 下面是应用层.运输层,网络层.链路层通信协议概图.我们经常接触到的一般是: http协议:应用层协议,并且http协议是基于tcp连接的,主要解决的是如何包装协议的 tcp协议:运输层协议,通常也叫做tcp/ip协议,主要解决数据如何在网络中传输 udp协议:运输层协议,用户数据报协议,不可靠的协议,只负责把应用层的协议的数