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

转载于:https://www.cnblogs.com/earvin/p/5423799.html

libcurl网络连接使用tcp/ip相关推荐

  1. 鸿蒙系统网络连接设置ip,修改本地连接的TCP/IP属性设置

    修改本地连接的TCP/IP属性设置 解决原因1:修改本地连接的TCP/IP属性设置 在使用无线路由之前,你的TCP/IP属性很可能是手动设置的,但设置的网段与无线路由的默认网段不同,因而无法登录到无线 ...

  2. 在哪里查看计算机配置的网络协议簇,tcp/ip协议簇

    TCP/IP协议簇是Internet的基础,也是当今最流行的组网形式.TCP/IP是一组协议的代名词,包括许多别的协议,组成了TCP/IP协议簇.其中比较重要的有SLIP协议.PPP协议.IP协议.I ...

  3. OSI七层网络结构图与TCP/IP五层网络结构图

    一. OSI七层网络结构图与TCP/IP五层网络结构图 又称<OSI七层网络模型与TCP/IP四层网络模型>. (1)OSI七层模型 OSI中的层 功能 TCP/IP协议族 应用层 文件传 ...

  4. 全网最详细的网络协议之TCP/IP 协议,建议直接收藏

    一. 计算机网络体系结构分层 计算机网络体系结构分层 计算机网络体系结构分层 不难看出,TCP/IP 与 OSI 在分层模块上稍有区别.OSI 参考模型注重"通信协议必要的功能是什么&quo ...

  5. 网络协议(TCP/IP、UDP)总结

    什么是协议 协议实际上就是一种约定.好比说,我们做一个石头剪刀布的游戏,我们约定好:石头>剪刀.剪刀>布.布>石头,以此作为游戏规则.我们所有人都遵循这个约定,那么就不需要任何的多余 ...

  6. 第一章 OSI网络模型和TCP/ IP协议栈

    第一章 OSI网络模型和TCP/ IP协议栈 1.1 计算机网络的定义 计算机网络是指将若干台地理位置不同,且具有独立功能的计算机,通过通信设备和传输线路相互连接起来,按照一定的通讯规则进行通信,以实 ...

  7. 22-05-05 西安 javaSE(18) 网络编程、TCP\IP、Socket通信

    MAC与IP地址 MAC地址 每一块网卡带有的ROM(只读存储器)中,都预先烧录了一个唯一的MAC地址. MAC地址=制造厂商编号+产品编号 所以世界上每一个MAC地址都是独一无二的 IP地址 在互联 ...

  8. 软件测试面试题:请你分别画出 OSI 的七层网络结构图和 TCP/IP 的四层结构图?

    请你分别画出 OSI 的七层网络结构图和 TCP/IP 的四层结构图? OSI 七层网络结构图,由上至下: 应用层-表示层-会话层-传输层-网络层-数据链路层-物理层TCP/IP 的四层结构图 应用层 ...

  9. 数据连接linux网络编程之TCP/IP基础(四):TCP连接的建立和断开、滑动窗口

    在写这篇文章之前,xxx已经写过了几篇关于改数据连接主题的文章,想要了解的朋友可以去翻一下之前的文章 一.TCP段格式: TCP的段格式如下图所示 源端口号与目标端口号 源端口号和目标端口号,加上IP ...

最新文章

  1. Nagios配置之交换机及路由
  2. Perl通过WIN32 OLE来操作EXCEL
  3. XML布局中出现Exception raised during rendering异常
  4. MassTransit Get Started-
  5. python 数据类型之间的转换
  6. 进程的优先级设置与获取,进程时间
  7. 2012年10月国庆长假天津-内蒙古自驾游之我们在路上
  8. 汇编学习--7.16--端口
  9. python四边形转矩形_python opencv minAreaRect 生成最小外接矩形的方法
  10. 【学堂在线数据挖掘:理论方法笔记】第l六天(3.31)
  11. 解决wampserver server offline
  12. 02 python:赋值符;运算符;字符串操作
  13. java工程师js_Ajax,  励志做一名Java全干工程师
  14. K8S污点容忍度调度
  15. likely 和 unlikely
  16. 使用 Bumblebee 控制 NVIDIA 双显卡(ubuntu13.04-X64)
  17. 钉钉平台助力中国一汽疫情防控 数字化迈入新阶段
  18. 计算机考研要准备哪些准备,大三 计算机科学与技术 要考研 要做哪些准备了?...
  19. 保姆级redis6全流程学习和redis秒杀全流程
  20. 【转载】崔庆才爬虫笔记

热门文章

  1. 如何:在 Visual Studio 中添加或移除引用(转载)
  2. Catterplots包,让你绘制不一样的图
  3. oracle 强制 断开,ORA-01092 ORACLE 实例终止。强制断开连接 解决方案(下)
  4. php怎么删除所有文件夹,用php删除所有文件,文件夹及其子文件夹
  5. 地址做域名时不能加端口_当你访问XXX网站时,从访问到内容返回呈现,中间发生了什么?...
  6. mysql语句大全 新浪博客_MySQL语句入门
  7. angular 触发 enter事件
  8. python进程socket通信_Python Socket TCP双端聊天功能实现过程详解
  9. 周长相等的正方形面积一定相等_习题创编——周长相等的长方形面积(20200108)...
  10. P4491 [HAOI2018]染色