Msrec为MSCOM控件,现在要用WINSOCKET控件,属性protocol为TCP ,代码如何修改?
Private Sub Msrec_OnComm()
On Error GoTo Sendfast
Select Case Msrec.CommEvent
Case comEvReceive '只要收到一个字节就触发此事件
DC = 0
'Msrec.RThreshold = 0 '停止触发此事件以防止数据处理过程被意外中断
If (IDf = False) And (IDbg = 0) Then '还未建立连接。
Inst = Msrec.Input '读入一个字节到临时变量
Ins(0) = Inst(0) '转存为字节型变量
InsD = Ins(0) '赋值给整型变量,此时数据为十进制---如:收到数据为A0,此变量为160。 If InsD = 2 Then '判断是否为起始符号
BakD(0) = &H10 '发送确认信号,以驱动发送方发送有效数据
Msrec.Output = BakD
'Text9.Text = Timer()
'FrmMe.Tmt.Enabled = True '暂用代码
IDbg = 1
ElseIf InsD <> 2 Then
Msrec.InBufferCount = 0 '如果缓存中有数据但由于意外断开,将清零以重新接收
End If '报文开始
End If '判断连接
'TmL.Enabled = True
If (Msrec.InBufferCount > 10) And (IDf = False) And (IDbg = 1) Then IDf = True '说明一次收到很多数据,已经建立连接,有大量数据送至 Do While (Msrec.InBufferCount > 0) And (IDf = True)
'If IDbg = 1 Then Text9.Text = Timer()
Inst = Msrec.Input '读入一个字节到临时变量
Ins(0) = Inst(0) '转存为字节型变量
InsD = Ins(0) '赋值给整型变量,此时数据为十进制---如:收到数据为A0,此变量为160。
Private Sub Msrec_OnComm()
On Error GoTo Sendfast
Select Case Msrec.CommEvent
Case comEvReceive '只要收到一个字节就触发此事件
DC = 0
'Msrec.RThreshold = 0 '停止触发此事件以防止数据处理过程被意外中断
If (IDf = False) And (IDbg = 0) Then '还未建立连接。
Inst = Msrec.Input '读入一个字节到临时变量
Ins(0) = Inst(0) '转存为字节型变量
InsD = Ins(0) '赋值给整型变量,此时数据为十进制---如:收到数据为A0,此变量为160。 If InsD = 2 Then '判断是否为起始符号
BakD(0) = &H10 '发送确认信号,以驱动发送方发送有效数据
Msrec.Output = BakD
'Text9.Text = Timer()
'FrmMe.Tmt.Enabled = True '暂用代码
IDbg = 1
ElseIf InsD <> 2 Then
Msrec.InBufferCount = 0 '如果缓存中有数据但由于意外断开,将清零以重新接收
End If '报文开始
End If '判断连接
'TmL.Enabled = True
If (Msrec.InBufferCount > 10) And (IDf = False) And (IDbg = 1) Then IDf = True '说明一次收到很多数据,已经建立连接,有大量数据送至 Do While (Msrec.InBufferCount > 0) And (IDf = True)
'If IDbg = 1 Then Text9.Text = Timer()
Inst = Msrec.Input '读入一个字节到临时变量
Ins(0) = Inst(0) '转存为字节型变量
InsD = Ins(0) '赋值给整型变量,此时数据为十进制---如:收到数据为A0,此变量为160。
上面的代码是整个过滤代码的一小段,我现在已经使用WINSOCKET控件了,过滤代码是不是应该放在DataArrival事件中?
如果是的话,为什么数据没显示?
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
dim Num as byte
Winsock1.GetData Num
text1.text=Num
====过滤程序================
知道的请说下,麻烦大家了
举例:
Winsock2.RemoteHost = "127.0.0.1"
Winsock2.RemotePort = 4000
Winsock2.Connect
'Winsock2.SendData ("nihao")服务器端设置端口(LocalPort)-侦听(Listen)-接受连接(accept)-发送/接受-关闭连接
举例:
Winsock3.LocalPort = 4000
Winsock3.Listen
Private Sub Winsock3_ConnectionRequest(ByVal requestID As Long)
Winsock3.Accept (requestID)
End Sub
其中发送,连接的时候还要分析下 winsock.state 去
常数 值 描述
sckClosed 0 缺省的。关闭
sckOpen 1 打开
sckListening 2 侦听
sckConnectionPending 3 连接挂起
sckResolvingHost 4 识别主机
sckHostResolved 5 已识别主机
sckConnecting 6 正在连接
sckConnected 7 已连接
sckClosing 8 同级人员正在关闭连接
sckError 9 错误
==========================服务端===============================
Private Sub Form_Load()
Winsock1.Protocol = sckTCPProtocol
Winsock1.LocalPort = 19878
Winsock1.Listen
End Sub Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
Winsock1.Accept requestID
Winsock1.SendData "OK"
End Sub Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
dim str as string
Winsock1.GetData str
If str = "Q" Then
Winsock1.Close
Winsock1.LocalPort = 19878
Winsock1.Listen
End If
End Sub ===========================客户端===============================
Private Sub Command1_Click()
Command1.Enabled = False
Command2.Enabled = True
If Text1.Text = "" Then
MsgBox "IP不能为空"
Else
Winsock1.Connect Text1.Text, 19878
End If
If Winsock1.State = sckConnecting Then Label2.Caption = "正连接"
If Winsock1.State = sckClosed Then Label2.Caption = "失 败"
End Sub Private Sub Command2_Click()
Command1.Enabled = True
Command2.Enabled = False
If Winsock1.State = sckClosed Then
MsgBox "未连接"
ElseIf Winsock1.State = sckConnected Then
Label2.Caption = "已断开"
Winsock1.SendData "Q"
Timer1.Enabled = True
End If
End Sub Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Winsock1.GetData str
If str = "OK" Then
Label2.Caption = "已连接"
End If
End Sub
dim str as string
Winsock1.GetData str
If str = "Q" Then
Winsock1.Close
Winsock1.LocalPort = 19878
Winsock1.Listen
End If
End Sub
str 是接受到的字符串,这里进行处理
客户端:
Private Sub Command1_Click()
Command1.Enabled = False
Command2.Enabled = True
If ipclient.Text = "" Then
MsgBox "IP不能为空"
Else
Winsockclient.Connect ipclient.Text, 1001
End If
If Winsockclient.State = sckConnecting Then Label3.Caption = "正连接"
If Winsockclient.State = sckClosed Then
Label3.Caption = "失 败"
Command1.Enabled = True
Command2.Enabled = False
End If
End SubPrivate Sub Command2_Click()
Dim x As String
If Winsockclient.State = sckClosed Then
MsgBox "未连接"
ElseIf Winsockclient.State = sckConnected Then
Label3.Caption = "已断开"
Winsockclient.Close
Command1.Enabled = True
Command2.Enabled = False
End If
End SubPrivate Sub Form_Load()
Winsockclient.RemotePort = 1001
Label3.Caption = "未连接"
Command1.Enabled = True
Command2.Enabled = False
End SubPrivate Sub textsend_Change()
Winsockclient.SendData textsend.Text
End SubPrivate Sub Winsockclient_Close()
Winsockclient.Close
MsgBox "与服务器断开连接"
Command1.Enabled = True
Command2.Enabled = False
Label3.Caption = "已断开"
End Sub
Private Sub Winsockclient_Connect()
Command1.Enabled = False
Command2.Enabled = True
End SubPrivate Sub Winsockclient_DataArrival(ByVal bytesTotal As Long)
Dim str As String
Winsockclient.GetData str
If str = "ok" Then
Label3.Caption = "已连接"
End If
Textget.Text = str
End Sub