网络编程 单纯http客户端,服务器端

1,http客户端

2,http服务器端

http客户端:

#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <errno.h>
#include <netdb.h>
#include <string.h>
#include <unistd.h> int main(int argc, char* argv[]){ int err;
int sock;
char buf[32];
char* deststr;
addrinfo hints, *res0, *res;
if(argc != 2){return 1;} deststr = argv[1]; memset(&hints, 0, sizeof(hints));
hints.ai_socktype = SOCK_STREAM;
hints.ai_family = PF_UNSPEC;
if((err = getaddrinfo(deststr, "http", &hints, &res0)) != 0){
printf("error %d:%s\n", err, gai_strerror(err));
return 1;
}
for(res = res0; res != NULL; res = res->ai_next){
printf("%d\n", res->ai_family);
sock = socket(res->ai_family, res->ai_socktype, res->ai_protocol);
if(sock < 0){continue;}
if(connect(sock, res->ai_addr, res->ai_addrlen) != 0){
close(sock);
continue;
}
break;
} freeaddrinfo(res0); if(res == NULL){
printf("failed\n");
return 1;
} snprintf(buf, sizeof(buf), "GET / HTTP/1.0\r\n\r\n"); int n = write(sock, buf, (int)strlen(buf)); while(n > 0){
n = read(sock, buf, sizeof(buf));
write(fileno(stdout), buf, n);
} close(sock);
return 0;
}

github源代码

发送端的执行方式:

./a.out www.baidu.com

http服务器端

#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <errno.h>
#include <netdb.h>
#include <string.h>
#include <unistd.h> int main(){
int sock0;
sockaddr_in client;
socklen_t len;
int sock;
int yes = 1;
addrinfo *res, hints;
int err;
char buf[2048];
int n;
char inbuf[2048]; hints.ai_family = AF_INET;
hints.ai_flags = AI_PASSIVE;
hints.ai_socktype = SOCK_STREAM; err = getaddrinfo(NULL, "12345", &hints, &res);
if(err != 0){
printf("getaddrinfo %s\n", gai_strerror(err));
return 1;
} sock0 = socket(res->ai_family, res->ai_socktype, 0); setsockopt(sock0, SOL_SOCKET, SO_REUSEADDR, (const char*)&yes, sizeof(yes));
bind(sock0, res->ai_addr, res->ai_addrlen);
listen(sock0, 5); snprintf(buf, sizeof(buf),
"HTTP/1.0 200 OK\r\n"
"Content-Length: 20\r\n"
"Content-Type:text/html\r\n"
"\r\n"
"HELLO\r\n");
while(1){
len = sizeof(client);
sock = accept(sock0, (sockaddr*)&client, &len);
n = read(sock, inbuf, sizeof(inbuf));
write(fileno(stdout), inbuf, n);
write(sock, buf, (int)strlen(buf));
close(sock);
}
close(sock0);
return 0;
}

github源代码

测试方式:

在浏览器里输入:http://127.0.0.1:12345
或者输入:http://localhost:12345

c/c++ 学习互助QQ群:877684253

本人微信:xiaoshitou5854

c/c++ 网络编程 单纯http客户端,服务器端的更多相关文章

  1. 循序渐进Socket网络编程(多客户端、信息共享、文件传输)

    循序渐进Socket网络编程(多客户端.信息共享.文件传输) 前言:在最近一个即将结束的项目中使用到了Socket编程,用于调用另一系统进行处理并返回数据.故把Socket的基础知识总结梳理一遍. 1 ...

  2. 网络编程 单纯UDP通信

    网络编程 单纯UDP通信 1,UDP发送端 2,UDP接收端 UDP发送端: #include <stdio.h> #include <unistd.h> #include & ...

  3. 循序渐进Java Socket网络编程(多客户端、信息共享、文件传输)

    目录[-] 一.TCP/IP协议 二.TCP与UDP 三.Socket是什么 四.Java中的Socket 五.基本的Client/Server程序 六.多客户端连接服务器 七.信息共享 八.文件传输 ...

  4. 《UNIX网络编程》TCP客户端服务器例子

    最近在看<UNIX网络编程>(简称unp)和<Linux程序设计>,对于unp中第一个获取服务器时间的例子,实践起来总是有点头痛的,因为作者将声明全部包含在了unp.h里,导致 ...

  5. go网络编程示例,客户端,服务器端

    http://blog.csdn.net/wangningyu/article/details/22859245 http://blog.csdn.net/wangningyu/article/det ...

  6. Python之路(第三十四篇) 网络编程:验证客户端合法性

    一.验证客户端合法性 如果你想在分布式系统中实现一个简单的客户端链接认证功能,又不像SSL那么复杂,那么利用hmac+加盐的方式来实现. 客户端验证的总的思路是将服务端随机产生的指定位数的字节发送到客 ...

  7. 【python】网络编程-SocketServer 实现客户端与服务器间非阻塞通信

    利用SocketServer模块来实现网络客户端与服务器并发连接非阻塞通信.首先,先了解下SocketServer模块中可供使用的类:BaseServer:包含服务器的核心功能与混合(mix-in)类 ...

  8. python网络编程之验证客户端链接的合法性

    六.socket的更多方法介绍 服务端套接字函数s.bind() 绑定(主机,端口号)到套接字s.listen() 开始TCP监听s.accept() b被动接收TCP客户的连接,(阻塞式)等待连接的 ...

  9. 《UNIX网络编程》UDP客户端服务器:消息回显

    udp写的程序相比tcp简单一些,在socket()与bind()之后,不需要connect(),accept()等步骤,直接简化为了sendto()与recvfrom(). 编译运行同前面的tcp. ...

随机推荐

  1. ThinkPHP 数据库操作(五) : 存储过程、数据集、分布式数据库

    存储过程 5.0支持存储过程,如果我们定义了一个数据库存储过程 sp_query ,可以使用下面的方式调用: $result = Db::query('call sp_query(8)'); 返回的是 ...

  2. Python内置函数(63)——super

    英文文档: super([type[, object-or-type]]) Return a proxy object that delegates method calls to a parent ...

  3. ASP.NET Core Mvc中空返回值的处理方式

    原文地址:https://www.strathweb.com/2018/10/convert-null-valued-results-to-404-in-asp-net-core-mvc/ 作者: F ...

  4. [Leetcode]237. Delete Node in a Linked List -David_Lin

    Write a function to delete a node (except the tail) in a singly linked list, given only access to th ...

  5. 阿里云HBase全新发布X-Pack 赋能轻量级大数据平台

    一.八年双十一,造就国内最大最专业HBase技术团队 阿里巴巴集团早在2010开始研究并把HBase投入生产环境使用,从最初的淘宝历史交易记录,到蚂蚁安全风控数据存储.持续8年的投入,历经8年双十一锻 ...

  6. Servlet+Tomcat总结

    Tomcat的缺省端口是多少,怎么修改 1.找到Tomcat目录下的conf文件夹 2.进入conf文件夹里面找到server.xml文件 3.打开server.xml文件 4.在server.xml ...

  7. Ansible快速上手

    ansible 是通过python 语言开发的自动化运维工具,可以实现批量系统设置.批量程序部署.批量执行命令等功能 下面是基于docker使用ansible测试示例,可以让新手快速上手使用 一.新建 ...

  8. 强大的jupyter,python开发者的福音

    jupyter是一种交互式计算和开发环境的笔记,ipython命令行比原生的python命令行更加友好和高效,还可以运行web版的界面,支持多语言,输出图形.音频.视频等功能. 一.安装 pip3 i ...

  9. 使用VBA批量CSV转XLS(97-2003)

    Sub EditCsvToXls() Application.ScreenUpdating = False '文件目录 ChDir "C:\Users\QA-Department\Deskt ...

  10. 批量修改mac系统文件的可读写权限

    www 修改 /Users/feiwang 文件夹下的www 下的所有文件和文件的可读写权限.