欢迎光临
我们一直在努力

一个Winsock组件

建站超值云服务器,限时71元/月

我自己写了一个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
        doevents
        if datediff("s", dtstart, now) > conn_time_out then
            err.raise vbobjecterror, "socket错误", "连接超时"
        end if
    loop
end sub

发送报文
private sub sendtext()
    dim dtstart as date
    
    dtstart = now()
    
    wskem.senddata mstrtexttosend        发送报文
    
    do until wskem.state = sckclosed
        doevents
        if datediff("s", dtstart, now) > 5 then
            err.raise vbobjecterror, "socket错误", "发送请求超时"
        end if
    loop
end sub

winsock连接事件
private sub wskem_connect()
    bconnected = true
end sub

winsock数据到达事件
private sub wskem_dataarrival(byval bytestotal as long)
    wskem.getdata mstrtextreceived, vbstring, recv_max_len
end sub

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » 一个Winsock组件
分享到: 更多 (0)

相关推荐

  • 暂无文章