简单介绍什么是Winsocket以及server/client应用程序模型,给了一个简单的server/client程序的tcp实现。
一、Winsocket简介
Winsocket是unix/linux下的berkeley socket在Windows下的实现。unix/linux下的berkeley socket是网络通讯方面的基石,应用程序通过调用berkeley socket的API进行相互通讯,berkeley socket则利用具体的网络通讯协议和操作系统的调用来为我们完成具体的通讯工作。Winsocket保留了berkeley socket的所有内容,并且为了其能在Win32消息机制和多线程的环境下更好的工作。Winsocket在berkeley socket原有的基础上对其进行了扩充。如我们可以利用WSAAsyncSelect对Socket消息进行订阅,以及使用WSAGetLastError对多线程环境下的Winsocket错误进行捕获。
二、server/client应用程序模型
服务器程序一直处于监听的状态,等待客户端程序的连接。客户端程序像服务器程序发送连接请求,服务器程序接受该连接请求,同时与客户端程序建立连接。此时客户端程序就可以向服务器发送具体的请求,获取相关的数据。服务器\客户端模型有三种连接方式,一种是面向连接的(TCP),面向连接的服务是一种可靠的服务,它通过数据流进行数据的传输,面向连接的服务实现了无差错无重复的顺寻数据发送。一种是面向无连接的(UDP),面向无连接的服务是一种不可靠的服务,它通过数据报进行数据传输,由于数据报进行传输时的顺序是无序的,所以它是不可靠的服务。最后一种是多播的方式,及服务器程序主动向多个客户端程序发送信息。
面向连接的服务器\客户端应用程序模型的程序流程图如下所示:
在此模型的阻塞模式中,服务端程序在执行accept操作、客户端程序connect操作、以及服务端\客户端在进行read和write操作时,如果这些操作既没有成功也没有失败,应用程序会在执行这些操作的地方一直阻塞着。