热情软件屋

 

使用WINSOCK控件通讯,可否使用自定义类型数据包


编号:QA001751
建立日期: 1999年9月23日 最后修改日期:1999年9月23日
所属类别:

caodd:
    vb6.0
    win95
    两台机子使用WINSOCK控件通讯,不知可否使用自定义类型数据包?如果可以该怎样做? 我欲使用WINSOCK控件接发自定义类型的数据,如
     Type sendpack
     Flag As Byte
     connum As String
     weight1 As long
     weight2 as long
     End Type
    将上述定义放在MODULES中或使用WINSOCK的窗体中,定义STR1 为以上类型,使用
     Winsock1.senddata str1
    结果都出错,提示:
    “只有在公共对象模块中定义的公共用户定义类型可以被使用为类模块公共过程的参数或返回类型、或作为公共用户定义类型的字段
    这个错误的原因与解决方法如下:
    试图使用一个公共用户定义类型作为类模块公共过程的参数或返回类型、或作为公共用户定义类型的字段。只有在公共对象模块中定义的公共用户定义类型才可以这样使用。”
    虽有如上提示,可是我并不十分明白,也不知如何解决,请指教,万分感谢!

回答:

    SendData只处理字符串和字节数组,所以其他类型应该转换为这两种类型。对于自定义类型只能转换为字节数组。可以利用CopyMemory函数:
    Declare Sub CopyMemory Lib "KERNEL32" Alias "RtlMoveMemory" ( _
     hpvDest As Any, hpvSource As Any, ByVal cbCop
    先定义一个字节数组:
    Dim b() As Byte, Str1 As sendpack
    发送时:
    ReDim B(Len(Str1)) As Byte
    CopyMemory B(0), Str1, Len(Str1)
    Winsock1.SendData B
    接收时:
    ReDim B(Len(Str1)) As Byte
    Winsock1.GetData B
    CopyMemory Str1, B(0), Len(Str1)
    
    相关问题:
    QA004463 "Winsock如何接收二进制数据"

此问题由李海回答。

 
把这个问题推荐给朋友
   
   
您的意见类别
您的名字
您的电子邮件
您的建议(请尽可能详细)
 
 

版权所有 1997-2008 热情软件屋
如果您有任何建议和意见, 请给我发个电子邮件 askpro@china-askpro.com
Web Designed by ZebraStudio