我自己写了一个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
