一種用於應用層軟體的套接字工具的製作方法
2023-06-04 10:37:31 2
專利名稱:一種用於應用層軟體的套接字工具的製作方法
技術領域:
本發明涉及一種套接字(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使用例 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; DataResult″ End If Else MsgBox″ERROR″ End If以下是本實施更詳細的例子Option Explicit ′Const m_Def_WaitSec=30 Const m_Def_LocalPort=1024 ′Const m Def TimeOut=30dp/ ′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 ′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′dp/ ′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 sAs Byte Private FileName As String,TbytesReceive As Long,TbytesReceived As Long′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′UserControl Property′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′Public Property Get waitSecAs 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 LocalPortAs Long LocalPort=m_LocalPortEnd Propertydp/Public Property Let LocalPort(ByVal Port As Long) m_LocalPort=Port WS.LocalPort=m_LocalPort PropertyChanged″localport″End Property′Public Property Get TimeOutAs 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 TimerFlagAs Boolean′TimerFlag=m_TimerFlag′End Property′Public Property Let TimerFlag(ByVal vNewValue As Boolean)′m_TimerFlag=vNewValue′PropertyChanged″timerflag″′End Property′Public Property Get CheckAliveAs Boolean′CheckAlive=m_CheckAlivedp/′End Property′Public Property Let CheckAlive(ByVal vNewValue As Boolean)′m_CheckAlive=vNewValue′PropertyChanged″checkalive″′End Property′Read OnlyPublic Property Get StateAs IntegerState=WS.StateEnd PropertyPublic Property Get SocketHandleAs Long SocketHandle=WS.SocketHandleEnd PropertyPublic Property Get RemotePortAs Long RemotePort=WS.RemotePortEnd PropertyPublic Property Get LocalIpAs Variant LocalIp=WS.LocalIpEnd PropertyPublic Property Get RemoteIpAs Variant RemoteIp=WS.RemoteHostIP End Property′Private Sub Alive Timerdp/′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_TimeOutdp/′ 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_Closedp/ 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,tempStrArrayAs 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; Chr(9) amp; Chr(9) amp; Chr(9) amp; Chr(9) amp; Chr(9) amp; Chr(9)amp; Chr(9) amp; Chr(9) amp; Chr(9)Then RData=Left(RData,Len(RData)-10) RecData=RecData amp; RData End If RecData=Elminate(RecData,LiveChar) On Error GoTo errorhandle ′RecData=strCompress.struncompress(RecData) Select Case RecDatadp/ 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; FileName) TbytesReceived=0 End IfCase Normal ′For Text Messagedp/ WS.GetData RData,vbString If Right(RData,1)=Chr(230)Then If Right(RData,10)=Chr(9) amp; Chr(9) amp; Chr(9) amp; Chr(9) amp; Chr(9) amp; Chr(9) amp;Chr(9) amp; Chr(9) amp; Chr(9) amp; Chr(9)Then RData=Left(RData,Len(RData)-10) RecData=RecData 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; FileName For Binary Access Write As #1 SSendData(″ReadyToReceive″) Send_Mode=ReceiveBinary End If End If Else RaiseEvent SDataArrival(bytesTotal) End Ifdp/ RecData=″″ Else If RData<>LiveChar Then RecData=RecData 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 SSendCompletedp/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 Subdp/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; FSO.GetFile(FileName).Name 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.Showdp/′ WaitingForm.Timer1.Enabled=True′ End If′ DoEvents ′ LastSend=strCompress.strCompress(Data) LastSend=Data ′Data=strCompress.struncompress(LastSend) ′WS.SendData LastSend amp; Chr(230) WS.SendData LastSend amp; Chr(9) amp; Chr(9) amp; Chr(9) amp; Chr(9) amp; Chr(9) amp; Chr(9) amp;Chr(9) amp; Chr(9) amp; Chr(9) 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′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′dp/errorhandle RaiseEvent SError(Err.Number,Err.Description)′ ′′′′′ ′′′′′ ′ ′′′′′ ′′′′′′′′′′′′′′′′′′′′End SubPublic Function SGetDataAs Variant SGetData=RecData RecData=″″ RecDataLen=0End FunctionPublic Function SGetFileNameAs String SGetFileName=FileNameEnd FunctionPrivate Function Elminate(DataStr,delimiter As String)As String Dim StrArrayAs String,i As Long StrArray=Split(DataStr,delimiter,-1,vbTextCompare) For i=LBound(StrArray)To UBound(StrArray) Elminate=Elminate amp; StrArray(i) Next iEnd FunctionDim TimeCount As IntegerPublic WaitTime As LongPrivate Sub Form_Load WaitTime=30 TimeCount=0dp/ 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圖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日
發明者梁國恩 申請人:梁國恩