使用Winsock,服务器端收到客户端的数据包后,发确认码给客户端,客户端发送新的数据包。问题:服务器端有时不规则重复收到客户端所发来的数据,部分代码如下,请问诸位是什么原因?Private Sub WinRev_DataArrival(Index As Integer, ByVal bytesTotal As Long)
Dim buffer1() As Byte, strin As String, buffer As String
WinRev(Index).GetData buffer1, vbArray + vbByte, bytesTotal
Dim nn, si As Integer
Dim strin2 As String
strin2=""
For si = 0 To bytesTotal
strin2 = strin2 & buffer1(si) & "|" 'strin2 为收到的数据,有时会不规格收到重复的数据。
Next sendstr = "&h4,&h5,&h4" '收到CLIENT发来的数据后,发送确认码
sData = Split(sendstr, ",")
ReDim buffsend(3)
For si2 = 0 To 2
buffsend(si2) = sData(si2)
Next
WinRev(Index).SendData buffsend '发送确认码 多谢诸位!请帮忙给予修正。
Dim buffer1() As Byte, strin As String, buffer As String
WinRev(Index).GetData buffer1, vbArray + vbByte, bytesTotal
Dim nn, si As Integer
Dim strin2 As String
strin2=""
For si = 0 To bytesTotal
strin2 = strin2 & buffer1(si) & "|" 'strin2 为收到的数据,有时会不规格收到重复的数据。
Next sendstr = "&h4,&h5,&h4" '收到CLIENT发来的数据后,发送确认码
sData = Split(sendstr, ",")
ReDim buffsend(3)
For si2 = 0 To 2
buffsend(si2) = sData(si2)
Next
WinRev(Index).SendData buffsend '发送确认码 多谢诸位!请帮忙给予修正。
解决方案 »
- msflexgrid问题:当向窗体添加时报错---该部件的许可证信息没有找到....
- 求教:怎样调用绘制数学曲线的API函数
- 在控件中如何实现对窗体的操作?
- 请教,打印预览的缩放是如何实现的?怎样对picturebox中所有内容都按比例改变?
- 谁有把COMBOBOX和LISTVIEW结合起来的控件?高分求购!或者哪位大哥帮我打一个新的OCX,把这2个控件结合起来,急需!
- 在程序里调用.txt文件的api例子,在线等!急!!
- 如何解决Date error event hit err:至少一个参数没有被指定值
- 急救vb6.0-db2(5.1版)
- help!help!还是问“如何判断某字段是否 允 许 为空?"还没解决啊
- 请问:有没有比MSCHART控件更好的用于以图形的方式显示数据的控件,如果有请提供谢谢
- 关于SPREAD7.0控件的使用
- VB怎样获得其它exe的文本框中的内容
流程如下:
客户端发请求数据给服务器端;
服务器端收到请求数据后,给客户端答复;
客户端收到服务器端的确认数据后,将数据发给服务器端;
服务器端收完后,再发收到确认码给客户端。
Dim strData$, strFileName$, temp$
Dim I%, lLenFile&
Dim bytBuffer() As Byte, buffsend()
ReDim bytBuffer(1 To bytesTotal&)
On Error GoTo rcvErrorHandler:
WinRev(Index).GetData bytBuffer, vbArray + vbByte, bytesTotal
strData = ""
'数据写入硬盘,每小时换一个文件名
temp = Split(Time, ":")(0)
temp = Date & "_" & temp
strFileName = App.Path & "\" & temp & ".szy"
Open strFileName For Binary As #f
lLenFile = LOF(f)
If lLenFile = 0 Then 'lLenFile=0表示是第一次打开文件
Put #f, 1, bytData
Else
Put #f, lLenFile + 1, bytData
End If
Close #f
'For I = 0 To bytesTotal
' strData = strData & bytBuffer(I) & "|" 'strData为收到的数据,有时会不规格收到重复的数据。
'Next
' sendstr = "&h4,&h5,&h4" '收到CLIENT发来的数据后,发送确认码
' sData = Split(sendstr, ",")
' ReDim buffsend(2)
' For I = 0 To 2
' buffsend(I) = sData(I)
' Next
On Error Resume Next '因为数据已保存,所以此时坚决发送确认码
ReDim buffsend(2)
buffsend = Array(&H4, &H5, &H4)
'发送确认码
'现在的问题是:
'1)如果此时网络阻塞,下面的确认发不出去(或延迟超过3秒发出怎么办)
'2)C端最好在每发一个包后PAUSE一下,或者包头有变化,才能避免数据报粘连;但你又没办法控制:))
WinRev(Index).SendData buffsend
Exit Sub
rcvErrorHandler:
'MsgBox Err.Description
'把错误写到一个文件
'........
'........
Err.Clear
End Sub
Dim strData$, strFileName$, temp$
Dim I%, lLenFile&
Dim bytBuffer() As Byte, buffsend()
On Error GoTo rcvErrorHandler:
ReDim bytBuffer(1 To bytesTotal&)
WinRev(Index).GetData bytBuffer, vbArray + vbByte, bytesTotal
'数据写入硬盘,每小时换一个文件名
temp = Split(Time, ":")(0)
temp = Date & "_" & temp
strFileName = App.Path & "\" & temp & ".szy"
Open strFileName For Binary As #f
lLenFile = LOF(f)
If lLenFile = 0 Then 'lLenFile=0表示是第一次打开文件
Put #f, 1, bytBuffer
Else
Put #f, lLenFile + 1, bytBuffer
End If
Close #f
On Error Resume Next '因为数据已保存,所以此时坚决发送确认码
ReDim buffsend(2)
buffsend = Array(&H4, &H5, &H4)
'发送确认码
'现在的问题是:
'1)如果此时网络阻塞,下面的确认发不出去(或延迟超过3秒发出怎么办)
'2)C端最好在每发一个包后PAUSE一下,或者包头有变化,才能避免数据报粘连;但你又没办法控制:))
WinRev(Index).SendData buffsend
Exit Sub
rcvErrorHandler:
'MsgBox Err.Description
'把错误写到一个文件
'........
'........
Err.Clear
End Sub