明确一点: windows创建套接字的目的是为了网络传输,实现数据的传输。
sockets套接字是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元,可以将套接字看做不同主机间进程进行双向通信的端点。套接字分为两种不同的类型:流式套接字和数据报套接字。流式套接字具有有序性,面向连接;数据包套接字不保证可靠性和有序性。
任何从winsock函数对IP地址和端口号的引用和传送给winsock函数的ip地址和端口均是按照网络顺序组织的。套接字可以处于阻塞和非阻塞模式。在32位系统中,可以采用多线程编程,在不同的线程中使用套接字,这样即使某个线程中的套接字被阻塞,也不会影响应用程序的其他操作。
原理 简单客户机/服务器模型即客户机向服务器提出请求,服务器对请求做相应的处理并执行被请求的任务,然后将结果返回客户机。
winsock的服务是以动态链接库的形式实现的,所以必须先调用wsastartup函数对动态链接哭进行初始化,协商winsock的版本支持,并分配必要的必要的资源。在应用程序关闭套接字后,还应调用wsacleanup函数终止对动态库的使用,并释放资源。
winsock的编程模型,都采用客户机和服务器的编程模型。1服务器创建套接字,调用socket函数,(当然已经进行了版本的协商,这个过程主要是完成网络协议的声明)2将本地的地址绑定到所建的套接字上以使在网络上标示该套接字,使用bind函数完成。(这个阶段是完成套接字的绑定,制定网络的ip地址,指定端口号)3将套接字置入监听模式并准备接受连接请求。让套接字进入等待状态。调用accept函数接受用户的(这个阶段的任务是等待接受用户的信息)另外一方面,客户进程调用socket函数创建套接字,通过调用connecti函数建立一个连接,当客户端的连接建立以后,被阻塞的进程accpet函数与客户端建立连接,并向客户返回接受信号。一旦客户机的套接字收到来自服务器的接受信号,则客户机与服务器已实现连接,则可以进行数据传输了。使用recv和send函数进行数据的传输。以上这些都是在为传输数据在铺垫。无论是recv函数还是send函数都必须通过套接字进行数据的传输。最后调用closesocket函数关闭套接字。