C#:HTTP客户端与服务器的实现

HTTP协议算是使用最广泛的Web协议了,主要面向基于B/S的实现。对于很多语言比如PHP或者javascript等Web语言,HTTP协议使用上甚至比TCP协议更简单。但这协议对普通的系统语言程序员就不太友好了。C#这种语言嘛,支持上还行,但并没达到特别优秀的效果,比如发起一个POST请求至少需要十行代码以上。这个库是我基于对C#语言封装的协议的了解,在此基础上新增的一个更加方便开发的库。源码在 https://github.com/fawdlstty/hanHttpLib 查看或下载。因为可能更新频繁,所以源码我就不在文章里面贴了。
目前这个库不算特别优秀,目前只支持基础的调用,结构也非常简单,但它能力可不差,用来给小伙伴学习也是极好的。我将不定期更新它,力争将其做到完美。
先说说HTTP的客户端。HTTP客户端主要是浏览器用来请求Web服务器上的资源用的,最广泛的就是浏览器了。每个浏览器都有一套HTTP客户端实现方式,请求完成资源后在界面上显示。但随着时代的发展,HTTP协议有着基本化的趋势。因为使用HTTPS进行通讯可以使用非常小的代价就能非常安全的加密通讯数据。另外HTTP客户端也不止是做浏览器了,除此之外最大的用处是做爬虫。比如很多零散的数据分布在零散的Web服务器上,这时就可以使用爬虫技术将零散的数据归纳起来。更加厉害的就是,再结合人工智能技术,爬取数据之后使用人工智能进行分析,差不多就能成就改变世界的武器了。
继续阅读C#:HTTP客户端与服务器的实现

C++:socket服务端模型

首先解释下socket含义。网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。 Socket的英文原义是“孔”或“插座”。作为BSD UNIX的进程通信机制,取后一种意思。通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,可以用来实现不同虚拟机或不同计算机之间的通信。
下面我列举几个常用的服务端TCP socket实现代码

1、首先是最原始的阻塞模型。这种模型简单易懂,[以下代码基于Windows]:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include <winsock2 .h>
#pragma comment(lib, "ws2_32.lib")
 
int mian (int argc, char* argv []) {
    //Winsock环境初始化
    WSAData wd;
    WSAStartup (MAKEWORD (2, 2), &wd);
 
    //创建套接字
    SOCKET sock = socket (AF_INET, SOCK_STREAM, IPPROTO_TCP);//对于UDP协议,第二个参数填 SOCK_DGRAM
 
    //绑定前的操作,UDP可以不用绑定
    sockaddr_in addr;
    addr.sin_family = AF_INET;//需要绑定的本地地址
    addr.sin_addr.s_addr = 0;
    addr.sin_port = htons (51423);//需要绑定的本地端口
 
    //执行绑定
    bind (sock, (struct sockaddr*)&addr, sizeof (addr));
 
    //监听
    listen (sock, SOMAXCONN);
 
    while (true) {
        //如果有链接请求,则接受链接
        SOCKET session = accept (sock, NULL, NULL);
        if (INVALID_SOCKET == session) break;
 
        //接收数据
        char buf [1024];
        int len = recv (session, buf, sizeof (buf), 0);
 
        //发送数据
        send (session, buf, len, 0);
 
        //关闭链接
        closesocket (session);
    }
 
    //关闭套接字
    closesocket (sock);
 
    //Winsock环境释放
    WSACleanup ();
    return 0;
}</winsock2>

继续阅读C++:socket服务端模型

网站https加密访问实现

20160508201012
https加密访问有好处也有坏处,好处主要有别人无法嗅探到通讯内容,网址的绿锁图标也代表安全,坏处也有比如消耗服务器端资源,另外也无法提供适用的cdn加速,主要看个人取舍。证书主要有两种,主要面向个人用户与企业用户。个人型证书一般可以免费申领,主要效果是网址前面有绿锁图标,企业型证书需要购买,可以在网址前面显示公司名称等。
免费SSL证书可以在 沃通StarSSLLet's Encrypt 上获得,其中沃通和StarSSL是申请,Let's Encrypt是在服务器上安装指定软件,验证之后生成证书。
继续阅读网站https加密访问实现

网站服务器伪静态环境配置

伪静态是个好东西,可以用来SEO优化等,由于Wordpress+Nginx配置比较麻烦,免不了入一些坑,所以写个博文方便新晋站长们配置。
首先在Wordpress的“设置”-“固定链接”菜单中设置固定链接为自定义结构,我的是/archives/%post_id%.html这个,小站长们随意,注意Nginx配置时统一一下就阔以咯,然后分类目录前缀category,标签前缀tags,然后保存更改。
这时候你将会神奇的发现,整个网站就首页可以访问,其他都访问不了了。别慌,接下来配置Nginx。在location里面撸上如下代码:

1
2
3
4
5
6
7
8
location / {
    root   ...;
    index  index.html index.htm index.php;
    if (!-e $request_filename){
        rewrite ^/archives/(\d+)\.html$ /index.php?p=$1;
        rewrite ^/([^\.]+)$ /index.php?$1;
    }
}

root别照抄,其他根据自身环境修改。重点在于if,这关键字与括号间必须要有个空格。这几句话意思是,如果访问的文件不存在,那么,就看看是不是archives开头的,如果是就代表介个是文章,用正则将其替换为/?p=形式转发给index.php,然后剩余无法访问的伪路径直接转发给index.php,包括标签、分类目录、页面等。
配置完成后重启服务器/usr/local/nginx/sbin/nginx -s reload,然后,估计整个网站全部正常访问。这时候就代表伪静态配置成功