**阻塞(blocking) 、非阻塞 (non-blocking):**Windows套接字在阻塞和非阻塞两种模式下执行I/O操作。在阻塞模式下,在I/O操作完成前,执行的操作函数一直等候而不会立即返回,该函数所在的线程会阻塞在这里。相反,在非阻塞模式下,套接字函数会立即返回,而不管I/O是否完成,该函数所在的线程会继续运行。
##阻塞模式:
**阻塞模式的套接字上,调用任何一个Windows Socket API 都会耗费等待时间:** 当调用recv()函数时,- 阅读剩余部分 -

##服务端 Server:
```cpp
初始化winsock
1.创建TCP套接字
2.绑定socket到一个IP和端口上
3.监听套接字
4.接受客户端请求
5.发送、接收消息
6.关闭套接字
销毁winsock
```
##客户端 Client:
```cpp
初始化winsock
1.创建TCP套接字
- 阅读剩余部分 -
**什么是WSA (Windows Sockets Asynchronous)? **
不带WSA前缀标准的socket函数,如何socket(), send(), recv()这些不带WSA前缀的函数,这些函数是全平台通用的;而加上了WSA前缀的是微软的扩展函数,一般是Winsock2定义的2.0版的函数,只能在Windows平台用。
##WSAStartup() 函数:
用于初始化进程调用的Winsock相关的dll。
格式:
```cpp
int WS- 阅读剩余部分 -
##socket() 函数:
创建一个套接字
格式:
```cpp
SOCKET 套接字描述字 = socket(int af, int type, int protocol)
```
参数一 (af): 指定应用程序使用的协议族,对于TCP/IP协议族,该参数设置为AF_INET;
参数二 (type):指定要创建的套接字类型,流套接字类型为SOCK_STREAM、数据报套 接字类型为SOCK_STREAM;原始套接字SOCK_RAW;
参数三 (p- 阅读剩余部分 -
**Socket:**将TCP/IP集成到Unix中,出现了许多TCP/IP应用程序接口, 这些接口称为Socket接口。如今Socket接口已成为TCP/IP网络最通用、成熟的API,被称为"套接字"。
**WinSock:**微软制定的一套Windows下的网络编程接口,即WinSock规范。在实际应用中Windows Sockets规范主要有1.1和2.2版。两者的最重要区别是1.1版只支持TCP/IP协议,而2.2版可以支持多协议并且有良好的向后兼容性。
**- 阅读剩余部分 -
#域名和网络地址结构体---struct hostent
**该结构体定义如下:**
```cpp
struct hostent
{
char *h_name; //主机名,即官方域名
char **h_aliases; //主机所有别名构成的字符串数组,同一IP可绑定多个域名
int h_addrtype; //主机IP地址的类型,例如IPV4(AF_INET)还是IPV6
int h_length; //主机IP地- 阅读剩余部分 -
##导入库:
```cpp
#include
```
##非修改性序列操作
循环 对序列中的每个元素执行某操作 for_each()
查找 在序列中找出某个值的第一次出现的位置 find()
计数 在序列中统计某个值出现的次数 count()
两个序列中的对应元素都相同时为真 equal()
搜索 在序列中找出一子序列的第一次出现的位置 search()
##修改性序列操作
复制 从序列的第一个元素起进行复制 copy()
从序列的最- 阅读剩余部分 -
##导入方式:
```cpp
#include
```
##功能:
```cpp
double sqrt(double x); //开平方sqrt是square root缩写
double pow(double x,double y); //求乘方x^y,pow是power的缩写
```
##动态链接库简介:
动态链接库(Dynamic-LinkLibrary)通常包含一堆程序员自定义的变量与函数,可以在运行时动态链接到可执行文件。
##静态库的扩展名:
.dll (Win) .so(Linux)
##静态库的优缺点:
优点:

缺点:
通常包含一堆程序员自定义的变量与函数,在编译期间由编译器与链接器将它集成到可执行文件中。
##静态库的扩展名:
.lib (Win) .a(Linux)
##静态库的优缺点:
**优点:**发布时只需发布exe,因为库已被集成到可执行文件中,运行时对这个库不再依赖。
**缺点:**静态库集成到可执行文件中导致exe文件较大,后续想升级库必须重新编译
##创建静态库的步骤:
>(1) 创建- 阅读剩余部分 -
0\. **GetModuleHandle** (
PCTSTR pszModule; //DLL名称
)
>为了知道一个可执行文件或DLL文件被加载到进程地址空间的什么位置,可以用GetModuleHandle函数来返回一个句柄/基地址。如果系统找到了指定的可执行文件或DLL文件名称,GetModuleHandle就会返回可执行文件/DLL文件映像加载到的基地址。
例: HMODULE ntdll = GetModuleHandle( "ntdll.dll" )- 阅读剩余部分 -