一种用于应用层软件的套接字工具的制作方法

文档序号:6593183阅读:199来源:国知局
专利名称:一种用于应用层软件的套接字工具的制作方法
技术领域
本发明涉及一种套接字(socket)工具,特别是一种仅使用TCP协议来作为网络通信规范的套接字工具。
本发明另一目的是提供一种用于处理应用层软件的传输数据的增值程序,其用以提供安全性、保密性及高速度的网络传输。
为实现本发明的目的,本发明提供一种用于应用层软件的套接字工具,其中该套接字工具是以编写为一程序的方式来实施,并在一电脑内执行,以提供该电脑的应用层软件调用,使该电脑能够通过TCP网络与其它电脑的应用层软件通信,该套接字工具包括一组用于通信TCP网络的套接字控制(socket control)程序,其中该套接字控制程序是利用TCP协议进行通信。
此外,本发明套接字工具进一步包括一组用于处理该应用层软件的传输数据的增值程序。
为使熟悉该项技术的人士了解本发明的目的、特征及功效,通过下述具体实施例,配合附图
对本发明详加说明如下。
图2是本发明套接字工具与传统WinSock的比较示意图。本发明套接字工具的套接字控制程序仅使用TCP网络协议作为网络通信规范,而图2的传统WinSock,如微软公司所提供的传统WinSock,是利用TCP协议或UDP协议等两种网络协议来作为网络通信规范,当例如一FTP应用层软件通过传统WinSock作文件下载传输作业时,往往会发生文件数据丢失的情况,尤其在传输MP3、JPG图像等数据时丢失情况更为严重,这是该传统WinSock的错误所导致的结果。由于本发明套接字工具的套接字控制程序仅使用TCP网络协议,能够避免上述的错误。图2套接字工具的套接字控制程序由此目标(object)型态作为实施的说明,所以分为方法(methods)及事件(events)两部分。
以下列举说明本发明套接字工具的套接字控制程序及其语法(syntax).SClose结束一服务端电脑及一客户端电脑之间的通信语法范例IpSock.SClose.SConnect以服务端电脑IP的字串(string)及端口参数(Portparameters)建立通信语法范例IpSock.SConnect Cstr(IP),CStr(Port)使用例Ren Ws is the name of IDsocktxtIp=″191.164.0.6″,txtPort=″1064″Ws.SConnect TxtIP,txtPort
.SGetData 传回一特定字串,其是为自数据库执行SQL命令完成后的结果或信息语法范例IpSock.SGetData使用例Dim Display Str As StringRem Ws is the name of IpsockDisplayStr=Ws.SGetData.SSendData以SQL命令字串的长度(length)及SQL命令字串参数自客户端电脑传送数据至服务端电脑语法范例IpSock.SSendData LengthOfExecSQLCmdStr&″|″& ExecSQLCmdStr使用例Ren Ws is the name of IpsockDim Execstr=StringExecstr=″SELECT * FROM employee″Ws.SendData Len(Execstr)& ″|″ & Execstr.State传回状态值语法范例Object.State其中State状态值如下

.Str2rec 从一输入字串、一函数(Function)传回一特定记录组及一指示字串语法范例StroRec.Str2rec使用例<pre listing-type="program-listing">  Dim rs As New ADODB.Recordset  Dim StrtoRec As New StrtoRec.str2rec  Dim DisplayStr As String,DataResult As String  DisplayStr=Ws.SGetData  If StrtoRec.str2rec(DisplayStr,rs,DataResult) =″OK″Then   If DataResult= ″″ Then   If rs.RecordCount>O Then  Ren DG1 is a DataGrid  Set DG1.DataSourcel=rs.DataSource   End If   Set rs=Nothing   Else   MsgBox″Result″=″ &amp;amp; DataResult″   End If   Else   MsgBox″ERROR″   End If</pre>以下是本实施更详细的例子<pre listing-type="program-listing">Option Explicit ′Const m_Def_WaitSec=30 Const m_Def_LocalPort=1024 ′Const m Def TimeOut=30&lt;dp n="d5"/&gt; ′Const m_Def_TimerFlag=0 ′Const m_Def_CheckAlive=0 ′Dim m_WaitSec As Long Dim m_IocalPort As Long ′Dim m_TimeOut As Long ′Dim m_TimerFlag As Boolean ′Dim m_CheckAlive As Boolean Const SendBinary=1 Const ReceiveBinary=2 Const Normal=0 Private LiveChar As String Private RecData As Variant Private RecDataLen As Long Private LastSend As Variant Private IPAddress As Variant Private Counter As Long Dim SendFileBlock As Boolean Private Send_Mode As Integer ′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′ ′Public Variable ′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′ ′Public ShowAhime As Boolean ′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′&lt;dp n="d6"/&gt; ′Event List ′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′ Public Event SClose() Public Event SConnectionRequest(ByVal requestID As Long) Public Event SDataArrival(ByVal bytes Total As Long) Public Event SFileArrival(ByVal FileName As String) Public Event SError(ByVal Number As Integer,Description As String) Public Event SSendComplete() Public Event SConnected() Public Event ConnectionTimeOut() Private s()As Byte Private FileName As String,TbytesReceive As Long,TbytesReceived As Long′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′UserControl Property′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′Public Property Get waitSec()As Long′waitSec=m_WaitSec′End Property′Public Property Let waitSec(ByVal WaitSecond As Long)′WaitingForm.WaitTime=WaitSecond′m_WaitSec=WaitSecond′PropertyChanged″waitsec″′End PropertyPublic Property Get LocalPort()As Long LocalPort=m_LocalPortEnd Property&lt;dp n="d7"/&gt;Public Property Let LocalPort(ByVal Port As Long) m_LocalPort=Port WS.LocalPort=m_LocalPort PropertyChanged″localport″End Property′Public Property Get TimeOut()As Variant′ TimeOut=m_TimeOut′End Property′Public Property Let TimeOut(ByVal vNewValue As Variant)′If IsNumeric(vNewValue)Then′ m_TimeOut=CLng(vNewValue)′ PropertYChanged″timeout″′End If′End Property′Public Property Get TimerFlag()As Boolean′TimerFlag=m_TimerFlag′End Property′Public Property Let TimerFlag(ByVal vNewValue As Boolean)′m_TimerFlag=vNewValue′PropertyChanged″timerflag″′End Property′Public Property Get CheckAlive()As Boolean′CheckAlive=m_CheckAlive&lt;dp n="d8"/&gt;′End Property′Public Property Let CheckAlive(ByVal vNewValue As Boolean)′m_CheckAlive=vNewValue′PropertyChanged″checkalive″′End Property′Read OnlyPublic Property Get State()As IntegerState=WS.StateEnd PropertyPublic Property Get SocketHandle()As Long SocketHandle=WS.SocketHandleEnd PropertyPublic Property Get RemotePort()As Long  RemotePort=WS.RemotePortEnd PropertyPublic Property Get LocalIp()As Variant LocalIp=WS.LocalIpEnd PropertyPublic Property Get RemoteIp()As Variant  RemoteIp=WS.RemoteHostIP End Property′Private Sub Alive Timer()&lt;dp n="d9"/&gt;′If m_CheckAlive Then′ Counter=Counter+1′ If m_TimerFlag Then′ If Counter>=m_TimeOut Then′ WS.Close′ RaiseEvent ConnectionTimeOut′ End If′ End If′If WS.State=7 Then′ WS.SendData LiveChar′End If′ End If′End SubPrivate Sub UserControl_Initialize() Send_Mode=Normal′ If m_CheckAlive Then′Alive.Enabled=True′ Else′Alive.Enabled=False′ End If LiveChar=Chr(231)End SubPrivate Sub UserControl_InitProperties()′ m_WaitSec=m_Def_WaitSec m_LocalPort=m_Def_LocalPort′ m_TimeOut=m_Def_TimeOut&lt;dp n="d10"/&gt;′ m_TimerFlag=m_Def_TimerFlag′ m_CheckAlive=m_Def_CheckAliveEnd SubPrivate Sub UserControl_ReadProperties(PropBag As PropertyBag)′ m_WaitSec=PropBag.ReadPropertY(″waitsec″,m_Def_WaitSec) m_LocalPort=PropBag.ReadProperty(″localport″,m_Def_LocalPort)′ m_TimeOut=PropBag.ReadProperty(″timeout″,m_Def_TimeOut)′ m_TimerFlag=PropBag.ReadProperty(″timerflag″,m_Def_TimerFlag)′ m_CheckAlive=PropBag.ReadProperty(″checkalive″,m_Def_CheckAlive)End SubPrivate Sub UserControl_Resize() UserControl.Height=300 UserControl.Width=300End SubPrivate Sub UserControl_WriteProperties(PropBag As PropertyBag)′ Call PropBag.writeProperty(″waitsec″,m_WaitSec, m_Def_WaitSec) Call PropBag.WriteProperty(″localport″,m_LocalPort,m_Def_LocalPort)′ Call PropBag.WriteProperty(″timeout″,m_TimeOut,m_Def_TimeOut)′ Call PropBag.WriteProperty(″timerflag″,m_TimerFlag,m_Def_TimerFlag)′ Call PropBag.WriteProperty(″checkalive″,m_CheckAlive,m_Def_CheckAlive)End Sub′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′WinSock Event′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′Private Sub WS_Close()&lt;dp n="d11"/&gt; RaiseEvent SCloseEnd SubPrivate Sub WS_Connect() RaiseEvent SConnectedEnd SubPrivate Sub WS_ConnectionRequest(ByVal requestID As Long) RaiseEvent SConnectionRequest(requestID)End SubPrivate Sub WS_DataArrival(ByVal bytes Total As Long) ′Dim strCompress As New strcomprelib.strcompre Dim RData As Variant,tempStrArray()As String Counter=0 Select Case Send_Mode Case SendBinary   For Binary Data  WS.GetData RData,vbString  If Right(RData,1)=Chr(230)Then  If Right(RData,10)=Chr(9) &amp;amp; Chr(9) &amp;amp; Chr(9) &amp;amp; Chr(9) &amp;amp; Chr(9) &amp;amp; Chr(9) &amp;amp; Chr(9)&amp;amp; Chr(9) &amp;amp; Chr(9) &amp;amp; Chr(9)Then   RData=Left(RData,Len(RData)-10)   RecData=RecData &amp;amp; RData   End If   RecData=Elminate(RecData,LiveChar)  On Error GoTo errorhandle  ′RecData=strCompress.struncompress(RecData)  Select Case RecData&lt;dp n="d12"/&gt;  Case″ReadyToReceive″   WS.SendData s()  Case″ReceiveFileDone″   Send_Mode=Normal   SendFileBlock=Ealse   ReDim s(0)   FileName=″″   RaiseEvent SDataArrival(bytesTotal)  Case″ResendFile″   WS.SendData s() End Select RecData=″″Case ReceiveBinary TbytesReceived=TbytesReceived+bytesTotal WS.GetData s(),vbArray+vbByte Put #1,,s If TbytesReceived>=TbytesReceive Then  Close #1  Send_Mode=Normal  SSendData(″ReceiveFileDone″)  RaiseEvent SFileArrival(″c\″&amp;amp; FileName)  TbytesReceived=0 End IfCase Normal ′For Text Message&lt;dp n="d13"/&gt;  WS.GetData RData,vbString  If Right(RData,1)=Chr(230)Then   If Right(RData,10)=Chr(9) &amp;amp; Chr(9) &amp;amp; Chr(9) &amp;amp; Chr(9) &amp;amp; Chr(9) &amp;amp; Chr(9) &amp;amp;Chr(9) &amp;amp; Chr(9) &amp;amp; Chr(9) &amp;amp; Chr(9)Then   RData=Left(RData,Len(RData)-10)   RecData=RecData &amp;amp; RData   ′If ShowAnime Then   ′ShowAnime=False   ′Unload WaitingForm   ′End If   RecData=Elminate(RecData,LiveChar)   On Error GoTo errorhandle   ′RecData=strCompress.struncompress(RecData)   If Left(RecData,17)=″RequestToSendFile″Then   tempStrArray=Split(RecData,″|″,-1,vbTextCompare)   If UBound(tempStrArray)=2 Then  If IsNumeric(tempStrArray(2))Then   FileName=CStr(tempStrArray(1))   TbytesReceive=CLng(tempStrArray(2))   Open″c\″&amp;amp; FileName For Binary Access Write As #1   SSendData(″ReadyToReceive″)   Send_Mode=ReceiveBinary   End If   End If  Else   RaiseEvent SDataArrival(bytesTotal)  End If&lt;dp n="d14"/&gt;   RecData=″″  Else   If RData<>LiveChar Then   RecData=RecData &amp;amp; RData   End If   ′If ShowAnime Then   ′DoEvents   ′Correct Progress bar in Here   ′End If   End If End Select ′Set strCompress=Nothing Exit Sub′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′errorhandle RecData=″″ ′Set strCompress=Nothing Exit Sub′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′End SubPrivate Sub WS Error(ByVal Number As Integer,Description As String,ByVal Scode AsLong,ByVal Source As String,ByVal HelpFile As String,ByVal HelpContext As Long,CancelDisplay As Boolean) RaiseEvent SError(Number,Description)End SubPrivate Sub WS_SendComplete() RaiseEvent SSendComplete&lt;dp n="d15"/&gt;End Sub′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′Control Methods′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′Public Sub SAccept(ByRef requestID As Long) WS.Accept requestIDEnd SubPublic Sub SListen() On Error GoTo errorhandle WS.Listen Exit Sub′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′errorhandle; RaiseEvent SError(Err.Number,Err.Description)′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′End SubPublic Sub SConnect(ByRef IP As Variant,ByRef Port As Variant) On Error GoTo errorhandle WS.Connect IP,Port Exit Sub′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′errorhandle RaiseEvent SError(Err.Number,Err.Description)′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′End Sub&lt;dp n="d16"/&gt;Public Sub SSendFile(FileName As String) Dim FSO As New FileSystemObject Dim f1 As Long If Dir(FileName)<>″″Then   ′Read Bytes in Array of byte   Open FileName For Binary Access Read As #1   f1=FileLen(FileName)   ReDim s(f1)   Get #1,,s()   Close #1   SSendData″RequestToSendFile″&amp;amp;″|″&amp;amp; FSO.GetFile(FileName).Name &amp;amp;″|″&amp;amp;FSO.GetFile(FileName).Size  SendFileBlock=True  ′SendFileBlock=False  Send_Mode=SendBinary Else  MsgBox″No Such File Found″ End If Set FSO=NothingEnd SubPublic Sub SSendData(Data As Variant) ′Dim strCompress As New strcomprelib.strcompre If Not SendFileBlock Then′ Alive.Enabled=Ealse   On Error GoTo errorhandle′If ShowAnime Then′ WaitingForm.Show&lt;dp n="d17"/&gt;′ WaitingForm.Timer1.Enabled=True′ End If′ DoEvents ′ LastSend=strCompress.strCompress(Data)   LastSend=Data   ′Data=strCompress.struncompress(LastSend)   ′WS.SendData LastSend &amp;amp; Chr(230)   WS.SendData LastSend &amp;amp; Chr(9) &amp;amp; Chr(9) &amp;amp; Chr(9) &amp;amp; Chr(9) &amp;amp; Chr(9) &amp;amp; Chr(9) &amp;amp;Chr(9) &amp;amp; Chr(9) &amp;amp; Chr(9) &amp;amp; Chr(9)   ′WS.SendData LastSend   ′Alive.Enabled=True Else   MsgBox″Sending File,Please Try Again Later″ End If ′Set strCompress=Nothing Exit Sub′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′errorhandle RaiseEvent SError(Err.Number,Err.Description) ′Set strCompress=Nothing′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′End SubPublic Sub SClose() On Error GoTo errorhandle   WS.Close   Exit Sub′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′&lt;dp n="d18"/&gt;errorhandle  RaiseEvent SError(Err.Number,Err.Description)′ ′′′′′ ′′′′′ ′ ′′′′′ ′′′′′′′′′′′′′′′′′′′′End SubPublic Function SGetData()As Variant SGetData=RecData RecData=″″ RecDataLen=0End FunctionPublic Function SGetFileName()As String SGetFileName=FileNameEnd FunctionPrivate Function Elminate(DataStr,delimiter As String)As String Dim StrArray()As String,i As Long StrArray=Split(DataStr,delimiter,-1,vbTextCompare) For i=LBound(StrArray)To UBound(StrArray)   Elminate=Elminate &amp;amp; StrArray(i) Next iEnd FunctionDim TimeCount As IntegerPublic WaitTime As LongPrivate Sub Form_Load() WaitTime=30 TimeCount=0&lt;dp n="d19"/&gt; Timer1.Enabled=False On Error Resume Next Anime.Open″c\download.avi″ Anime.AutoPlay=TrueEnd SubPrivate Sub Timer1_Timer()′ If TimeCount=WaitTime Then′MsgBox″Request Timeout,Please Try Again Later″′TimeCount=0′ Else′TimeCount=TimeCount+1′ End IfEnd Sub</pre>图3是本发明套接字工具的套接字控制程序在一电子商务的应用示意图。多个消费者端电脑10A,通过互联网(INTERNET)/企业网(Intranet)30通信服务端的网页服务电脑20A,以进行商务行为的网页浏览活动。此时,消费者端电脑10A所执行软件的情况,是在各自的消费者端电脑10A皆会执行本发明套接字工具的套接字控制程序,而消费者端电脑10A各自执行的应用软件可能是不同的,例如有些消费者端电脑可能是执行SQL的数据库应用软件、有些消费者端电脑可能是执行下载文件的应用软件、有些消费者端电脑可能是执行浏览器的应用软件等等,并且所有在消费者端电脑10A所执行的应用软件10B皆是利用调用套接字工具的套接字控制程序10C实现数据或文件传输。同时,供应者端的网页服务电脑20A执行本发明套接字工具的套接字控制程序10C,并且产生对应于与正通信中消费者端电脑10A数量的套接字20C,网页服务电脑20A执行一配合套接字工具所开发的服务应用软件20B,例如SQL访问应用软件(SQL Access server),该服务应用软件向SOL数据库或文件数据库访问,并将访问的数据或文件,通过套接字传送回应给对应的消费者端电脑10A的应用软件10B。
图4是本发明套接字工具的增值程序在具有一服务端/客户端的网络环境的应用示意图。本发明套接字工具进一步包括一组用于处理应用层软件的传输数据的增值程序,其特征在于该一组增值程序,其至少包含一加密程序、一解密程序;或者是至少包含一压缩程序、一解压缩程序。本发明套接字工具的增值程序主要是提供安全性、保密性及速度性的网络传输。
虽然本发明己以一较佳实施例揭露如上,但其并非用以限定本发明,本行业的普通技术人员在不脱离本发明的精神和范围内,可在本发明权利要求书所界定的范围内进行各种轻易思及的更动与润饰。
权利要求
1.一种用于应用层软件的套接字工具,其特征在于所述的套接字工具由此编写为一程序方式来实施,并执行一电脑内,以提供该电脑的应用层软件调用,使得该电脑能够通过TCP网络与其它电脑的应用层软件通信,该套接字工具包括一组用于通信TCP网络的套接字控制程序,其特征在于所述的套接字控制程序是利用TCP协议进行通信。
2.如权利要求1所述的套接字工具,其特征在于所述的套接字工具进一步包括一组用于处理该应用层软件的传输数据的增值程序。
3.如权利要求1所述的套接字工具,其特征在于该一组套接字控制程序,其至少包含一″SAccept″程序、一″SClose″程序、一″SConnect″程序、一″SGetData″程序、一″SListen″程序、一″SSendData″程序、一″SGetFileName″程序、一″SSendFile″程序、 一″SConnectionRequest″程序、一″SDataArrival″程序、一″SError″程序、一″SSendComplete″程序、一″SFileArrlval″程序、一″ConnectionTimeOut″程序。
4.如权利要求2所述的套接字工具,其特征在于该一组增值程序至少包含一加密程序、一解密程序。
5.如权利要求2所述的套接字工具,其特征在于该一组增值程序至少包含一压缩程序、一解压缩程序。
6.如权利要求1所述的套接字工具,其特征在于所述的应用层软件是一使用SQL的数据库应用软件。
7.如权利要求1所述的套接字工具,其特征在于所述的应用层软件是一个用于下载文件的应用软件。
8.如权利要求7所述的套接字工具,其特征在于所述的下载文件分别可以是一MP3歌曲文件、一GIF格式图像文件、一JPG格式图像文件、一影片格式文件。
9.如权利要求1所述的套接字工具,其特征在于所述的应用层软件是一聊天应用软件。
全文摘要
本发明提供一种用于应用层软件的套接字工具,该套接字工具是以编写为一程序的方式来实施,并在一电脑内执行,以提供该电脑的应用层软件调用,使该电脑能够通过TCP网络与其它电脑的应用层软件通信,该套接字工具包括一组用于和TCP网络通信的套接字控制程序,其中该套接字控制程序是利用TCP协议进行通信。此外,本发明套接字工具进一步包括一组用于处理该应用层软件的传输数据的增值程序。
文档编号G06F9/45GK1477502SQ0214204
公开日2004年2月25日 申请日期2002年8月23日 优先权日2002年8月23日
发明者梁国恩 申请人:梁国恩
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1