数据传输?
发送端的代码和效果图如下:
代码:
Private Sub Timer1_Timer()
h = Picture1.Height
w = Picture1.Width
nw = w / 49 '两个横坐标的距离
Picture1.Scale (0, h)-(w, 0) '绘图区域设置
Picture1.Cls
'开始画点
If n < 50 Then
For i = n To n
px(i) = i * nw
py(i) = Rnd * h
If Winsock1.State = 7 Then
Winsock1.SendData "a" & px(i) & "b" & py(i) & "c"
End If
Next i
n = n + 1
Else
For i = 0 To 48 '超出界面后平移
Picture1.Cls
py(i) = py(i + 1)
px(i) = i * nw
Next i
py(49) = Rnd * h '最新点放在最后
px(49) = w
If Winsock1.State = 7 Then
Winsock1.SendData "a" & px(i) & "b" & py(i) & "c"
End If
End If
'两点连线
If n >= 2 Then
Picture1.DrawWidth = 2 '线的粗细
Picture1.PSet (px(0), py(0)), vbRed '从第一个点开始画线
For i = 1 To n
Picture1.Line -(px(i - 1), py(i - 1)), vbRed '两点画线
Next i
End If
End Sub
接收端的代码和效果图如下:
代码;
Private Sub Winsock1_DataArrival(Index As Integer, ByVal bytesTotal As Long)
Dim s As String
Dim x(50) As Single
Dim y(50) As Single
h = Picture1(0).Height '绘图区域高度
w = Picture1(0).Width '绘图区域宽度
Picture1(0).Scale (0, h)-(w, 0) '绘图区域设置
Picture1(0).DrawWidth = 2
If m < 50 Then
For i = m To m
Winsock1(n).GetData s, vbString
x(i) = Mid(s, InStr(s, "a") + 1, InStr(s, "b") - InStr(s, "a") - 1)
y(i) = Mid(s, InStr(s, "b") + 1, InStr(s, "c") - InStr(s, "b") - 1)
Picture1(0).PSet (x(i), y(i)), vbRed
Next i
m = m + 1
Else
For i = 0 To 48
y(i) = y(i + 1)
x(i) = x(i)
Next i
Winsock1(n).GetData s, vbString
x(i) = Mid(s, InStr(s, "a") + 1, InStr(s, "b") - InStr(s, "a") - 1)
y(i) = Mid(s, InStr(s, "b") + 1, InStr(s, "c") - InStr(s, "b") - 1)
Picture1(0).PSet (x(i), y(i)), vbRed
x(49) = x(i)
y(49) = y(i)
End If
'两点连线
If m >= 2 Then
Picture1(0).DrawWidth = 2 '线的粗细
Picture1(0).PSet (x(0), y(0)), vbRed '从第一个点开始画线
For i = 1 To m
Picture1(0).Line -(x(i - 1), y(i - 1)), vbRed '两点画线
Next i
End If
End Sub
1、为什么接收到的数据超过50个点后,新的数据都聚集在右边,不会移动啊?
2、为什么每个点都跟第一个点相连,而不是跟发送端一样啊?
[解决办法]
Picture1(0).PSet (x(0), y(0)), vbRed '从第一个点开始画线
For i = 1 To m
Picture1(0).Line -(x(i - 1), y(i - 1)), vbRed '两点画线
============
这两句, 估计是你Pset的时候把"当前点"给设置成(0,0)了, 你可以把Pset这句注释掉再看看是否这样子.
BTW,你后面这个图估计在朝鲜会蛮受欢迎的
[解决办法]
楼主这个是线段的起点没有修改的原因所致,建议楼主使用Line方法绘制曲线,把:
Picture1(0).PSet (x(i), y(i)), vbRed
修改为
Picture1(0).line(x(i-1),y(i-1))-(x(i),y(i)),vbRed
[解决办法]
接受端的数组 x()、y() 都是局部变量,不能保存历史数据!
发送端的数组 px()、py() 应该是模块级变量吧。
[解决办法]