一个Winsock组件

我自己写了一个Winsock组件,很简单,将带发送的报文发给指定IP的指定端口,并返回应答报文。技术粗糙, 请大家指教。附源码如下:

-------------------------------------

VERSION 1.0 CLASS
BEGIN
  MultiUse = -1  'True
  Persistable = 0  'NotPersistable
  DataBindingBehavior = 0  'vbNone
  DataSourceBehavior  = 0  'vbNone
  MTSTransactionMode  = 0  'NotAnMTSObject
END
Attribute VB_Name = "clsWinSockEm"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = True
Attribute VB_PredeclaredId = False
Attribute VB_Exposed = True
'******************************************************************************
'
' clsWinSockEm.CLS
' 嵌入式WinSocket类
' 输入:服务器IP、服务器Port、待发送报文
' 输出:接收报文
'
'******************************************************************************

Option Explicit

'******************************************************************************

Const RECV_TIME_OUT = 60        ' 接收超时
Const SEND_TIME_OUT = 60        ' 发送超时
Const CONN_TIME_OUT = 120       ' 连接超时
Const RECV_MAX_LEN = 2048       ' 接收报文最大数

'******************************************************************************

Private WithEvents wskEm As MSWinsockLib.Winsock    ' WinSock Control
Attribute wskEm.VB_VarHelpID = -1
Private mstrServerIP As String                      ' 远程服务器IP
Private mintServerPort As Integer                   ' 远程服务器端口
Private mstrTextToSend As String                    ' 发送报文
Private mstrTextReceived As String                  ' 接收报文
Private bConnected As Boolean                       ' 连接标志

'******************************************************************************

' 初始化
Public Sub Init(strServerIP As String, intServerPort As Integer)
    mstrServerIP = strServerIP
    mintServerPort = intServerPort
    mstrTextToSend = ""
    mstrTextReceived = ""
    bConnected = False
End Sub

' 返回报文
Public Function ReturnText(strTextToSend As String) As String
    Dim dtStart As Date
    dtStart = Now

    Set wskEm = New MSWinsockLib.Winsock
    
    ' 获取发送字符串
    mstrTextToSend = strTextToSend
    mstrTextToSend = mstrTextToSend & Chr(0)
    
    ConnectServer
    SendText
    
    ' 接收报文超时控制
    Do Until Not (mstrTextReceived = "")
        DoEvents
        If DateDiff("s", dtStart, Now) > RECV_TIME_OUT Then
            Err.Raise vbObjectError, "Socket错误", "通讯超时"
        End If
    Loop
    
    wskEm.Close
    Set wskEm = Nothing

    ReturnText = mstrTextReceived
End Function

' 连接服务器
Private Sub ConnectServer()
    Dim dtStart As Date
    
    dtStart = Now()
    
    wskEm.RemoteHost = mstrServerIP
    wskEm.RemotePort = mintServerPort
    wskEm.Connect
    
    Do Until bConnected
        DoE

时间: 2024-11-17 02:35:41

一个Winsock组件的相关文章

为你的ASP程序制作一个编译组件(上)

编写定制的Active Server Page(ASP)代码来完成一些任务,比方说数据库访问的能力是重要的.但是,一个由脚本写成的解决方案最明显的问题就是性能.在这篇文章中,我将向你展示如何将一个数据库对象的脚本版本转换成一个动态链接库(dll),或是就象它的通常的名字,一个COM组件.为了生成这个编译版本,我将使用Visual Basic 6 service pack 4.我曾经向你展示了如何创建一个VBScript对象来简化对数据源的访问.因为这个对象有可能被大量使用,所以它是一端理想的可以

一个用组件动态创建Excel文件的实例

excel|创建|动态 一个用组件动态创建Excel文件的实例    在精华区中有一篇关于在ASP中动态创建的Excel文章, 但实际上我们会发现如果我们在ASP中用Set MyExcelChart = server.CreateObject("Excel.Sheet")是行不通的. 这样做的话会出现如下的错误信息:Only InProc server components should be used. If you want to use LocalServer component

怎样在不使用框架的基础上开发一个 Javascript 组件

本文讲的是怎样在不使用框架的基础上开发一个 Javascript 组件, 许多开发者(包括我)犯的一个错误是当遇到问题时他们总是自上而下地考虑问题.他们想问题的时候,总是从考虑框架(Framework),插件(Plugin),预处理器(Pre-processors),后处理器(Post-processors),面向对象模式(objected-oriented patterns)等等这些方面出发,他们也可能会从他们以前看过的一篇文章来考虑.而这时如果有一个生成器(Generator)的话,他们当然

VUE实现一个分页组件

分页是WEB开发中很常用的功能,尤其是在各种前后端分离的今天,后端API返回数据,前端根据数据的count以及当前页码pageIndex来计算分页页码并渲染到页面上已经是一个很普通很常见的功能了.从最开始的jquery时代到现在的各种各样的前端框架时代,分页功能都是必不可少的. 分页大多数(基本上)情况下都是对异步数据列表的处理,这里首先需要明白一下分页的流程. 在已知每页显示数据量pageSize以及当前页码pageIndex的情况下: 请求API,返回第一屏数据(pageSize内)以及所有

Big Faceless PDF Viewer 2.11.19发布 一个Swing组件

Big Faceless PDF Viewer 2.11.19此版本Viewer http://www.aliyun.com/zixun/aggregation/5541.html">Applet: 可以设置外观和感觉的"swing.defaultlaf"参数.Viewer:文件现在可以被标记为"dirty",这意味着他们需要在关闭之前保存.这个可选的功能是默认的,但查看属性"unpromptedDirtyClose"为"

Aspose.Slides for .NET 5.4.0发布 一个.NET组件

Aspose.Slides for http://www.aliyun.com/zixun/aggregation/13480.html">.NET 5.4.0版本改善导出PDF格式,支持图表系列标志和TickLabels轴属性.支持修改图表类型,添加图表系列标签,修复了幻灯片的克隆和图表呈现问题. Aspose.Slides 是一个.NET组件,它在不需使用Microsoft PowerPoint的情况下,能够使 .NET应用程序进行创建.读.写和修正一个PowerPoint档.其功能包

为你的ASP程序制作一个编译组件(中)

下一步是将VBScript对象中的所有代码拷贝出来并粘贴到新工程向导所显示的类窗口中去.只要拷贝从"class DBConnection"到"end class"之间的代码.在粘贴完代码以后,在属性窗口中将类的名字改成DBConnection,如图C所示. 同时将MTSTransactionMode改成3(使用事务处理过程).我们没有必要为这个对象添加任何为支持事务处理(transaction)过程特别编写的代码,但我们最好应该申明你的对象将支持事务处理.现在,在你

为你的ASP程序制作一个编译组件(下)

使你的类开始工作既然你已经拥有了一个能够运行的COM组件了,那么现在就是让它参与工作的时候了.让这个组件能在ASP中使用有几步工作要做.第一步,修改框架(framework)中的pageDeclare.asp文件来用一个object置标来引用这个刚刚编译成功的组件(列表D). Listing D<%@ LANGUAGE="VBScript" %><object runat="server" progid="DBUtil.DBConnect

一个socket组件及其调用方法

这个socket组件是由开发jmail的那家公司作的.很老的一个版本了.不过挺好的.我一直在用.比较稳定.以前发现xmlhttp在win2003 server上不太好.流量大了iis容易当掉.用这个组件倒还算稳定.     paraHost ="www.knowsky.com"      ' host    paraPort = 80                     ' port    paraFileUrl ="/test/test.htm"