1.1.1 Visual C++(www.cppentry.com)网络编程(www.cppentry.com)概述(2)
在数据传输层中,包括了TCP和UDP协议。其中,TCP协议是基于面向连接的可靠的通信协议,它具有重发机制,即当数据被破坏或者丢失时,发送方将重发该数据。而UDP协议是基于用户数据报协议,属于不可靠连接通信的协议。例如当使用UDP协议发送一条消息时,并不知道该消息是否已经到达接收方,或者在传输过程中数据是否已经丢失。但是在即时通信中,UDP协议在一些对时间要求较高的网络数据传输方面有着重要的作用。
(3) C/S编程(www.cppentry.com)模型
C/S编程(www.cppentry.com)模型是基于可靠连接的通信模型。在通信的双方必须使用各自的IP地址以及端口进行通信。否则,通信过程将无法实现。通常情况下,当用户使用C/S模型进行通信时,其通信的任意一方称为客户端,则另一方称为服务器端。
服务器端等待客户端连接请求的到来,这个过程称为监听过程。通常,服务器监听功能是在特定的IP地址和端口上进行。然后,客户端向服务器发出连接请求,服务器响应该请求则连接成功。否则,客户端的连接请求失败。C/S编程(www.cppentry.com)模型如图1-3所示。
|
| 图1-3 C/S编程(www.cppentry.com)模型 |
由于客户端连接服务器时需要使用服务器的IP地址和监听端口号才能完成连接,所以,服务器的IP地址和端口必须是固定的。在这里,向用户介绍部分协议所使用的端口号码。例如,HTTP协议(用于网页浏览服务)所使用的端口号为80,FTP协议(用于文件传输)所使用的端口号是21。
2. 网络编程(www.cppentry.com)基础
可以使用MFC中封装的套接字类来编写网络应用程序,也可以使用Windows API函数进行程序开发。其中MFC网络编程(www.cppentry.com)比较简单,使用起来也非常方便。但是,使用MFC相关类编程(www.cppentry.com)会使用户对网络通信中的基本原理缺乏清晰的认识。而使用Windows API函数则恰好相反,可以使用户熟悉网络通信的基本原理。在实际编程(www.cppentry.com)过程中,通信双方的连接以及数据通信均是基于Socket(套接字)进行的。
(1) Sockets套接字
用户在Windows中编写网络通信程序时,需要使用Windows Sockets(Windows套接字)。与Windows套接字相关的API函数称为Winsock函数。
在网络通信的双方,均有各自的套接字,并且该套接字与特定的IP地址和端口号相关联。通常,套接字主要有两种类型,分别是流式套接字(SOCK_STREAM)和数据报套接字(SOCK_DGRAM)。其中,流式套接字专门用于使用TCP协议通信的应用程序中,而数据报套接字则专门用于使用UDP协议进行通信的应用程序中。
(2) 网络字节顺序
网络字节顺序是指TCP/IP协议中规定的数据传输使用格式,与之相对的字节顺序是主机字节顺序。网络字节顺序表示首先将数据中最重要的字节进行存储。例如,当数据0x358457使用网络字节顺序进行存储时,该值在内存中的存放顺序将是0x35、0x84、0x57。因为通信数据可能会在不同的机器之间进行传输,所以通信数据必须以相同的格式进行整理。只有经过格式处理的通信数据,才能在不同的机器之间进行传输。
3. 网络通信基本流程
要通过互联网进行通信,用户至少需要一对套接字,其中一个运行于客户机端,我们称之为ClientSocket,另一个运行于服务器端,我们称之为ServerSocket。根据网络通信的特点,套接字可以分为两类:流式套接字和数据报套接字。套接字之间的连接过程可以分为三个步骤,分别是服务器监听、客户端请求和连接确认。具体说明如图1-4所示。
|
| 图1-4 套接字之间的连接过程 |