当前位置:文档之家› 停等协议

停等协议

网络实验报告(二)

——停--等协议

一、实验目的:

1.利用VB模拟停--等协议。

2.了解协议内容并模拟传输过程,掌握停--等协议的实现方法。

二、实验环境:

硬件环境:P4 1.6G.128M SDRAM。

系统环境:Windows98操作系统。

开发环境:Microsoft Visual Basic 6.0 中文版。

模拟环境:点到点的面向链接的通信。

三、桢格式:

注:

帧头与帧尾均为字符串“DLE STX”。

对将要发送的数据使用split()函数,以空格为标志进行分割,把数据分成以单词为单位的字符串数组,每次读取一个字符串。

以帧头+空格+数据+空格+帧尾为顺序组帧。分帧时使用split()函数,以空格为标志,把数据帧分解成字符串数组,读出数据,完成组帧。

四、程序流程图:

五、编程原理及思路:

由于接收缓冲只能存放一个帧且接收端需要一定的处理时间。为了防止发送快于接收而导致数据丢失,限制发送端在发送一帧后必须停止发送,等待接收端发确认帧。而接收端在收到一个数据帧并发送网络层后,向发送端发一确认帧。仅当接收方确认正确接收后再继续发送下一帧。

六、程序源代码(VB):

注:此程序的接收端和发送端是同一个程序的不同运行模式。

frmMain.frm:

Private g_bConfirm As Boolean '发送一帧后设置为False,收到后设置为True Private Sub cmdReceiverListen_Click()

'检查错误

If Val(txtReceiverPort.Text) = 0 Then

MsgBox "Please Input Port Number!", vbInformation, "ERROR"

Exit Sub

End If

'开始监听

With sckReceiver

.LocalPort = Val(txtReceiverPort.Text)

.Listen

End With

'显示信息

ShowInfo "Listening at : " & sckReceiver.LocalIP & " Port : " & txtReceiverPort.Text

cmdReceiverListen.Enabled = False

End Sub

Private Sub ShowInfo(ByVal sInfo As String)

'显示信息到列表

lstInfo.AddItem (sInfo)

lstInfo.ListIndex = lstInfo.ListCount - 1

End Sub

Private Sub cmdSenderConnect_Click()

'连接

If cmdSenderConnect.Caption = "&Connect" Then

If txtSenderHostIP.Text = "" Or txtSenderPort.Text = "" Then

MsgBox "Invalid IP address/port number input.", vbCritical, "ERROR"

Exit Sub

End If

With sckSender

.RemoteHost = txtSenderHostIP.Text

.RemotePort = Val(txtSenderPort.Text)

.Connect

ShowInfo "Connect To : " & .RemoteHost & " Port : " & .RemotePort End With

cmdSenderConnect.Caption = "Dis&connect"

cmdSenderSend.Enabled = True

Else

ShowInfo "Termination Of Connection To : " & sckSender.RemoteHost & " Port : " & sckSender.RemotePort

sckSender.Close

cmdSenderConnect.Caption = "&Connect"

cmdSenderSend.Enabled = False

End If

End Sub

Private Sub cmdSenderSend_Click()

'发送文字

Dim vOut As Variant

Dim lLoop As Long

g_bConfirm = True

vOut = modFrame.ToFrame(txtSenderMessage.Text)

ShowInfo "Sending Message To : " & sckSender.RemoteHostIP & " With """ & txtSenderMessage.Text & """"

For lLoop = 0 To UBound(vOut)

'循环输出帧

While Not g_bConfirm

DoEvents '等待

Wend

'能够发送

g_bConfirm = False

Debug.Print vOut(lLoop)

Dim sOut As String

sOut = vOut(lLoop)

sckSender.SendData sOut

Next

End Sub

Private Sub Form_Load()

tabMain_Click

End Sub

Private Sub sckReceiver_ConnectionRequest(ByVal requestID As Long)

'得到连接请求

With sckReceiver

.Close

.Accept requestID

相关主题