作者简介:蒋力(1985-),男,东莞市电子科技学校讲师,硕士。研究方向:计算机网络。
摘要:该文简要介绍Winsock控件的基础知识,使用VB编写实现远程计算机通信的程序。通过程序的运行,帮助学生学习计算机网络中本机IP地址、回环地址、广播地址以及端口号的概念。
关键词:Winsock;IP地址 ;端口号
中图分类号:G712文献标识码:A文章编号:1005-1422(2014)06-0146-02在计算机网络学习中, OSI参考模型的抽象七层结构晦涩难懂。本校网络班学生学习《计算机网络基础》之前,已有VB编程基础设计做基础,具有一定的编程能力和理解能力。因此本文通过在Visual Basic中利用Winsock控件进行网络通讯程序的编程,使学生能够更好地理解IP地址和端口号的概念。
一、Winsock控件基础
Winsock控件在程序设计时,是可见的。在程序执行过程中,虽然隐藏在执行的窗体之中,但是它可以为有关网络通讯方面的程序设计提供依据。该控件的使用,使得调用TCP或UDP网络服务极为便利。因此,在编写有关应用程序时,只需简单了解TCP通讯协议和低级的Winsock API调用方式,学生学习时简单易懂。
1.TCP协议
TCP协议的全名为“传输控制协议(transfer control protocol)”,这是目前在互联网上使用的主要协议,例如http,ftp,SMTP等,都是基于这个面向连接的协议。因此,当使用TCP协议连接两个网络上的设备时,将可以在它们之间交换希望交换的数据。如果正在建立主机端应用程序时,必须指定本机和本机(执行应用程序所在的计算机)所用的连接端口号,接着将Winsock控件设置为“监听(listen)”,即可等候远程客户端进行调用与连接。因此,当主机端接收到客户端调用并且要求连接的信息时,将会触发“要求连接()”的事件,接着进行标准“允许”或是“拒绝”的程序。
一旦主机端与客户端连接完成之后,将可以开始使用“传送数据(senddata)”方法,将数据传送给对方同时,在数据传达对方的计算机时,将会触发对方计算的“接收数(dataarrival)”事件。此时,可以使用“取得数据(getdata)”方法,来去出这些接收到的数据。
2.Winsock控件
(1)该次编程中涉及的Winsock的属性,如下:LocalHostName属性(本地主机名称);LocalIP属性(本地主机IP);LocalPort属性(本地主机端口);RemoteHost属性(远程主机名称);RemotePort属性(远程主机端口);Protocol属性(Winsock控件)(协议【TCP、UDP】);Name属性(控件的名称);State属性,返回WinSock控件当前的状态。
(2)该次编程需用到的三个方法:Bind,SendData和GetData。
Bind 方法 ,指定用于 TCP 连接的 LocalPort 和 LocalIP。
SendData方法,当连接建立后,要发送数据就可以调用SendData方法,该方法只有一个参数,就是要发送的数据。
GetData方法,当本地计算机接收到远程计算机的数据时,数据存放在缓冲区中,要从缓冲区中取出数据,可以使用GetData方法。
(3)DataArrival事件当建立连接后,接受到了新数据就会触发这个事件。注意:如果在接受到新数据前,缓冲区中非空,就不会触发这个事件。
二、程序的主要设计和代码
程序的主界面是一个窗体,包含四个文本框控件、两个命令按钮和一个LIST控件。四个文本框控件分别用来做监听的端口号、远端的IP地址和端口号、发送的内容。两个命令按钮,分别做监听、发送命令。LIST控件用来显示发送和接受的内容。
1.在窗体中添加一个Winsock控件,将其Protocol属性改为1-sckUDPprotocol。
2.将“发送”按钮命名为command1, “监听”按钮命名为command2,监听端口下的text文本框命名为text1,两部电脑图标的Winsock控件命名为wc1,双击“监听”按钮输入如下程序,
If wc1.State = 1 Or wc1.State = 2 Then
wc1.Close
Command1.Enabled = False
End If
wc1.Bind CInt(Text1.Text)
Command1.Enabled = true
将“IP”右边的文本框命名为Text3, text属性改为你的电脑的IP, “端口”右边的文本框命名为Text4,双击“发送”按钮,“要发送的数据”下面的文本框命名为Text5,输入如下代码:
Dim ff As String
ff = Text4.Text
wc1.RemoteHost = Text2.Text
wc1.RemotePort = Text3.Text
wc1.SendData ff
3.双击两部电脑图标,从代码窗口上部选择DataArrival事件,并输入如下代码:
Dim kk As String
wc1.GetData kk
List1.AddItem kk + “发送者IP:” + wc1.RemoteHostIP,0
开始运行程序。
三、Winsock程序测试
1.使用回环地址
回环地址127.0.0.1,被称为本地回环地址(Loop back address)。它代表设备的本地虚拟接口,在windows操作系统中也有相似的定义,不安装网卡前可以ping通本地回环地址。该程序可以用回环地址自己给自己发信息。
2.对方IP地址通信
相互之间发信息,需用端口号和IP。通过与对方通信,来帮助学生理解传输层中端口号的概念。案例:同学A监听端口号9090,同学B监听8080,已知A的IP地址是192.168.1.103,B的IP地址是192.168.1.102,那么A给B发信息,就需要B监听8080端口,A使用IP地址192.168.1.102发送信息。如果B给A发信息,就需要A监听9090端口,B使用IP地址192.168.1.103.
3.广播地址通信
广播地址是专门用于同时向网络中所有工作站发送信息的地址。在使用TCP/IP 协议的网络中,主机标识段host ID 为全1 的IP 地址为广播地址,广播分组传送给host ID段所涉及的所有计算机。
在实际教学中,机房IP地址段192.168.1.0/24的广播地址为192.168.1.255,发送端口为8080,所有同学监听8080端口,发送的信息全部同学可以同时接收。
四、总结
通过此次实验,不仅锻炼了学生的VB编程能力,同时用自己编写的程序来互相发送信息,让学生体验网络编程带来的成就感.帮助学生理解计算机网络中传输层的端口号和网络层IP地址的相关概念,同时了解了计算机网络中回环地址,本机地址和广播地址的相关概念,提高了学生学习计算机网络的兴趣.
参考文献:
[1]Andrew S.Tanenbau计算机网络第四版[M].北京:清华大学出版社,2005.
[2]范剑波.Visual Basic网络程序设计[M].北京:科学出版社,2003.
[3]鲁斌,李莉. 网络程序设计与开发 [M].北京:清华大学出版社,2010.
责任编辑朱守锂