3.4.2 服务器运行结果
图3-5 服务器连接
经过客户端输入服务器的IP地址,若正常连接,服务器会提示连接成功。之后就可以进行双方的通信。
图3-6 服务器接收信息
与客户端一样,只要连接成功,双方就能实现正常通信。
4 实验结果分析
网络数据传输可以分为UDP(User Datagram Protocol,用户数据报协议)和TCP(Transmission Control Protocol,传输控制协议),这两种协议的差别在于他们的连接状态,TCP是一种有连接的协议,文件在传输时会先行建立连接,通过连接可确保文件传输的正确性;UDP是一种无连接的的协议,他在传输文件是不能确保传输端的文件能够正确无误的传送到接受端,所以当用户使用UDP协议时,通常要自己做接收确认工作。操作系统提供的Winsock控件可以提供以上两种传输功能。
服务器程序的实现过程是:
(1)服务器程序必须设置好LocalPort属性,作为侦听端口,该值为一个整数(只要是一个其它TCP/IP应用程序没有使用过的值即可)。
(2)使用Listen方法进入侦听状态,等待客户机程序的连接请求。
(3)客户机程序发出连接请求,使服务器程序产生ConnectionRequest事件,该事件得到一个参数requestID。
(4)服务器程序用Accept方法接受客户机程序的requestID请求。这样,服务器程序就可以用SendData方法发送数据了。Accept方法必须用上一步得到的requestID作为其参数。
(5)当服务器程序接收到数据时,产生DataArrival事件,参数BytesTotal包
含接收到的数据字节数。在该事件中,可以用GetData方法接收数据。 (6)如果接受到Close事件,则用Close方法关闭TCP/IP连接。
客户机程序的实现过程是:
(1) 客户程序设置Remotehost属性,以便指定运行服务器程序的主机名,该字符串可在“控制面板|网络|标识|计算机名”中查到。
(2) 设置RemotePort属性,以便指定服务器程序的侦听端口。
(3)使用Connect方法,向服务器提出连接请求。
(4)服务器接受客户机程序的请求,客户机程序产生Connect事件,就可以用SendData方法发送数据了。
(5)当客户机程序接收到数据时,产生DataArrival事件,参数BytesTotal包含接收到的数据字节数。在该事件中,可以用GetData方法接收数据。 (6)如果接受到Close事件,则用Close方法关闭连接。
在使用 WinSock 控件时,首先需要考虑使用什么协议。可以使用的协议包括 TCP 和 UDP。两种协议之间的重要区别在于它们的连接状态:TCP 协议控件是基于连接的协议,可以将它同电话系统相比。在开始数据传输之前,用户必须先建立连接。 UDP 协议是一种无连接协议,两台计算机之间的传输类似于传递邮件:消息从一台计算机发送到另一台计算机,但是两者之间没有明确的连接。另外,单次传输的最大数据量取决于具体的网络。
本应用程序使用 TCP 协议,那么首先必须决定应用程序是服务器还是客户端。如果要创建一个服务器端,那么应用程序需要“监听”指定的端口。当客户端提出连接请求时,服务器端能够接受请求并建立连接。在连接建立之后,客户端与服务器端可以自由地互相通讯。在使用 UDP 协议的时候,可以任意地改变 RemoteHost 和 RemotePort 属性,同时始终保持绑定在同一个 LocalPort 上。TCP 协议与此不同,在改变RemoteHost和 RemotePort 属性之前,必须先关闭连接。
5 实验体会
对基于socket的设计,任意的编程语言可以适用。由于通信专业所学编程语言比较少,再加上本人对C和C++语言编程了解的不多。因此,我选择了VB语言。 选择设计语言后,稍微复习了VB语言的一些知识,尽管这样,但我还是没有比较清楚的设计思路.因此,我还不断地查阅资料,学习别人的设计思路和方法,然后结合自己的想法将程序不断地完善.这样我的程序设计得以顺利地进行。
这次实验使我对书本上的知识有了更深的理解,特别是对于Winsocket的相关原理有了更深的了解,除此之外,我还对套接字、端口、IP地址之间的关系有了初步的理解, 在以后的实验中,我会更加对书上的代码进行研究,充分的理解其中的关键要素。