📄 nbdgrm.frm
字号:
' the first thing to do is to add the Netbios Name to the LANAs
' selected (either all or the single LANA selected).
'
Private Sub cmdSendRecv_Click()
Dim dwRet As Long
cmdSendRecv.Enabled = False
If bOneLana = True Then
If bUniqueName = True Then
AddName dwOneLana, txtLocalName.Text, dwNum(0)
Else
AddGroupName dwOneLana, txtLocalName.Text, dwNum(0)
End If
Else
For i = 0 To lenum.length - 1
If bUniqueName = True Then
AddName lenum.lana(i), txtLocalName, dwNum(i)
Else
AddGroupName lenum.lana(i), txtLocalName, dwNum(i)
End If
Next
End If
If bSender = True Then 'as a sender
If bBroadcast = True Then 'broadcast
If bOneLana = True Then
For j = 0 To dwNumDatagrams - 1
szMessage = "Test datagram No. " & j
lstrcpyn VarPtr(byteMessage), szMessage, Len(szMessage) + 1
dwRet = DatagramSendBC(dwOneLana, dwNum(0), VarPtr(byteMessage), Len(szMessage) + 1)
If dwRet <> NRC_GOODRET Then
MsgBox "DatagramSendBC failed with " & dwRet & " on Lana " & dwOneLana
'Exit Sub
Else
Sleep dwDelay
End If
Next
Else 'broadcast the message on every LANA
For j = 0 To dwNumDatagrams - 1
For i = 0 To lenum.length - 1
szMessage = "Test datagram No. " & j
lstrcpyn VarPtr(byteMessage), szMessage, Len(szMessage) + 1
dwRet = DatagramSendBC(lenum.lana(i), dwNum(i), VarPtr(byteMessage), Len(szMessage) + 1)
If dwRet <> NRC_GOODRET Then
MsgBox "DatagramSendBC failed with " & dwRet & " on Lana " & lenum.lana(i)
'Exit Sub
Else
Sleep dwDelay
End If
Next
Next
End If
Else 'unicast
If bOneLana = True Then
For j = 0 To dwNumDatagrams - 1
szMessage = "Test datagram No. " & j
lstrcpyn VarPtr(byteMessage), szMessage, Len(szMessage) + 1
dwRet = DatagramSend(dwOneLana, dwNum(0), txtRecipient.Text, VarPtr(byteMessage), Len(szMessage) + 1)
If dwRet <> NRC_GOODRET Then
MsgBox "DatagramSend failed with " & dwRet & " on Lana " & dwOneLana
'Exit Sub
Else
Sleep dwDelay
End If
Next
Else
For j = 0 To dwNumDatagrams - 1
For i = 0 To lenum.length - 1
szMessage = "Test datagram No. " & j
lstrcpyn VarPtr(byteMessage), szMessage, Len(szMessage) + 1
dwRet = DatagramSend(lenum.lana(i), dwNum(i), txtRecipient.Text, VarPtr(byteMessage), Len(szMessage) + 1)
If dwRet <> NRC_GOODRET Then
MsgBox "DatagramSend failed with " & dwRet & " on Lana " & lenum.lana(i)
'Exit Sub
Else
Sleep dwDelay
End If
Next
Next
End If
End If
Else 'as a receiver''''''''''''''''''''''''''''''''''''''''''''''''
For i = 0 To lenum.length - 1
eventRecv(i) = CreateEvent(0, 1, 0, vbNullString)
Next
If bBroadcast = True Then 'start of broadcast
If bOneLana = True Then
'post synchronous broadcast recv on the LANA specified
For j = 0 To dwNumDatagrams - 1
dwRet = DatagramRecvBC(ncbRecv(0), dwOneLana, dwNum(0), VarPtr(byteRecvMessage(0)), MAX_DATAGRAM_SIZE, 0)
If dwRet <> NRC_GOODRET Then
MsgBox "DatagramRecvBC failed with " & dwRet & " on LANA " & dwOneLana
Exit Sub
Else
Dim tempMessageStr As String
Dim tempSenderStr As String
tempMessageStr = String(512, 0)
tempSenderStr = String(512, 0)
FormatNetbiosName ncbRecv(0).ncb_callname, tempSenderStr
lstrcpy tempMessageStr, VarPtr(byteRecvMessage(0))
tempMessageStr = Left(tempMessageStr, InStr(tempMessageStr, Chr(0)) - 1)
recvList.AddItem "LANA " & ncbRecv(0).ncb_lana_num & " recv from: " & tempSenderStr & ": " & tempMessageStr
End If
Next
Else
'post asyncrhonous broadcast recv
For j = 0 To dwNumDatagrams - 1
For i = 0 To lenum.length - 1
dwBytesRead = MAX_DATAGRAM_SIZE
dwRet = DatagramRecvBC(ncbRecv(i), lenum.lana(i), dwNum(i), VarPtr(byteRecvMessage(i)), MAX_DATAGRAM_SIZE, eventRecv(i))
If dwRet <> NRC_GOODRET Then
MsgBox "DatagramRecvBC failed with " & dwRet & " on LANA " & dwOneLana
Exit Sub
End If
Next
dwRet = WaitForMultipleObjects(lenum.length, eventRecv(0), 0, INFINITE)
If dwRet = WAIT_FAILED Then
MsgBox "WaitForMultipleObjects failed"
Exit Sub
End If
For i = 0 To lenum.length - 1
If ncbRecv(i).ncb_cmd_cplt = NRC_PENDING Then
Cancel ncbRecv(i)
Else
tempMessageStr = String(512, 0)
tempSenderStr = String(512, 0)
FormatNetbiosName ncbRecv(i).ncb_callname, tempSenderStr
lstrcpy tempMessageStr, VarPtr(byteRecvMessage(i))
tempMessageStr = Left(tempMessageStr, InStr(tempMessageStr, Chr(0)) - 1)
recvList.AddItem "LANA " & ncbRecv(i).ncb_lana_num & " recv from: " & tempSenderStr & ": " & tempMessageStr
ResetEvent eventRecv(i)
End If
Next
Next
End If
Else 'unicast recv
If bOneLana = True Then
For j = 0 To dwNumDatagrams - 1
If bRecvAny = True Then
dwRet = DatagramRecv(ncbRecv(0), dwOneLana, &HFF, VarPtr(byteRecvMessage(0)), MAX_DATAGRAM_SIZE, 0)
If dwRet <> NRC_GOODRET Then
MsgBox "DatagramRecv failed with " & dwRet & " on LANA " & dwOneLana
Exit Sub
End If
Else
dwRet = DatagramRecv(ncbRecv(0), dwOneLana, dwNum(0), VarPtr(byteRecvMessage(0)), MAX_DATAGRAM_SIZE, 0)
If dwRet <> NRC_GOODRET Then
MsgBox "DatagramRecv failed with " & dwRet & " on LANA " & dwOneLana
Exit Sub
End If
End If
tempMessageStr = String(512, 0)
tempSenderStr = String(512, 0)
FormatNetbiosName ncbRecv(0).ncb_callname, tempSenderStr
lstrcpy tempMessageStr, VarPtr(byteRecvMessage(0))
tempMessageStr = Left(tempMessageStr, InStr(tempMessageStr, Chr(0)) - 1)
recvList.AddItem "LANA " & ncbRecv(0).ncb_lana_num & " recv from: " & tempSenderStr & ": " & tempMessageStr
Next
Else
'post asynchronous recv on each lana
For j = 0 To dwNumDatagrams - 1
For i = 0 To lenum.length - 1
If bRecvAny = True Then
dwRet = DatagramRecv(ncbRecv(i), lenum.lana(i), &HFF, VarPtr(byteRecvMessage(i)), MAX_DATAGRAM_SIZE, eventRecv(i))
If dwRet <> NRC_GOODRET Then
MsgBox "DatagramRecv failed with " & dwRet & " on LANA " & dwOneLana
Exit Sub
End If
Else
dwRet = DatagramRecv(ncbRecv(i), lenum.lana(i), dwNum(i), VarPtr(byteRecvMessage(i)), MAX_DATAGRAM_SIZE, eventRecv(i))
If dwRet <> NRC_GOODRET Then
MsgBox "DatagramRecv failed with " & dwRet & " on LANA " & dwOneLana
Exit Sub
End If
End If
Next 'i
dwRet = WaitForMultipleObjects(lenum.length, eventRecv(0), 0, INFINITE)
If dwRet = WAIT_FAILED Then
MsgBox "WaitForMultipleObjects failed"
Exit Sub
End If
For i = 0 To lenum.length - 1
If ncbRecv(i).ncb_cmd_cplt = NRC_PENDING Then
Cancel ncbRecv(i)
Else
tempMessageStr = String(512, 0)
tempSenderStr = String(512, 0)
FormatNetbiosName ncbRecv(i).ncb_callname, tempSenderStr
lstrcpy tempMessageStr, VarPtr(byteRecvMessage(i))
tempMessageStr = Left(tempMessageStr, InStr(tempMessageStr, Chr(0)) - 1)
recvList.AddItem "LANA " & ncbRecv(i).ncb_lana_num & " recv from: " & tempSenderStr & ": " & tempMessageStr
ResetEvent eventRecv(i)
End If
Next i
Next 'j
End If
End If 'end if bBroadcast recv
For i = 0 To lenum.length - 1
CloseHandle eventRecv(i)
Next
End If 'end of recevier
If bOneLana = True Then
DelName dwOneLana, txtLocalName.Text
Else
For i = 0 To lenum.length - 1
DelName lenum.lana(i), txtLocalName.Text
Next
End If
MsgBox "Done this round of send/recvs. "
cmdSendRecv.Enabled = True
End Sub
'
' Subroutine: Form_Load
'
' Description:
' First enumerate all LANAs and then reset all LANAs.
'
Private Sub Form_Load()
bOneLana = False
chkOneLana.Value = 0
dwOneLana = 0
bBroadcast = False
bSender = False
bUniqueName = True
bRecvAny = False
dwNumDatagrams = 5
dwDelay = 0
cmdSendRecv.Caption = "Recv"
dwErr = LanaEnum(lenum)
If dwErr <> NRC_GOODRET Then
MsgBox "LanaEnum failed: " & dwErr
Exit Sub
End If
For i = 0 To lenum.length - 1
ListLana.AddItem lenum.lana(i)
Next i
dwErr = ResetAll(lenum, MAX_SESSIONS, MAX_NAMES, False)
If dwErr <> NRC_GOODRET Then
MsgBox "ResetAll failed: " & dwErr
Exit Sub
End If
End Sub
'
' Subroutine: optBroadcast_Click
'
' Description:
' This routine sets the flag for using broadcast datagrams.
'
Private Sub optBroadcast_Click()
bBroadcast = True
End Sub
'
' Subroutine: optDirect_Click
'
' Description:
' This routine sets the flag for directed datagrams (i.e. not
' broadcasts).
'
Private Sub optDirect_Click()
bBroadcast = False
End Sub
'
' Subroutine: optReceiver_Click
'
' Description:
' This routine sets the receiver flag. That is, we're not sending
' datagrams.
'
Private Sub optReceiver_Click()
bSender = False
cmdSendRecv.Caption = "Recv"
End Sub
'
' Subroutine: optSender_Click
'
' Description:
' This routine sends the sender flag. That is, we're not receiving
' datagrams.
'
Private Sub optSender_Click()
bSender = True
cmdSendRecv.Caption = "Send"
End Sub
'
' Subroutine: txtDelay_Change
'
' Description:
' This routine changes the delay in milliseconds between sends.
'
Private Sub txtDelay_Change()
dwDelay = CLng(txtDelay.Text)
End Sub
'
' Subroutine: txtNumDatagram_Change
'
' Description:
' This routine changes the number of datagrams to either send
' or receive when the user hits the "Send/Recv" button.
'
Private Sub txtNumDatagram_Change()
dwNumDatagrams = CLng(txtNumDatagram.Text)
End Sub
'
' Subroutine: txtOneLana_Change
'
' Description:
' This routine changes the LANA number to operate on when
' the specific LANA box is checked.
'
Private Sub txtOneLana_Change()
dwOneLana = CLng(txtOneLana.Text)
End Sub
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -