0x14-套接字编程-HTTP服务器(2)HTTP服务器的结构HTTP服务器 本质上就是一个 TCP的接收端 程序但凡一个正常的 TCP 接收端程序,都逃不过那几个流程:创建监听socket -> 绑定端口,IP -> 监听socket -> 接受新连接 -> 处理读写... ->
0x13-套接字编程-HTTP服务器(1)这里不是百科全书,所以只会用最简单,最明了的语言,来讲最实用的TCP编程。Echo程序太多,就不再重复了,贯穿整个章节的将会是一个 HTTP 服务器这回是在Linux下开发,而不是WindowsTCP囫囵吞枣般的喂完UDP的基本应用,以及一些API的使用,不再赘述TCP的使用,其实是很多我也不懂,(逃。
0x12-套接字编程-2新时代的 套接字网络编程首先有几个结构体,以及一个接口十分重要及常用:struct sockaddr_in6 : 代表的是 IPv6 的地址信息struct addrinfo : 这是一个通用的结构体,里面可以存储 IPv4 或 IPv6 类型地址的信息getaddrinfo : 这是一个十分方便的接口,在上述 UDP 程序中许多手动填写的部分,都能够省去,有该函数替我们完成改写一下上方的例子…
两种协议 TCP 和 UDP前者可以理解为有保证的连接,后者是追求快速的连接当然最后一点有些 太过绝对 ,但是现在不需熬考虑太多,因为初入套接字编程,一切从简稍微试想便能够大致理解, TCP 追求的是可靠的传输数据, UDP 追求的则是快速的传输数据前者有繁琐的连接过程,后者则是根本不建立可靠连接(不是绝对),只是将数据发送而不考虑是否到达。
最具误导性的当属于 TCP/IP 协议了所谓 TCP/IP 协议指的并不是一个协议,往往在生活中听见的术语如:IP地址, TCP连接 等,总会被误导,以为就是一个东西实际上它们都是彼此独立的 协议 ,只不过会相互合作罢了TCP/IP说的是一个 协议族 ,也就是说是一堆协议的统称对比 OSI 和 TCP/IP 参考模型:OSITCP/IP应用层 表示层 会话层应用层传输层传输层网…
所谓系统编程之一TCP/IP 编程常见网络协议及UDP, TCP 应用。最后以详述描写,如何在Linux上编写一个并发HTTP服务器作为本章结尾。
总结首先前面提到了一个思路:给队列模型添加初步的线程保护,在使用它的时候,可以不考虑会保护其免受资源争夺的问题实际上就是将CRITICAL_SECTION放在 Queue.c 的实现当中。让两个基本操作 PushBack PopFront 能够自己实现保护自己具体应该怎么做呢?之前的我们对队列模型中的 empty 实现了单独保护,现在反过来,将其保护范围扩大一些就行了。
0x0F-多线程备份写在最前方到现在为止我们有了一开始的遍历模型(show_structure),队列模型(queue)。现在我们需要做的就是将他们融合在一起,并且通过多线程将其驱动。以下将会用到Windows API 和 Windows线程库<process.h>以及文件状态需要用到的<sys/stat.h>
0x0E-单线程备份(下)写在最前方按部就班的完成一件事情,是十分美妙的感觉。在这里并没有使用Makefile系列的构造工具,而是使用集成开发环境直接一站式的完成所有的工作,而我们只需要专注于编写有用的代码即可。
0x0D-单线程备份(上)写在最前方源路径:即 From-Path,你准备要备份的资料目的路径: 即 To-Path,你准备要存储备份的资料的地方稍微回想一下,上一次写的代码,本次的任务是遍历目录及其子目录,那么这回要干的就是将上次遍历过的数据,挪一下窝,到我们想要他们去的位置。
0x0C-开始行动写在最前方对于线程的概念以及意义,我说一些现在我只说,一个多线程的技术对于C语言程序而言就像,原本只有你一个人在干活,现在突然有许多人愿意追随你,变成了以你为核心的多人合作模式,共同完成同一个任务。导致的结果就是,这个任务被切分成多个模块,有可能很多人一起做同一个模块,有可能某些模块只有一个人在做,这就带来了什么问题呢?
0x0B-C语言错误处理三个必要的头文件 #include <stdio.h> #include <errno.h> #include <string.h>一个声明 extern int errno;四个重要函数 int ferror(FILE* stream); int feof(FILE* stream); char *strerror(int errnum); void perror(const char *s);
实用C编程以及程序实战
0x0A-C线程和Glib的视角C11之线程这部分 GCC 并没有提供实现,也就是说GCC没有义务提供这个实现,我们只能用一些第三方的实现。看不懂这一次GCC什么用意,都四年过去了。所以现在在写跨平台多线程的程序时我一般选择使用 Qt 这个框架(C++)。
0x09-未曾领略的新风景前方曾提到两个关键字 restrict 和 inline 在C语言中的使用,但是后者可能还能带来些许理解上的便利,开启 -O3 优化是一个很不错的选择。inline 的作用还是在于和 static 一起使用,让小函数尽可能的减小开销甚至消除函数开销。restrict 最重要的还是在于编译器的优化上。
0x08-C语言效率(下)注:存储器山就是对于不同步长不同大小文件的读取速率的三维坐标图,形似一座山,z轴为速率,x轴为步长,y轴为文件大小(字节),某些主流的测评软件便是这个原理(将存储器山的图像进行一下简单的变换,就能得到哪些软件呈现的效果图像)。上文提到过,任何一点小改动,都有可能让程序的性能发生很大的变动,这是为什么?
0x07-C语言效率(上)大概所有学习C语言的初学者,都被前辈说过,C语言是世界上接近最速的编程语言,当然这并不是吹牛,也并不是贬低其他语言,诚然非C语言能写出高速度的代码,但是C语言更容易写出高速的程序(高速不代表高效),然而再好的工具,在外行人手中也只能是黯淡没落。
0x06-C语言预处理器预处理最大的标志便是大写,虽然这不是标准,但请你在使用的时候大写,为了自己,也为了后人。预处理器在一般看来,用得最多的还是宏,这里总结一下预处理器的用法。#include <stdio.h>
0x05-C语言指针(Volume-2)内存的使用的那些事儿你一直以为你操作的是真实物理内存,实际上并不是,你操作的只是操作系统为你分配的资格虚拟地址,但这并不意味着我们可以无限使用内存,那内存卖那么贵干嘛,实际上存储数据的还是物理内存,只不过在操作系统这个中介的介入情况下,不同程序窗口(可以是相同程序)可以共享使用同一块内存区域,一旦某个傻大个程序的使用让物…
0x05-C语言指针:(Volume-1)这似乎是一个很凝重的话题,但是它真的很有趣。1. 指针是指向某一类型的东西,任何一个整体,只要能称为整体就能拥有它自己的独一无二的指针类型,所以指针的类型其实是近似无穷无尽的2. 函数名在表达式中总是以函数指针的身份呈现,除了取地址运算符以及sizeof3.
关注时代Java