在网上看到一个制作高逼格二维码的文章,来源http://www.chenxublog.com/2016/05/22/pic-qrcode-colorful.html
步骤那可是相当的复杂,一堆软件各种ps啊什么的,不过根据实现的效果一看,原理貌似很简单嘛,何必弄那么复杂,于是我用代码实现了一个,本文着重介绍原理。编译后的程序在最下面,不过建议使用前先看过去,否则可能你不会用2333
先来几张图你们感受下,支付宝:
月度归档: 2016年7月
C++:socket服务端模型
Warning: WP_Syntax::substituteToken(): Argument #1 ($match) must be passed by reference, value given in /www/wwwroot/fawdlstty.com/wp-content/plugins/wp-syntax/wp-syntax.php on line 383
首先解释下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++:文件操作
Warning: WP_Syntax::substituteToken(): Argument #1 ($match) must be passed by reference, value given in /www/wwwroot/fawdlstty.com/wp-content/plugins/wp-syntax/wp-syntax.php on line 383
文件操作是个啥大家都懂了,下面我给出几个文件操作示例
1、C语言文件操作
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 47 48 49 50 51 52 53 54 55 56 57 | //在windows平台下避免函数不安全报错而定义的一个宏 #define _CRT_SECURE_NO_WARNINGS #include <stdio .h> #include <stdlib .h> #include <string .h> int main () { //fopen第二个参数有以下几种取值模式 //首先是打开方式,从以下打开方式中任选一种或组合 // a(append) 以写方式打开文件并移动文件指针到文件尾部 // r(read) 以读方式打开文件,文件指针位置未知建议打开后重置文件指针 // w(write) 以写方式打开文件并清空文件内容 //然后是数据类型,默认为文本方式,如果加上b则为二进制方式,区别在于,在windows环境下,不加b(文本模式)会造成: // 以文本方式读文件时,换行符\r\n被读成\n // 以文本方式写文件时,换行符\n被写成\r\n //最后是扩展方式,如果带+号代表如果文件不存在则新建。但我实际测试结果为,带不带+号并没什么卵用 //示例:第二个参数为 rwb+ 代表以二进制读写方式打开文件,如果文件不存在则新建 FILE *f = fopen ("a.txt", "rw+"); if (f) { char *data = "hello"; //写文件,不多做解释 fwrite (data, strlen(data), 1, f); //移动文件指针到结束位置,第三个参数三种取值分别为 SEEK_SET(开始位置)、SEEK_CUR(当前位置)、SEEK_END(结束位置) fseek (f, 0, SEEK_END); //获取文件指针的偏移,这时候指针在末尾,含义就代表文件长度。 //值得注意的是如果以文本方式并且有回车并且读取文件时,文件长度与读取的字节数不一样,原因上面有说明 int len = ftell (f); //这行代码含义为移动文件指针到文件起始位置,等价于 fseek (f, 0, SEEK_SET); rewind (f); //其他文件操作函数不做说明,这儿给出常用列表 //fwrite 输出一块数据到文件 //fprintf 格式化输出到文件 //fputc 输出一个字节到文件 //fputs 输出一串字符串到文件 //fread 读取一块数据到文件 //fscanf 从文件格式化输入 //fgetc 从文件中读取一个字符,因为文件可能结束,所以返回类型为int。如果值为 EOF 代表文件已读到最后 //fgets 从文件中读取一串字符串 //feof 判断文件指针是否在文件末尾 //如果为多个程序同时访问文件的情况时建议加上这句。含义代表将文件缓冲区内容刷新到文件中 //不加可能出现文件更新不及时的现象,不管是否调用这句,关闭文件时始终会刷新的 fflush (f); //关闭文件 fclose (f); } else { printf ("打开文件失败!"); } system ("pause"); return 0; }</string></stdlib></stdio> |