请问如何用winsock控件发送自定义类型数据?请问如何用winsock控件发送自定义类型数据?

Public Type Data
aa as string
bb as long
End Type
Dim sentData as Data 
我直接用
winsock1..SendData sentData  会报错
用winsock1..SendData sentData.aa就没事但只能发送aa 
请问有什么办法把sentdata一次性发过去 
我用的是VB6sp6

解决方案 »

  1.   

    首先,你最好把可变长度的string类型变为固定长度的string类型
    比如
    Public Type Data
    aa as string*255
    bb as long
    End Type
    然后用copymemory把结构的内容复制到字节数组
    Dim sentData as Data 
    dim b() as byte
    redim b(lenb(sentData)-1)
    copymemory b(0),sentData,lenb(sentData)
    winsock1.senddata b接收到字节数组后再复原就可以了
    winsock1.getdata b
    copymemory sentData,b(0),lenb(sentData)
      

  2.   

    bluesky23(乐天_正在开发右半脑^_^) 
    WINSOCK 只能发送字符串。不要信口开河。
      

  3.   

    超级绿豆的总体思路是正确的。只是,接收的代码没有这么简单。
    winsock1.getdata b
    copymemory sentData,b(0),lenb(sentData)
    没人能保证这个接收到的b中的数据是一个完整的Type Data结构。象楼主的这种传输,一般是要定义一个数据包的传输协议的,否则是无法正确处理接收到的数据。
      

  4.   

    supergreenbean(超级绿豆(MS MVP - VB) - 春天,什么都发~了
     的答案是最佳的
      

  5.   

    jadeluo(秀峰) ,讲得没错。一般是要定义一个数据包的传输协议的,否则是无法正确处理接收到的数据。
      

  6.   

    To piegon:
    还真没有特别简单的处理接收到的数据的代码。在数据通讯的编程中,发送方的代码比较好写,而接收方的代码就难写多了。切不可认为某次DataArrival事件中用GetData接收到的正好是你所需要的那些数据,一个不多,一个不少。如果你这样认为的话,你的程序将来会出现莫名其妙的错误的。
      

  7.   

    你通过setsockopt函数来设置一下winsock的禁用Nagle算法,看一下行波
      

  8.   

    楼主 我也遇到同样的问题
    Type TestStoreTypeDefine1
        DataT                 As Single          '   时间
        Data(7)               As Single          '   数据
    End TypeType TestStoreTypeDefine
        TestData(4) As TestStoreTypeDefine1
    End TypePublic TestStoreData() As TestStoreTypeDefine
    这是我自定义的结构体 我想一次就发送一个TestStoreData 请问你的问题解决了没 麻烦大家给出出主意啊