VB做asp组件dll,里面使用了Winsock UDP协议传送数据,在asp页面调用时出现问题

vjlin 2004-04-13 10:40:47
我是这样做的
Private WithEvents MySock As MSWinsockLib.Winsock

Private Sub Class_Initialize()
Set MySock = New MSWinsockLib.Winsock
End Sub

Sub Strat_Scok()
MySock.RemoteHost = "127.0.0.1"
MySock.RemotePort = 7005
MySock.Bind 7009
MySock.SendData "测试数据"
End Sub

在asp页面调用Strat_Scok是总是出现错误提示“方法 '~' 作用于对象 '~' 失败 ”,经过分析主要是在执行 MySock.SendData "测试数据" 时出现,这是怎么回事呢?请指教!~
...全文
226 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
subzero 2004-09-30
  • 打赏
  • 举报
回复
下面的是我以前写的一个websocket组件,以前是为了作webirc用的,当然也可以做webhttp了,你可以参考一下


Private WithEvents Socket As MSWinsockLib.Winsock
Attribute Socket.VB_VarHelpID = -1
Private ConnectFlag As Boolean

Private mvarHost As String
Private mvarPort As Long
Private mvarSocketState As String
Private mvarSocketBuffer As String
Private mvarSocketBufferSize As Long
Private mvarSocketConnectTimeOut As Long
Private mvarSocketBufferTimeOut As Long
Private mvarSocketError As String

Public Sub SendText(ByVal txtSend As String)
If Socket.State = sckClosed Or Socket.State = sckClosing Then
mvarSocketError = "Socket not opened"
Exit Sub
End If
If ConnectFlag = False Then
mvarSocketError = "Socket not connect to the specify host"
Exit Sub
End If
Socket.SendData txtSend & vbCrLf
End Sub

Public Function WaitForGetSocketBuffer() As String
Dim OldTimer As Long

If Socket.State = sckClosed Or Socket.State = sckClosing Then
mvarSocketError = "Socket not opened"
Exit Function
End If
If ConnectFlag = False Then
mvarSocketError = "Socket not connect to the specify host"
Exit Function
End If

OldTimer = Timer * 1000
Do Until Timer * 1000 - OldTimer > mvarSocketBufferTimeOut
DoEvents
Loop
WaitForGetSocketBuffer = mvarSocketBuffer
mvarSocketBuffer = ""
End Function

Public Function WaitForGetSocketBufferSize() As Long
Dim OldTimer As Long

If Socket.State = sckClosed Or Socket.State = sckClosing Then
mvarSocketError = "Socket not opened"
Exit Function
End If
If ConnectFlag = False Then
mvarSocketError = "Socket not connect to the specify host"
Exit Function
End If

OldTimer = Timer * 1000
Do Until Timer * 1000 - OldTimer > mvarSocketBufferTimeOut
DoEvents
Loop
WaitForGetSocketBufferSize = mvarSocketBufferSize
mvarSocketBufferSize = 0
End Function

Public Sub CloseSocket()
If Socket.State = sckClosed Or Socket.State = sckClosing Then
mvarSocketError = "Socket not opened"
Else
Socket.Close
End If
End Sub

Public Sub OpenSocket()
Dim OldTimer As Long
If mvarHost = "" Or mvarPort <= 0 Then
mvarSocketError = "Not specify the remote host and port"
End If
If Socket.State <> sckClosed Then
mvarSocketError = "Socket has opened"
End If
Socket.RemoteHost = mvarHost
Socket.RemotePort = mvarPort
Socket.Connect

OldTimer = Timer * 1000
Do Until Timer * 1000 - OldTimer > mvarSocketConnectTimeOut
DoEvents
Loop
If ConnectFlag = False Then
mvarSocketError = "Socket TimeOut Expire"
End If
End Sub

Public Property Get SocketError() As String
SocketError = mvarSocketError
mvarSocketError = ""
End Property

Public Property Let SocketConnectTimeOut(ByVal vData As Long)
If vData <= 0 Then
mvarSocketError = "SocketConnectTimeOut can't less than 0"
Exit Property
End If

mvarSocketConnectTimeOut = vData
End Property

Public Property Get SocketConnectTimeOut() As Long
SocketConnectTimeOut = mvarSocketConnectTimeOut
End Property

Public Property Let SocketBufferTimeOut(ByVal vData As Long)
If vData <= 0 Then
mvarSocketError = "SocketBufferTimeOut can't less than 0"
Exit Property
End If

mvarSocketBufferTimeOut = vData
End Property

Public Property Get SocketBufferTimeOut() As Long
SocketBufferTimeOut = mvarSocketBufferTimeOut
End Property

Public Property Get SocketBuffer() As String
If Socket.State = sckClosed Or Socket.State = sckClosing Then
mvarSocketError = "Socket not opened"
Exit Property
End If
If ConnectFlag = False Then
mvarSocketError = "Socket not connect to the specify host"
Exit Property
End If

SocketBuffer = mvarSocketBuffer
End Property

Public Property Get SocketBufferSize() As Long
If Socket.State = sckClosed Or Socket.State = sckClosing Then
mvarSocketError = "Socket not opened"
Exit Property
End If
If ConnectFlag = False Then
mvarSocketError = "Socket not connect to the specify host"
Exit Property
End If

SocketBufferSize = mvarSocketBufferSize
End Property

Public Property Get SocketState() As String
SocketState = mvarSocketState
End Property

Public Property Let Port(ByVal vData As Long)
If vData <= 0 Then
mvarSocketError = "Remote Port can't less than 0"
Exit Property
End If

mvarPort = vData
End Property

Public Property Get Port() As Long
Port = mvarPort
End Property

Public Property Let Host(ByVal vData As String)
If vData = "" Then
mvarSocketError = "Remote Host can't be NULL"
Exit Property
End If

mvarHost = vData
End Property

Public Property Get Host() As String
Host = mvarHost
End Property

Private Sub Class_Initialize()
On Error GoTo er
Set Socket = New MSWinsockLib.Winsock
ConnectFlag = False
mvarSocketState = "Closed"
mvarSocketError = ""
Exit Sub

er:
mvarSocketError = Err.Description
End Sub

Private Sub Class_Terminate()
If Socket.State <> sckClosed Then Socket.Close
End Sub

Private Sub Socket_Close()
ConnectFlag = False
End Sub

Private Sub Socket_Connect()
ConnectFlag = True
End Sub

Private Sub Socket_DataArrival(ByVal bytesTotal As Long)
Dim tmp As String

If bytesTotal > 0 Then
Socket.GetData tmp
mvarSocketBuffer = mvarSocketBuffer + tmp
mvarSocketBufferSize = mvarSocketBufferSize + bytesTotal
End If
End Sub

Private Sub Socket_Error(ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean)
ConnectFlag = False
If Socket.State <> sckClosed And Socket.State <> sckClosing Then Socket.Close
mvarSocketError = "Socket Error: " & Description
End Sub
super852 2004-09-29
  • 打赏
  • 举报
回复
好像是IIS不允许ASP有这样的权限。
有一个组件是专门让ASP用的。
是一个socket.dll
你可以到网上找一下,或发EMAIL给我。我发给你一份。
用的时候很简单。
set sck=createobject("socket.TCP")
详细用法这里就不说了。如果需要你可以到网上找一下,或发EMAIL给我。我发给你一份。super852@21cn.com
super852 2004-09-29
  • 打赏
  • 举报
回复
http://dev.csdn.net/Develop/article/26/26868.shtm
这是我刚才找到的一个介绍的网址。
另外我给你一下载的地方http://free.cctj.net/socket.dll
原来的自动注册组件程序我找不到了。只省下这一个DLL文件了。可以手动注册。
复制到c:\windows目录,或其它任务目录都可以。比如D:\
然后“开始”-“运行”
输入命令 regsvr32 c:\windows\socket.dll 或跟据你的实际情况改,比如 regsvr32 d:\socket.dll

这样就注册好组件了。

使用方法呢,刚才给你的那个网址上讲了一点,如果嫌不全,还可以到搜索引擎搜一下socket.tcp
有很多的实例的。
至于你的UPD协议,好像也支持,但是我没用过。你自己找找吧。
如果找不到,再发邮件给我。我这儿有很多的以前的程序用这个的。
我的MSN:qq2538288@hotmail.com
我的QQ就是上面那个号码。
jam021 2004-09-28
  • 打赏
  • 举报
回复
关注,帮你顶!
zdcwin 2004-09-27
  • 打赏
  • 举报
回复
gz,up
行云边 2004-09-27
  • 打赏
  • 举报
回复
试试这个
Sub Strat_Scok()
MySock.Protocol=sckudpProtocol
MySock.RemoteHost = "127.0.0.1"
MySock.RemotePort = 7005
'MySock.Bind 7009
MySock.SendData "测试数据"
End Sub
whachun 2004-09-27
  • 打赏
  • 举报
回复
先绑定端口,再设置服务端IP和端口发送看看
hxsam 2004-09-26
  • 打赏
  • 举报
回复
Remarks

When a UNICODE string is passed in, it is converted to an ANSI string before being sent out on the network.

意思是:你发送Unicode包括中文,最好是编码以后在发送,比如用BASE64之类。
swans 2004-06-30
  • 打赏
  • 举报
回复
关注
yonghengdizhen 2004-06-30
  • 打赏
  • 举报
回复
将你的iis服务进程设置为可以和桌面交互看是否可以解决.
通常情况下,使用窗口机制的ocx控件在服务进程上下文中是不可调用的,即使通过特殊配置能够调用,控件的书写也是有严格规范的.
doface 2004-06-29
  • 打赏
  • 举报
回复
Winsock是个控件,怎么能和调用DLL一样呢,不可以的,没有界面的东东,在ASP中调用是不可以的,只有在界面中调一个控件才行。别混淆了。
vjlin 2004-04-19
  • 打赏
  • 举报
回复
to hxsam(hxsam) 错误依旧!
hxsam 2004-04-16
  • 打赏
  • 举报
回复
Sends data to a remote computer.

Return Value

Void

Syntax

object.SendData data

The SendData method syntax has these parts

Part Description
object An object expression that evaluates to an object in the Applies To list.

data Data to be sent. For binary data, byte array should be used.


Remarks

When a UNICODE string is passed in, it is converted to an ANSI string before being sent out on the network.
hxsam 2004-04-16
  • 打赏
  • 举报
回复
Sub Strat_Scok()
MySock.RemoteHost = "127.0.0.1"
MySock.RemotePort = 7005
MySock.Bind 7009
Dim myData() As Byte
Dim strData As String
strData = "测试数据"
ReDim myData(Len(strData))
Dim i As Long
For i = 1 To Len(strData)
myData(i) = Val(Mid(strData, i, 1))
Next

MySock.SendData myData
End Sub
vjlin 2004-04-14
  • 打赏
  • 举报
回复
to daisy8675(莫依) 你找的代码在哪里?
liyanlover 2004-04-13
  • 打赏
  • 举报
回复
不了解
daisy8675 2004-04-13
  • 打赏
  • 举报
回复
你開 vb連續點2下就會出現這個問題,呵呵

明天我去找段asp代碼給你看好了

kmzs 2004-04-13
  • 打赏
  • 举报
回复
asp页面。。。

1,502

社区成员

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

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