在发送的语句后面加一条Doevents
解决方案 »
- 学了几年的VB始终敲不出质量好的代码,问题出在哪?
- 这个启动、退出事件出现问题了,进来看看咋回事?
- 程序发布后部分电脑不能使用(回答速给50分)
- 如何下载MMS或Rstp协议的文件?
- 请高人指教:用VB如何去掉数据库中重复的字段,只显示一个呢?
- 在VB中如何用系统数据源实现VF与SQL的连接
- 二次开发与SDK(在线等待)
- command问题?
- 简单的问题*********如何用最简便的方法从这样的字符串中获取文件名称??
- 怎样把我编写的软件加到右键中去!急!!
- 我怎么可以把一个文本文件保存到程序里,或怎么在程序里保存一个字符串数组。
- VB的好多好多问题,请高手赐教,关于winsock的和除错的,谢谢. 分数多多。第 1 贴!
由于在for循环中senddata,发送的太快了,所以接受方全部一次接受,这还有可能造成数据丢失。
strdata = CStr(yourcard(i))
wsk(0).SendData strdata
Next i
这不是一个个发送,这个就是将数组中的内容一次全部发送出去!
'发送
Dim sdata(16) As Integer
For i = 1 To 16
sdata(i) = i
Winsock1.SendData sdata(i)
Next i
'接收.
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim vta As Integer
Winsock1.GetData vta, vbInteger
Text1.Text = Text1.Text & vta
End Sub
结果按第一次发送,text1.text显示1
第二次.text1.text变为12
第三次.text1.text变为123
第四次.text1.text变为1234
第五次.text1.text变为12345........
..........
第16次.text1.text变为12345678910111213141516
第17次.text1.text变为123456789101112131415161怎么每次只收到一个数字.每次递增.
靠,真烦.
改成Text1.Text=vta
不就ok了?Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim vta As Integer
Winsock1.GetData vta, vbInteger
Text1.Text = Text1.Text & vta
End Sub
添加Timer1,Interval=125SUB Timer1_Timer()
i=i+1
if i>16 then Timer1.Enable=False
strdata = CStr(yourcard(i))
wsk(0).SendData strdata
doevents
END SUB'接收的不变
Dim szSend as string
For i = 1 To 16
szSend=szSend & i & ","
Next i
szSend=left(szSend,len(szSend)-1)
Winsock1.SendData szSend
'接收
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim vta As Integer,szRecv as varaint
Dim i&
Winsock1.GetData vta, vbInteger
szRecv=split(vta,",")
for i=0 to ubound(szRecv)
Text1.Text = Text1.Text & szRecv(i) & vbTab
next i
End Sub
楼上的方法是可取的,不过有可能定位不精确,即不知道这是第几个发的数据.
我用过一个方法,你可以考虑考虑
发的时候发一个数据,然后接收端收到后返回,
发送端接收返回的数据后,判断是否为原来发送的,如果是就再发下一个,实际用下来基本没什么大的延时,当然是在MODEM连接下,发送的数据量也不大.
strdata = CStr(yourcard(i))
wsk(0).SendData strdata & chr(10)
Next i
每发送一条数据在后面加个回车符或换行符。
我想你如果试试这个方法一定可行的。实际上也引起不了多少延时,只是要处理好数组(我用的动态数组)的下标越界情况,以免出现下标越界情况。在实际运行中如果服务器端不是很老的机的话根本没多少影响的。