用winsock发送数据的一个问题

zjnfast 2003-08-20 09:22:52
我在模块中定义了一个数据类型r_pk。然后给数据类型赋值,用winsock控件执行senddata方法。

winsock1.SendData r_pk

程序出错,提示“只有定义在公共模块中用户定义类型能和变体类型相互转换或传递给后期绑定功能”。请各位高手赐教。
下面是定义数据的代码:

Private Type r_pk_i
numbers As Integer
names As String
End Type

Private Type r_pk_s
id As String
record(7) As r_pk_i
End Type

Public r_pk As r_pk_s
...全文
22 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
zjnfast 2003-08-28
  • 打赏
  • 举报
回复
我用c++ bulider解决了这个问题。因为我这个程序的接收端是不能改的!所以只能传递这个特定的数据结构过去。
算了,不管是winsock的问题还是vb的问题。我不管了!
lye 2003-08-28
  • 打赏
  • 举报
回复
怎样传输*.bmp呢
TaoGeGe 2003-08-27
  • 打赏
  • 举报
回复
WinScok不能傳送用戶自定義類型,即使你自定議一個STRING也不行
米克贝瑞 2003-08-27
  • 打赏
  • 举报
回复
也可以传送二进制文件吧??
_131_ 2003-08-23
  • 打赏
  • 举报
回复
微软说的!
rxqrxqrxqrxqrxq 2003-08-22
  • 打赏
  • 举报
回复
帅哥,WINSOCK只能传输STRING 或者BYTE两种类型的数据!!!
你不如把该类型的数据都转化为STRING类型的,到了传输的终点再经过相应的转化算了!!
jsxyhelu 2003-08-22
  • 打赏
  • 举报
回复
WINSOCK只能传输STRING 或者BYTE两种类型的数据!!!
是谁说的?
Garfield 2003-08-22
  • 打赏
  • 举报
回复
楼上的帅哥答案是正确的
但答案不是唯一的
就看楼猪怎么想了
zjnfast 2003-08-21
  • 打赏
  • 举报
回复
我定义结构的代码就是在模块中的啊!只是winsock的这行代码在窗体代码运行。
Alicky 2003-08-20
  • 打赏
  • 举报
回复
将上面的定义在模块中。或者用Dim r_pk As r_pk_s
一、WinSock简介 Socket(套接字)最初是由加利福尼亚大学Berkeley(伯克利)分校为UNIX操作系统开发的网络通信接口,随着UNIX的广泛使用,Socket成为当前最流行的网络通信应用程序接口之一。20世纪90年代初,由Sun Microsystems,JSB,FTP software,Microdyne和Microsoft等几家公司共同定制了一套标准,即Windows Socket规范,简称WinSock。 VB编写网络程序主要有两种方式:1.winsock控件 2.winsockAPI 二、WinSock控件的使用 1.WinSock控件的主要属性 LocalHostName属性 本地机器名 LocalIP属性 本地机器IP地址 LocalPort属性 本地机器通信程序的端口(0<端口<65536) RemoteHost属性 远程机器名 RemotePort属性 远程机器的通信程序端口 Protocol属性 通过Protocol属性可以设置WinSock控件连接远程计算机使用的协议。可选的协议是TCP和UDP对应的VB的常量分别是sckTCPProtocol和sckUDPProtocol,Winsock控件默认协议是TCP。注意:虽然可以在运行时设置协议,但必须在连接未建立或断开连接后。 SocketHandle属性 返回当前socket连接的句柄,这是只读属性。 RemoteHostIP属性 属性返回远程计算机的IP地址。在客户端,当使用了控件的Connect方法后,远程计算机的IP地址就赋给了RemoteHostIP属性,而在服务器端,当ConnectRequest事件后,远程计算机(客户端)的IP地址就赋给了这个属性。如果使用的是UDP协议那么当DataArrival事件后,发送UDP报文的计算机的IP才赋给了这个属性。 ByteReceived属性 返回当前接收缓冲区中的字节数 State属性 返回WinSock控件当前的状态 常数 值 描述 sckClosed 0 缺省值,关闭。 SckOpen 1 打开。 SckListening 2 侦听 sckConnectionPending 3 连接挂起 sckResolvingHost 4 识别主机。 sckHostResolved 5 已识别主机 sckConnecting 6 正在连接。 sckConnected 7 已连接。 sckClosing 8 同级人员正在关闭连接。 sckError 9   错误 2.WinSock主要方法 Listen方法 方法用于服务器程序,等待客户访问。格式:Winsock对象.listen Connect方法 用于向远程主机发出连接请求。格式:Winsock对象.connect [远程主机IP,远程端口] Accept方法 用于接受一个连接请求。格式:Winsock对象.accept Request ID Senddata方法 用于发送数据。格式:Winsock对象.senddata 数据 Getdata方法 用来取得接收到的数据。格式:Winsock对象.getdata 变量 [,数据类型 [,最大长度]] Close方法 关闭当前连接。格式:Winsock对象.close Bind方法 用Bind方法可以把一个端口号固定为本控件使用,使得别的应用程序不能再使用这个端口。 Listen方法Listen方法只在使用TCP协议时有用。它将应用程序置于监听检测状态。 Connect方法 当本地计算机希望和远程计算机建立连接时,就可以调用Connect方法。Connect方法调用的规范为:Connect RemoteHost,RemotePort Accept方法 当服务器接收到客户端的连接请求后,服务器有权决定是否接受客户端的请求。 SendData方法当连接建立后,要发送数据就可以调用SendData方法,该方法只有一个参数,就是要发送的数据。 GetData方法 当本地计算机接收到远程计算机的数据时,数据存放在缓冲区中,要从缓冲区中取出数据,可以使用GetData方法。GetData方法调用规范如下:GetData
在PB中使用WINSOCK.OCX做双向通信的简单例子----PowerBuilder 一、在窗口中添加WINSOCK控件:   在应用中新开一个窗口,在窗口画板中点击controls-->OLE菜单项,弹出 Insert object窗口,单击Insert control标签,从列表框中双击选定 Microsoft Winsock control,将winsock的图标贴在窗口上。   在程序中该控件名称定为winsock_a(甲方)和winsock_b(乙方)。   二、设置信息输入输出文本框:   在窗口中增加一个按钮cb_1,两个单行文本框sle_1,sle_2,分别用于输入 要发送的字符串和接受对方发送的字符串。   三、设置通讯协议:   WINSOCK控件允许用户以UDP和TCP两种协议中任选一种进行通讯。   1.UDP协议设置:UDP协议是一种无连接的通讯协议,在通讯之前,需要绑 定remotehost和remoteport属性,如果需要双向通讯,还要设置localport属性 。   在甲方(本机地址为:134.1.1.1)窗口的Open事件中加入如下语句: winsock_a.object.protocol=1 //winsock通讯协议设为UDP协议 winsock_a.object.remotehost="134.1.1.2" //对方的ip地址 winsock_a.object.remoteport=6000 //对方的winsock通讯端口号 winsock_a.object.localport=6001 //本机的winsock通讯端口号 winsock_a.object.bind //绑定通讯协议   在乙方(本机地址为:134.1.1.2)窗口的Open事件中加入如下语句: winsock_b.object.protocol=1 //winsock通讯协议设为UDP协议 winsock_b.object.remotehost="134.1.1.1" //对方的ip地址 winsock_b.object.remoteport=6001 //对方的winsock通讯端口号 winsock_b.object.localport=6000 //本机的winsock通讯端口号 winsock_b.object.bin //绑定通讯协议   2.TCP协议设置:TCP协议在通讯前需要进行连接。   在甲方(作为服务器端)窗口的Open事件中加入如下语句: winsock_a.object.protocol=0 //winsock通讯协议设为TCP协议 winsock_a.object.localport=6001 //本机的winsock通讯端口号 winsock_a.listen() //启动监听   在甲方winsock_a控件的Connectionrequest事件中加入如下语句: //接受到对方的连接请求后 if winsock_a.object.state0 then winsock_a.close() end if winsock_a.accept(requestID) //建立直接连接 //requestID是Connectionrequest事件自己的参数   在乙方(作为客户端)窗口的Open事件中加入如下语句: winsock_b.object.protocol=0 //winsock通讯协议设为TCP协议 winsock_b.object.remotehost="134.1.1.2" //对方的ip地址 winsock_b.object.remoteport=6000 //对方的winsock通讯端口号 winsock_b.connect() //发出连接请求   3.无论采用哪种协议,都要在窗口的Close事件中加入如下语句: if winsock_a/*或winsock_b*/.object.state0 then winsock_a.close() end if   否则可能第二次使用时发生异常问题   四、开始通讯   在按钮cb_1(caption属性设为‘发送’)的click事件中加入如下语句: winsock_a/*或winsock_b*/.object.send (sle_1.text)   在winsock_a/*或winsock_b*/控件的dataarrival事件中加入如下语句: //接受到对方数据后 string datastr1 winsock_a/*或winsock_b*/.object.getdata (def datastr1) sle_2.text=datastr1 //将数据字符串显示在文本框中   以上程序实际上体现了聊天器的底层工作原理,稍加修改扩充就可以做成

1,502

社区成员

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

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