首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

数据传输?该怎么处理

2013-03-13 
数据传输?发送端的代码和效果图如下:代码:Private Sub Timer1_Timer()h Picture1.Heightw Picture1.Wi

数据传输?
发送端的代码和效果图如下:
代码:
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() 应该是模块级变量吧。
[解决办法]

引用:
引用:Picture1(0).PSet (x(0), y(0)), vbRed  '从第一个点开始画线
 For i = 1 To m
    Picture1(0).Line -(x(i - 1), y(i - 1)), vbRed '两点画线

============

这两句, 估计是你Pset的时候把"当前点"给设……


把Pset这句注释掉再运行看结果吧.
还有一个,可以使用一个API比较简单得直接将当前点和指定点联线: Lineto 
这个API不考虑当前点的坐标, 只管从当前点连一条线到指定点. 
所以一般都配合另外一个API: Movetoex一起使用, Movetoex的作用就是移动当前点到指定坐标.
[解决办法]
引用:
>引用:
>接受端的数组 x()、y() 都是局部变量,不能保存历史数据!
>发送端的数组 px()、py() 应该是模块级变量吧。
不是哦

别不信,调试可证。
每次 x()、y() 数组中除了 x(m)、y(m) 之外都是 0。
或者你在事件开始加一句 Picture1(0).Cls,就会发现每个周期的图形都仅仅是 Line (0,0)-(x(m),y(m)) 这么一条线段。

热点排行