Winsock控件问题.

nicksh 2000-02-03 01:06:00
有哪位能用例程详细说明一下用Winscok控件传输自定义数据的方法吗?
(希望能具体详细,这才不会辜负了小弟的100分.)
...全文
225 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
subzero 2000-03-01
  • 打赏
  • 举报
回复
因为winsock传送的是二进制数据
所以,你不可能直接传送自定义类型
只能按照一定的规则把你的自定义类型数值转化为
字节数组,然后在传送,接收端也以这个规则进行解码
Un1 2000-03-01
  • 打赏
  • 举报
回复
一般来讲,远程传输及控制系统是采用“信令”的方式进行。“信令”类似于Windows的消息机制,由Source, Destance, Message, Param构成。因此,你可以自定义一个SendMessage函数传送数据,例如:

Public Sub SendMessage(ByVal Source AS Long, ByVal Destance AS Long, ByVal Message AS Long, Param() As Byte)

Dim bt() AS Byte
bt = Param

Dim l As Long
l = Ubound(bt) + 12
Redim Preserve bt(l)

CopyMemory bt(l-11), Source, 4
CopyMemory bt(l-7), Destance, 4
CopyMemory bt(l-4), Message, 4

Winsock1.SendData bt

End Sub

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim Source as Long
dim Destance as long
dim Message as Long
dim bt() as Bytes
Winsock1.GetData bt

dim l As long
l = Ubound(bt)

CopyMemory Source, bt(l-11), 4
CopyMemory Destance, bt(l-7), 4
CopyMemory Message, bt(l-3), 4

Redim Preserve bt(l-12)

'调用消息处理函数:
Call MessageProc(Source, Destance, Message, Bytes)

End Sub

在SendMessage函数中指定Param是Byte数组,好处在于其他所有的基本数据类型和用户自定义类型数据都可以方便地用CopyMemory函数直接拷贝到其中便于传递,关于此点请参阅:

http://www.midatech.com/csdn/expert/TopicView.asp?id=2336

另外以上例程没有考虑出错处理。
Firing_Sky 2000-02-14
  • 打赏
  • 举报
回复
littletao说得对,自定义数据类型只有转化为Byte数组才能传送,实际上,任何数据类型都能转化成Byte型,连String性也可以转化成Byte来传送
littletao 2000-02-14
  • 打赏
  • 举报
回复
看看msdn里的例子吧,winsock控件的使用帮助里有string传输的仔细说明,
如果想要传二进制,只要senddata时传一个byte数组。
无论何种自定义数据,都可以转化成string&byte类型的。
Ahai 2000-02-03
  • 打赏
  • 举报
回复
If u use winsock in VB, pls Translate all data to String format with delimiter such as and or &.

1,451

社区成员

发帖
与我相关
我的任务
社区描述
VB 控件
社区管理员
  • 控件
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧