c/c++ 网络编程 单纯http客户端,服务器端
网络编程 单纯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;
}
发送端的执行方式:
./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;
}
测试方式:
在浏览器里输入:http://127.0.0.1:12345
或者输入:http://localhost:12345
c/c++ 学习互助QQ群:877684253

本人微信:xiaoshitou5854
c/c++ 网络编程 单纯http客户端,服务器端的更多相关文章
- 循序渐进Socket网络编程(多客户端、信息共享、文件传输)
循序渐进Socket网络编程(多客户端.信息共享.文件传输) 前言:在最近一个即将结束的项目中使用到了Socket编程,用于调用另一系统进行处理并返回数据.故把Socket的基础知识总结梳理一遍. 1 ...
- 网络编程 单纯UDP通信
网络编程 单纯UDP通信 1,UDP发送端 2,UDP接收端 UDP发送端: #include <stdio.h> #include <unistd.h> #include & ...
- 循序渐进Java Socket网络编程(多客户端、信息共享、文件传输)
目录[-] 一.TCP/IP协议 二.TCP与UDP 三.Socket是什么 四.Java中的Socket 五.基本的Client/Server程序 六.多客户端连接服务器 七.信息共享 八.文件传输 ...
- 《UNIX网络编程》TCP客户端服务器例子
最近在看<UNIX网络编程>(简称unp)和<Linux程序设计>,对于unp中第一个获取服务器时间的例子,实践起来总是有点头痛的,因为作者将声明全部包含在了unp.h里,导致 ...
- go网络编程示例,客户端,服务器端
http://blog.csdn.net/wangningyu/article/details/22859245 http://blog.csdn.net/wangningyu/article/det ...
- Python之路(第三十四篇) 网络编程:验证客户端合法性
一.验证客户端合法性 如果你想在分布式系统中实现一个简单的客户端链接认证功能,又不像SSL那么复杂,那么利用hmac+加盐的方式来实现. 客户端验证的总的思路是将服务端随机产生的指定位数的字节发送到客 ...
- 【python】网络编程-SocketServer 实现客户端与服务器间非阻塞通信
利用SocketServer模块来实现网络客户端与服务器并发连接非阻塞通信.首先,先了解下SocketServer模块中可供使用的类:BaseServer:包含服务器的核心功能与混合(mix-in)类 ...
- python网络编程之验证客户端链接的合法性
六.socket的更多方法介绍 服务端套接字函数s.bind() 绑定(主机,端口号)到套接字s.listen() 开始TCP监听s.accept() b被动接收TCP客户的连接,(阻塞式)等待连接的 ...
- 《UNIX网络编程》UDP客户端服务器:消息回显
udp写的程序相比tcp简单一些,在socket()与bind()之后,不需要connect(),accept()等步骤,直接简化为了sendto()与recvfrom(). 编译运行同前面的tcp. ...
随机推荐
- Oracle synonym 同义词
Oracle synonym 同义词 1.Oracle synonym 同义词是数据库当前用户通过给另外一个用户的对象创建一个别名,然后可以通过对别名进行查询和操作,等价于直接操作该数据库对象. 2. ...
- Python内置函数(11)——classmethod
英文文档: classmethod(function) Return a class method for function. A class method receives the class as ...
- PHP-mysqli 出错回显
面向对象风格 <?php $conn = new mysqli("localhost", "username", "password" ...
- Fleck For Web Socket
效果图 (前沿).WebSocket是一种基于TCP/IP通讯一种新的通讯协议,它实现了服务器和客户端双工通讯,允许服务器主动发送给客户端. (浏览器对Socket的支持) . 浏览器 支持情况 Ch ...
- 探索ASP.NET Core中的IStartupFilter
原文:Exploring IStartupFilter in ASP.NET Core 作者:Andrew Lock 译者:Lamond Lu 在本篇博客中,我将介绍一下IStartupFilter, ...
- Lucene 01 - 初步认识全文检索和Lucene
目录 1 搜索简介 1.1 搜索实现方案 1.2 数据查询方法 1.2.1 顺序扫描法 1.2.2 倒排索引法(反向索引) 1.3 搜索技术应用场景 2 Lucene简介 2.1 Lucene是什么 ...
- java.lang.OutOfMemoryError: unable to create new native thread问题排查以及当前系统最大进程数量
1. 问题描述 线上某应用出问题,查看日志 这一组服务器是2台,每台都有.配置为64G,使用7G,空余内存非常多 2. 问题排查 环境变化:程序迁移到新机器,新机器是CentOS 7,程序运行账号由原 ...
- iOS逆向开发(6):微信伪造位置
仍然以微信为例,实战地练习一下使用Reveal.iOSOpenDev等工具注入APP的流程,积累经验.这一系列的文章都是学习过程的总结,不带任何商业目的. 本文解决一个问题:如何伪造一个经纬度,在微信 ...
- JSP面试题都在这里
下面是我整理下来的JSP知识点: 图上的知识点都可以在我其他的文章内找到相应内容. JSP常见面试题 jsp静态包含和动态包含的区别 jsp静态包含和动态包含的区别 在讲解request对象的时候,我 ...
- leetcode — surrounded-regions
import java.util.Arrays; import java.util.Stack; /** * Source : https://oj.leetcode.com/problems/sur ...