| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1056 人关注过本帖
标题:[转载]一个WINSOCK发送自定义数据内容的解决方案
只看楼主 加入收藏
清澂居士
Rank: 6Rank: 6
等 级:贵宾
威 望:28
帖 子:1237
专家分:7
注 册:2006-12-19
收藏
 问题点数:0 回复次数:2 
[转载]一个WINSOCK发送自定义数据内容的解决方案

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

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函数:
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
先定义一个字节数组:
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)

可是,我用這個的時候,自定義的第一個數據丟失叻```如何解決.呼叫版主``

就是那個flag```

搜索更多相关主题的帖子: WINSOCK 定义 数据 方案 控件 
2007-02-07 15:13
学习VB才2天
Rank: 5Rank: 5
等 级:贵宾
威 望:16
帖 子:1653
专家分:0
注 册:2006-5-4
收藏
得分:0 
用TITLE信息来代替第一字节,然后接收不到也没关系,这样看行不行呢?

[GLOW=255,DeepPink,3]我的免费网盘[/GLOW]
2007-02-07 17:12
清澂居士
Rank: 6Rank: 6
等 级:贵宾
威 望:28
帖 子:1237
专家分:7
注 册:2006-12-19
收藏
得分:0 
还有其他的方法麼?`1`

佛曰:\"前世的500次回眸才换来今生的一次擦肩而过\".我宁愿用来世的一次擦肩而过来换得今生的500次回眸.
2007-02-13 11:31
快速回复:[转载]一个WINSOCK发送自定义数据内容的解决方案
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020599 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved