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("连接超时。");
}
- 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("连接超时。");
- }
转载自:http://hi.baidu.com/baby_66_/item/24c3f0ce96263936e90f2ece
转载于:https://www.cnblogs.com/earvin/p/5423799.html
libcurl网络连接使用tcp/ip相关推荐
- 鸿蒙系统网络连接设置ip,修改本地连接的TCP/IP属性设置
修改本地连接的TCP/IP属性设置 解决原因1:修改本地连接的TCP/IP属性设置 在使用无线路由之前,你的TCP/IP属性很可能是手动设置的,但设置的网段与无线路由的默认网段不同,因而无法登录到无线 ...
- 在哪里查看计算机配置的网络协议簇,tcp/ip协议簇
TCP/IP协议簇是Internet的基础,也是当今最流行的组网形式.TCP/IP是一组协议的代名词,包括许多别的协议,组成了TCP/IP协议簇.其中比较重要的有SLIP协议.PPP协议.IP协议.I ...
- OSI七层网络结构图与TCP/IP五层网络结构图
一. OSI七层网络结构图与TCP/IP五层网络结构图 又称<OSI七层网络模型与TCP/IP四层网络模型>. (1)OSI七层模型 OSI中的层 功能 TCP/IP协议族 应用层 文件传 ...
- 全网最详细的网络协议之TCP/IP 协议,建议直接收藏
一. 计算机网络体系结构分层 计算机网络体系结构分层 计算机网络体系结构分层 不难看出,TCP/IP 与 OSI 在分层模块上稍有区别.OSI 参考模型注重"通信协议必要的功能是什么&quo ...
- 网络协议(TCP/IP、UDP)总结
什么是协议 协议实际上就是一种约定.好比说,我们做一个石头剪刀布的游戏,我们约定好:石头>剪刀.剪刀>布.布>石头,以此作为游戏规则.我们所有人都遵循这个约定,那么就不需要任何的多余 ...
- 第一章 OSI网络模型和TCP/ IP协议栈
第一章 OSI网络模型和TCP/ IP协议栈 1.1 计算机网络的定义 计算机网络是指将若干台地理位置不同,且具有独立功能的计算机,通过通信设备和传输线路相互连接起来,按照一定的通讯规则进行通信,以实 ...
- 22-05-05 西安 javaSE(18) 网络编程、TCP\IP、Socket通信
MAC与IP地址 MAC地址 每一块网卡带有的ROM(只读存储器)中,都预先烧录了一个唯一的MAC地址. MAC地址=制造厂商编号+产品编号 所以世界上每一个MAC地址都是独一无二的 IP地址 在互联 ...
- 软件测试面试题:请你分别画出 OSI 的七层网络结构图和 TCP/IP 的四层结构图?
请你分别画出 OSI 的七层网络结构图和 TCP/IP 的四层结构图? OSI 七层网络结构图,由上至下: 应用层-表示层-会话层-传输层-网络层-数据链路层-物理层TCP/IP 的四层结构图 应用层 ...
- 数据连接linux网络编程之TCP/IP基础(四):TCP连接的建立和断开、滑动窗口
在写这篇文章之前,xxx已经写过了几篇关于改数据连接主题的文章,想要了解的朋友可以去翻一下之前的文章 一.TCP段格式: TCP的段格式如下图所示 源端口号与目标端口号 源端口号和目标端口号,加上IP ...
最新文章
- Nagios配置之交换机及路由
- Perl通过WIN32 OLE来操作EXCEL
- XML布局中出现Exception raised during rendering异常
- MassTransit Get Started-
- python 数据类型之间的转换
- 进程的优先级设置与获取,进程时间
- 2012年10月国庆长假天津-内蒙古自驾游之我们在路上
- 汇编学习--7.16--端口
- python四边形转矩形_python opencv minAreaRect 生成最小外接矩形的方法
- 【学堂在线数据挖掘:理论方法笔记】第l六天(3.31)
- 解决wampserver server offline
- 02 python:赋值符;运算符;字符串操作
- java工程师js_Ajax, 励志做一名Java全干工程师
- K8S污点容忍度调度
- likely 和 unlikely
- 使用 Bumblebee 控制 NVIDIA 双显卡(ubuntu13.04-X64)
- 钉钉平台助力中国一汽疫情防控 数字化迈入新阶段
- 计算机考研要准备哪些准备,大三 计算机科学与技术 要考研 要做哪些准备了?...
- 保姆级redis6全流程学习和redis秒杀全流程
- 【转载】崔庆才爬虫笔记
热门文章
- 如何:在 Visual Studio 中添加或移除引用(转载)
- Catterplots包,让你绘制不一样的图
- oracle 强制 断开,ORA-01092 ORACLE 实例终止。强制断开连接 解决方案(下)
- php怎么删除所有文件夹,用php删除所有文件,文件夹及其子文件夹
- 地址做域名时不能加端口_当你访问XXX网站时,从访问到内容返回呈现,中间发生了什么?...
- mysql语句大全 新浪博客_MySQL语句入门
- angular 触发 enter事件
- python进程socket通信_Python Socket TCP双端聊天功能实现过程详解
- 周长相等的正方形面积一定相等_习题创编——周长相等的长方形面积(20200108)...
- P4491 [HAOI2018]染色