- 浏览: 146166 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
lyaqys:
lz实现的OptimisticExclusiveLock有点问 ...
java park/unpark 【java并发】基于JUC CAS原理,自己实现简单独占锁
#include<stdio.h>
#include <unistd.h>
#include<fcntl.h>
#include<netdb.h>
#include<stdlib.h>
#include "httpclient.h"
#include<string.h>
#include<sys/types.h>
#include<sys/socket.h>
#include <netinet/in.h>
const char * http_s = "http://";
typedef struct{
char *url;
int port;
char *host;
char *anyurl;
int isip;
}Hostinfo;
int isip(const char * s){
while( *s ){
if(isalpha(*s) && *s != '.')
{
return 0;
}
s++;
}
return 1;
}
int gethostinfobyurl(const char * url, char ** host, int *port, char ** anyurl)
{
if(url == NULL || 0!=strncmp(url, http_s, strlen(http_s)) ){
printf("url is not legal, %s\n", url);
return -1;
}
char * h_url = strstr(url,"//");
h_url = h_url + 2;
*anyurl= strchr(h_url,'/');
printf("hurl: %s\n",h_url);
if(anyurl != NULL){
char cc[1024];
char *pcc = cc;
strcpy(cc,h_url);
h_url = strsep(&pcc,"/");
printf("hhurl:%s\n",h_url);
}
if(NULL !=strchr(h_url,':')){
*host = strsep(&h_url,":");
char *cport = strsep(&h_url,":");
*port = atoi(cport);
}
else{
*host = h_url;
}
return 0;
}
void datas(int fp,Hostinfo *hinfo){
char request[1024];
bzero(&request,1024);
//sprintf(request,"GET %s HTTP/1.1\r\nHost: 61.135.169.125:80\r\nConnection: Close\r\n\r\n","/");
sprintf(request, "GET %s HTTP/1.1\r\nAccept: */*\r\nAccept-Language: zh-cn\r\n\
Host: %s:%d\r\nConnection: Close\r\n\r\n ", hinfo->anyurl,hinfo->host,hinfo->port);
printf("\n\n");
printf("%s",request);
printf("\n\n");
printf("request is %s\n", request);
int send = write(fp, request,strlen(request));
if(send == -1){
printf("send error\n");
exit(1);
}
printf("send num: %d\n", send);
int BUFFER_SIZE = 2048;
char buffer[BUFFER_SIZE];
int length;
bzero(&buffer, BUFFER_SIZE);
length = read(fp,buffer,BUFFER_SIZE);
char * content = buffer;
if(length <=0){
printf("error! read http return content!");
//return NULL;
}
char * head = strsep(&content,"\r\n");
printf("head:%s\n",head);
strsep(&head," ");
printf("1-->>head:%s\n",head);
if(head == NULL){
printf("error! read http return content!");
return;
}
head = strsep(&head," ");
printf("2-->>head:%s\n",head);
int result = atoi(head);
if(result == 200){
printf("success\n");
}
/*while( length = read(fp,buffer,BUFFER_SIZE)){
if(length <=0){
return ;
}
bzero(&buffer,1024);
}
*/
}
int connect_http(Hostinfo * hinfo)
{
int cfd;
struct sockaddr_in s_add;
struct sockaddr_in * sinp;
struct addrinfo hint;
struct addrinfo *ailist, *aip;
int i = 0, err;
char seraddr[128];
printf(" hinfo->host: %s\n", hinfo->host);
if(!(hinfo -> isip)){
hint.ai_family = AF_INET;
hint.ai_socktype = SOCK_STREAM;
hint.ai_flags = AI_CANONNAME;
hint.ai_protocol = 0;
hint.ai_addrlen = 0;
hint.ai_addr = NULL;
hint.ai_canonname = NULL;
hint.ai_next = NULL;
char name[1024];
strcpy(name, hinfo->host);
if ((err = getaddrinfo(name, NULL, &hint, &ailist)) != 0) {
printf("getaddrinfo error: %s host :%s\n", gai_strerror(err), hinfo->host);
exit(-1);
}
for (aip = ailist; i==0 && aip != NULL; aip = aip->ai_next) {
sinp = (struct sockaddr_in *)aip->ai_addr;
//break;
i = i+1;
if (inet_ntop(sinp->sin_family, &sinp->sin_addr, seraddr, INET_ADDRSTRLEN) != NULL)
{
printf("\nserver address is %s\n", seraddr);
}
}
}
else{
strcpy(seraddr,hinfo->host);
}
cfd = socket(AF_INET,SOCK_STREAM,0);
if(cfd == -1){
printf("socket error\n");
return -1;
}
struct timeval timeo = {3, 0};
socklen_t len = sizeof(timeo);
setsockopt(cfd, SOL_SOCKET, SO_SNDTIMEO, &timeo, len);
bzero(&s_add, sizeof(struct sockaddr_in));
s_add.sin_family=AF_INET;
s_add.sin_addr.s_addr= inet_addr(seraddr);
s_add.sin_port=htons(hinfo->port);
if(-1 == connect(cfd,(struct sockaddr *)(&s_add), sizeof(struct sockaddr)))
{
printf("connect fail !\r\n");
return -1;
}
// int flags = fcntl(cfd, F_GETFL, 0); //设置异步
//fcntl(cfd, F_SETFL, flags | O_NONBLOCK);
printf("connect ok !\r\n");
datas(cfd,hinfo);
close(cfd);
return 1;
}
char * get(const char * url)
{
char * host = (char *)malloc(200);
char * curl = (char *)malloc(200);
int port = 80;
int *cport = &port;
int result = gethostinfobyurl(url,&host,cport,&curl);
if(result < 0){
return NULL;
}
printf("parase host:%s\n",host);
Hostinfo *hinfo = (Hostinfo*)calloc(1,sizeof(Hostinfo));
hinfo->port = port;
hinfo->host = host;
hinfo->anyurl = curl;
hinfo->isip = isip(hinfo->host);
connect_http(hinfo);
return NULL;
}
int main()
{
const char * url = "http://61.135.169.105:80/";
/* char * host = (char *)malloc(200);
char * curl = (char *)malloc(200);
int port = 80;
int *cport = &port;
gethostinfobyurl(url,&host,cport,&curl);
printf("host:%s \t address: %s\n",host,curl);
printf("port : %d\n",port);
*/
get(url);
return 0;
}
#include <unistd.h>
#include<fcntl.h>
#include<netdb.h>
#include<stdlib.h>
#include "httpclient.h"
#include<string.h>
#include<sys/types.h>
#include<sys/socket.h>
#include <netinet/in.h>
const char * http_s = "http://";
typedef struct{
char *url;
int port;
char *host;
char *anyurl;
int isip;
}Hostinfo;
int isip(const char * s){
while( *s ){
if(isalpha(*s) && *s != '.')
{
return 0;
}
s++;
}
return 1;
}
int gethostinfobyurl(const char * url, char ** host, int *port, char ** anyurl)
{
if(url == NULL || 0!=strncmp(url, http_s, strlen(http_s)) ){
printf("url is not legal, %s\n", url);
return -1;
}
char * h_url = strstr(url,"//");
h_url = h_url + 2;
*anyurl= strchr(h_url,'/');
printf("hurl: %s\n",h_url);
if(anyurl != NULL){
char cc[1024];
char *pcc = cc;
strcpy(cc,h_url);
h_url = strsep(&pcc,"/");
printf("hhurl:%s\n",h_url);
}
if(NULL !=strchr(h_url,':')){
*host = strsep(&h_url,":");
char *cport = strsep(&h_url,":");
*port = atoi(cport);
}
else{
*host = h_url;
}
return 0;
}
void datas(int fp,Hostinfo *hinfo){
char request[1024];
bzero(&request,1024);
//sprintf(request,"GET %s HTTP/1.1\r\nHost: 61.135.169.125:80\r\nConnection: Close\r\n\r\n","/");
sprintf(request, "GET %s HTTP/1.1\r\nAccept: */*\r\nAccept-Language: zh-cn\r\n\
Host: %s:%d\r\nConnection: Close\r\n\r\n ", hinfo->anyurl,hinfo->host,hinfo->port);
printf("\n\n");
printf("%s",request);
printf("\n\n");
printf("request is %s\n", request);
int send = write(fp, request,strlen(request));
if(send == -1){
printf("send error\n");
exit(1);
}
printf("send num: %d\n", send);
int BUFFER_SIZE = 2048;
char buffer[BUFFER_SIZE];
int length;
bzero(&buffer, BUFFER_SIZE);
length = read(fp,buffer,BUFFER_SIZE);
char * content = buffer;
if(length <=0){
printf("error! read http return content!");
//return NULL;
}
char * head = strsep(&content,"\r\n");
printf("head:%s\n",head);
strsep(&head," ");
printf("1-->>head:%s\n",head);
if(head == NULL){
printf("error! read http return content!");
return;
}
head = strsep(&head," ");
printf("2-->>head:%s\n",head);
int result = atoi(head);
if(result == 200){
printf("success\n");
}
/*while( length = read(fp,buffer,BUFFER_SIZE)){
if(length <=0){
return ;
}
bzero(&buffer,1024);
}
*/
}
int connect_http(Hostinfo * hinfo)
{
int cfd;
struct sockaddr_in s_add;
struct sockaddr_in * sinp;
struct addrinfo hint;
struct addrinfo *ailist, *aip;
int i = 0, err;
char seraddr[128];
printf(" hinfo->host: %s\n", hinfo->host);
if(!(hinfo -> isip)){
hint.ai_family = AF_INET;
hint.ai_socktype = SOCK_STREAM;
hint.ai_flags = AI_CANONNAME;
hint.ai_protocol = 0;
hint.ai_addrlen = 0;
hint.ai_addr = NULL;
hint.ai_canonname = NULL;
hint.ai_next = NULL;
char name[1024];
strcpy(name, hinfo->host);
if ((err = getaddrinfo(name, NULL, &hint, &ailist)) != 0) {
printf("getaddrinfo error: %s host :%s\n", gai_strerror(err), hinfo->host);
exit(-1);
}
for (aip = ailist; i==0 && aip != NULL; aip = aip->ai_next) {
sinp = (struct sockaddr_in *)aip->ai_addr;
//break;
i = i+1;
if (inet_ntop(sinp->sin_family, &sinp->sin_addr, seraddr, INET_ADDRSTRLEN) != NULL)
{
printf("\nserver address is %s\n", seraddr);
}
}
}
else{
strcpy(seraddr,hinfo->host);
}
cfd = socket(AF_INET,SOCK_STREAM,0);
if(cfd == -1){
printf("socket error\n");
return -1;
}
struct timeval timeo = {3, 0};
socklen_t len = sizeof(timeo);
setsockopt(cfd, SOL_SOCKET, SO_SNDTIMEO, &timeo, len);
bzero(&s_add, sizeof(struct sockaddr_in));
s_add.sin_family=AF_INET;
s_add.sin_addr.s_addr= inet_addr(seraddr);
s_add.sin_port=htons(hinfo->port);
if(-1 == connect(cfd,(struct sockaddr *)(&s_add), sizeof(struct sockaddr)))
{
printf("connect fail !\r\n");
return -1;
}
// int flags = fcntl(cfd, F_GETFL, 0); //设置异步
//fcntl(cfd, F_SETFL, flags | O_NONBLOCK);
printf("connect ok !\r\n");
datas(cfd,hinfo);
close(cfd);
return 1;
}
char * get(const char * url)
{
char * host = (char *)malloc(200);
char * curl = (char *)malloc(200);
int port = 80;
int *cport = &port;
int result = gethostinfobyurl(url,&host,cport,&curl);
if(result < 0){
return NULL;
}
printf("parase host:%s\n",host);
Hostinfo *hinfo = (Hostinfo*)calloc(1,sizeof(Hostinfo));
hinfo->port = port;
hinfo->host = host;
hinfo->anyurl = curl;
hinfo->isip = isip(hinfo->host);
connect_http(hinfo);
return NULL;
}
int main()
{
const char * url = "http://61.135.169.105:80/";
/* char * host = (char *)malloc(200);
char * curl = (char *)malloc(200);
int port = 80;
int *cport = &port;
gethostinfobyurl(url,&host,cport,&curl);
printf("host:%s \t address: %s\n",host,curl);
printf("port : %d\n",port);
*/
get(url);
return 0;
}
发表评论
-
c语言链表实现学生管理
2013-10-28 14:13 865#include<stdio.h> #includ ... -
毗连“"aa"”和“"bb"”不能给出一个有效的预处理标识符,gcc编译错误表
2013-10-01 18:54 2860gcc bug : ##’ cannot appear at ... -
负数转化为整数
2013-10-01 12:02 1288负数转化为整数 int a = -1321313; 12 ... -
STDIN_FILENO的作用及与stdin 的区别
2013-09-08 14:48 859if(NULL == fgets(msg,100,stdi ... -
linux进程cpu资源分配命令nice,renice,taskset
2013-09-04 14:03 1126nice,renice 指定进程运行的优先级 taskset ... -
c++ 动态内存分配
2013-08-28 22:35 780先看一段代码: [cpp] view plaincopy ... -
文件结束符EOF,system("stty raw")
2013-08-14 10:47 1503>> 关于文件结束符EOF EOF 是 End O ... -
c 专家编程
2013-08-13 17:06 653总结: -2> int * a = NUL ... -
Linux中线程与CPU核的绑定
2013-08-09 15:15 2083最近在对项目进行性能 ... -
建议编译的时候加警告 atof
2013-08-07 20:46 669#include <stdlib.h> ... -
feodra 17 安装 chrome
2013-08-04 01:35 7221: 下载:http://www.google.cn/chro ... -
Sudo提权出现:xx用户不在 sudoers 文件中
2013-08-03 20:22 870Sudo提权出现:xx用户不在 sudoers 文件中 症状 ... -
c语言api
2013-07-31 21:06 637原型:extern int isalnum(int c); 用 ... -
c 语言无符号类型使用注意,类型升级
2013-07-30 14:37 588#define SS sizeof(int) 5 int ... -
select,epoll,poll比较
2013-07-28 17:13 649select,poll,epoll简介 se ... -
gcc编译程序时,可能会用到“-I”(大写i),“-L”(大写l),“-l”(小写l)等参数
2013-07-22 22:45 850我们用gcc编译程序时,可能会用到“-I”(大写i),“-L” ... -
Linux下如何将进程绑定在特定的CPU上运行
2013-07-22 10:52 947Linux下如何将进程绑定在特定的CPU上运行? 以root用 ... -
linux运维常用命令
2013-07-13 20:40 808推荐一个实用命令:awk '{x+=$2} END {prin ... -
linux 进程通信方式
2013-07-07 20:46 588# 管道( pipe ):管道是一种半双工的通信方式,数据只能 ... -
判断两个一个链表是否存在循环(C专家编程中的问题)
2013-06-24 15:35 872判断两个一个链表是否存在循环(C专家编程中的问题) #incl ...
相关推荐
简单的linux_rtsp_client
tar zxvf jre-7u5-linux-i586.tar.gz -C ../software/ cd ../software cp -rp jre1.7.0_05/ /usr/local/ vi /etc/profile 加入如下3条 JAVA_HOME=/usr/local/jre1.7.0_05/ CLASSPATH=$CLASSPATH:$JAVA_HOME/lib PATH...
Linux-C-聊天室 运行在Linux系统平台,基于TCP/IP的聊天室程序 首先是系统目录(用户.db为系统为每个登录用户创建的数据库文件,chat.db为聊天记录,client server为用户端和服务器端) 先看功能,再看主要代码分析 ...
用C语言 实现Linux上的FTP传输。本设计旨在利用Winsock 2.0简单实现FTP(File Transfer Protocol,文件传输协议)的客户端和服务器端程序。
这是一个最简单的Linux C语言tcp client端驱动代码,其中tcp_client.c、tcp_client.h两个文件是封装的tcp client驱动,main.c是demo例程。 使用该驱动可以最快地测试tcp client端的交互逻辑。
我知道了,这是清单att.c和att.h att-types.h bluetooth.c和bluetooth.h btgatt-client.c(主要) 配置文件crypto.c和crypto.h gatt-client.c和gatt-client.h gatt-db.c和gatt-db.h gatt-helpers.c和gatt-he
我自己的毕业设计作品,比较初级的东西,但是实现了上下传文件,目录管理相关的一些操作.仅供新手参考.实现的命令有USER PASS QUIT PASV TYPE PWD CWD LIST RETR STOR
C语言实现window(linux)平台的SNTP,本程序功能主要是实现电脑(或者设备)时间同步。摘录部分代码: unsigned char liVnMode; /* LeapSecond(2bits:0), VersionNumber(3bits: 3), Mode(3bits: Client=3, ...
oracle客户端的安装是非常简单的,关键在tns配置,我这里使用的rpm安装包,oracle本身不是开源,那使用rpm安装时简单的。 1.要远程使用oracle,先下载下面三个文件,... oracle-instantclient-basic-10.2.0.4-1.i
Linux下的校园网客户端,非常简单,,相当于windows下的inode客户端,
如果你想了解如何通过C语言编写Linux下的UDP客户端,那么这篇文章就是为你准备的。在这篇文章中,我们将讲解UDP协议的概念以及UDP客户端的实现过程。我们将带你逐步了解如何使用C语言编写一个简单的UDP客户端,向...
可实现简单的收取邮件,查看邮箱状态文件列表。可查看单个邮件详细信息。密码隐藏,指令封装,邮件只存本地,并可检索邮件内容。
本人写的 server.c和 client.c 供大家下载学习 如有问题,或相互学习 加Q 335025033
Server,使用C语言开发,全部代码只有502行(包括注释),附带一个简单的Client,可以通过阅读这段代码理解一个 Http Server 的本质。 下载链接: cJSON cJSON是C语言中的一个JSON编解码器,非常轻量级,C文件只有500...
IRC-chatSystem IRC简单聊天系统 IRC simple chat system linux大型实验 ...源代码一份 client.c server.c (含user.ini) 技术说明文档一份 IRC软件技术报告.pdf 使用说明文档一份 IRC软件使用说明书.pd
linux下编译client_d时命令gcc client_d.c -lrt
用C语言编程实现linux简单的聊天室功能。 用户程序命名为client.c;服务器程序命名为server.c 绑定端口等信息见实验方法内容; 要求client可以通过socket连接server 在client,提示输入服务器ip 若连接...
简易的web服务器实现, 有httpd 服务器通过管道实现动态流程. 解析协议发送响应. 并附带一个 简易的 client.c 的测试客户端
跳到: 介绍栏目: 当前能力支持平台列表回到顶端AWS IoT设备客户端是用C ++编写的免费,开源,模块化软件,您可以将其编译并安装在基于嵌入式Linux的IoT设备上,以默认访问AWS IoT Core , AWS IoT Device ...
使用root用户登陆安装rpm包 #]rpm -ivh compat-libstdc++-7.3-2.96.110.i386.rpm #]./pre.ps #]linux1x -c 下面问的问题很简单,一路yes,注意最后问你是否改变日志的存放位置,no就可以,用默认的路径...