• 沒有找到結果。

清除選取名單

在文檔中 網路通訊系統 (頁 35-0)

第四章 實務製作過程

4.1.7 清除選取名單

'移到朋友資料表中的第一筆資料 EnvMain.rsFriend.MoveFirst '搜尋所選的名單

EnvMain.rsFriend.Find "ListIndex='" & FriendList.ListIndex &

_"'"

'刪除資料庫裡的資料

EnvMain.rsFriend.Delete '刪除 Listbox 裡的資料

FriendList.RemoveItem FriendList.ListIndex 如圖:

圖 4.13 刪除朋友名單過程

4.2 Server 端

本軟體的 server 是由 VB+access 來達成的,至於和 client 端的溝 通則是透過 winsock 來達,如圖 4.14

圖 4.14 Client & Server 概念圖

client server

資料庫 資料庫

Server 資料庫

資訊傳會給 client。 server 建立一條連線,透過這條連線 server 可以知道這個 client 的 上線和斷線。這時 server 也會順便檢查是否有人有留過訊息給本人,

如果有的話又分兩種,一是文字訊息,一是語音訊息。如果是文字訊 息,則直接傳回給 client,如果是語音的話,就直接傳給 client,如 果是語音的話,會再建立一條連線,用來傳語音檔案。 (client),這時來源端(client)會把自已 ID 和對方的 ID 以及要送到對方的文字訊息一起送到 server 保存起來。

b.訊息:這功能也和文字訊息一樣,也是對方不在線上所以來源端 (client)也是把自已的 ID 和對方的 ID 的語音訊息,不過 如果是語音訊息,沒有辦法直接用前和 server 建立的那

條連線直接傳,所以要透過在建一條來達成傳輸功能。

過程如下:

Rs.addnew SID,DID,所留下的檔名

Open 檔名 for binary access write as #1 接受檔案

4.2.5 更新:這個功能其實和註冊差不多,不過,這功能是要架構在 client 端必須是要先註冊才行使用,這功能主要是讓 server 能夠知道 client 的基本資料是維持在最新的,

已方便有人透過 search 這功能搜尋時能夠找到使用者

這個功能是能夠讓使用者在 Client 使用搜尋(search)過後,找到 自已想要加入的對象時使用。這個功能在 Server 中只負責傳送兩個 Client 中的互相溝通的訊息而已,來源端(Client),也就是要把對方 加入好友的使用者會告訴 Server,要加入好友的對象是誰,並由 Server 把這要求送到目的端(Client),這時如果目的端(Client), 不在線上 and(winsock1.tag = DID)’如果在現上就把要送過去。

送要求

Server 資料庫

wend 把要求存起來

備註:

database table:member<-記錄所有使用者的基本資料 message<-記錄留言等等的訊息

member tabled 欄位:

nickname (匿稱) memberid(使用者 ID) memberip (使用者 IP) email(使用者 Email)

password(使用者的 password) online(使用者狀態) someone(是否有人找過使用者) occupation(使用者職業) birthday(使用者生日) sex(使用者性別)

introduction(使用者的簡介) message table 的欄位:

sid(來源的使用者 ID) did(目的地的使用者 ID)

如上圖所示,電腦 A 必須要得知電腦 B 的 IP Address,故先要向 Server 查詢電腦 B 的相關資訊(在此之前,雙方都把自己的資訊登錄到 Server 上)。

圖 4.19 雙方進行 H.323 通訊

如上圖所示,電腦 A 和電腦 B 建立了 H.323 Session。此時便算是 兩台電腦直接進行點對點通訊,不需要 Server 提供服務。由這兩個圖 得知兩台電腦間的通訊有兩個重要步驟,一個是電腦 A(呼叫者)要發出 呼叫給電腦 B(被呼叫者);一個是電腦 B(被呼叫者)要回應呼叫給電腦 A(呼叫者)。

接下來就開始說明呼叫者和被呼叫者所要做的動作流程。過程 如圖 4.19

電腦 A 電腦 B

2

Server

電腦 A 發出呼叫給電腦 B,若電腦 B 同意通訊則進 行 H.323 的通訊

H.323 Session

建立和啟動 TAPI object

使用 TAPI object 列舉電腦上所有可用的 Address objects

列舉各 Address object 所支援的位址類型

根據適當媒體 (語音、視訊等) 和位址類型的支援查詢 來選擇 Address object

使用 Address object 的 CreateCall 方法來建立與特定位址 相關的 Call object

在 Call object 上選擇適當的終端機

呼叫 Call object 的 Connect 方法以找到呼叫

圖 4.20 呼叫者發出呼叫的流程圖 4.3.2 呼叫者的呼叫動作

以上是發出呼叫動作的流程圖,以下是比較細部的說明。

1. 建立和啟動 TAPI object:

由於 TAPI object 是 TAPI 3.0 API 的入口,所以要先建立並且初始 化,程式碼片段如下所示:

2. 使用 TAPI object 列舉電腦上所有可用的 Address objects:

3. 列舉各 Address object 所支援的位址類型:

4. 根據適當媒體 (語音、視訊等) 和位址類型的支援查詢來選擇 Address object:

每當列舉一種 Address 便要檢查此位址類型和媒體類型,當兩者都 符合需求便可以作為指定的 Address。第 3 和第 4 步的程式片段如 下表示

'//create the tapi object Set gobjTapi = New TAPI

'//call Initialize before calling any other tapi function Call gobjTapi.Initialize

'//set the EventFilter to accept all defined tapi events gobjTapi.EventFilter = TAPI3_ALL_TAPI_EVENTS

'//register the outgoing interface (the one that will actually '//receive and process the events)

Set gobjTapiWithEvents = gobjTapi

Dim gobjAddress As ITAddress

Dim objCollAddresses As ITCollection Set objCollAddresses = gobjTapi.Addresses

5. 使用 Address object 的 CreateCall 方法來建立與特定位址相關的 Call object:

程式片段如上表示,strDestAddress 是對方的位址、nSelectedType 是線路類型(如 LINEADDRESSTYPE_IPADDRESS)、lMediaTypes 是媒 體類型(如 TAPIMEDIATYPE_AUDIO),以上三個參數是一個 Call 的 基本資訊。

6. 在 Call object 上選擇適當的終端機:

其說明註解和程式碼片段如下所示

bFound = False

For indexAddr = 1 To objCollAddresses.Count

Set objCrtAddress = objCollAddresses.Item(indexAddr) Set objMediaSupport = objCrtAddress

Set objAddressCapabilities = objCrtAddress

If objMediaSupport.QueryMediaType( nSelectedType ) bFound = True

End If

If bFound = True Then Exit For Next indexAddr

Set gobjAddress = objcollAddresses.Item(indexAddr)

Set gobjCall = gobjOrigAddress.CreateCall( strDestAddress, _ nSelectedType, lMediaTypes)

7. 呼叫 Call object 的 Connect 方法以找到呼叫

'query for ITBasicCallControl, the call control interface Dim objCallControl As ITBasicCallControl

Set objCallControl = gobjReceivedCallInfo

'query ITTerminalSupport from Address object Dim objTerminalSupport As ITTerminalSupport Set objTerminalSupport = gobjAddress

Dim objTerminal As ITTerminal

Set objTerminal = objTerminalSupport.GetDefaultStaticTerminal( _ lMediaType, dir)

'Select the terminal before answering

'we'll need the ITStreamControl interface for doing this.

Dim objStreamControl As ITStreamControl Set objStreamControl = objCallControl If Not (objStreamControl Is Nothing) Then Dim objITCollStreams As ITCollection

Set objITCollStreams = objStreamControl.Streams Dim nIndex As Long, objCrtStream As ITStream

For nIndex = 1 To objITCollStreams.Count

Set objCrtStream = objITCollStreams.Item(nIndex) If objCrtStream.MediaType = lMediaType Then

gobjCall.Connect (False)

建立和啟動 TAPI object

使用 TAPI object 列舉電腦上所有可用的 Address objects

列舉各 Address object 所支援的位址類型

根據適當媒體 (語音、視訊等) 和位址類型的支援查詢 來選擇 Address object

以適當的 Address object 在特定media type 中登錄有 興趣的物件

以 Address object 登錄呼叫事件處理程式 (亦即建置 ITCallNotification 介面)

TAPI 透過 ITCallNotification 通知應用程式有新的呼 叫,然後建立 Call object

在 Call object 上選擇適當的Terminal

呼叫 Call object 的Answer 方法以應答呼叫 呼叫 Call object 的Connect 方法以找出呼叫

圖 4.21 被呼叫者回應呼叫的流程圖 4.3.3 被呼叫者的反應

'設定可能會觸發的事件

Const TAPI3_CALL_EVENTS = _ TE_CALLMEDIA Or _

TE_CALLNOTIFICATION Or _ TE_CALLSTATE

'把它加入到 EventFilter,讓 TAPI 程式可以接受事件觸發 gobjTapi.EventFilter = TAPI3_CALL_EVENTS

'登錄呼叫事件處理程式

Set gobjTapiWithEvents = gobjTapi

Dim fOwner As Boolean, fMonitor As Boolean

Dim lMediaTypes As Long, lCallbackInstance As Long

fOwner = True fMonitor = False

lMediaTypes = TAPIMEDIATYPE_AUDIO lCallbackInstance = 1

glRegistrationToken = gobjTapi.RegisterCallNotifications( _ gobjAddress, _

試。其結果是成功的,在聲音和視訊都能夠有良好品質的狀況下進行 通訊。以下的圖片是其成果:

1. 開啟 NetMeeting 端的 IP Address 如下

圖 4.22 NetMeeting 端的狀況

2.由本系統程式發送呼叫訊號給對方的 NetMeeting

圖 4.23 本專題測試程式的狀況

3.NetMeeting 收到呼叫,按下接受,同意互相通訊

圖 4.24 NetMeeting 接收到呼叫

4.雙方正常達成通訊的溝通(包括 Voice 和 Video)

圖 4.26(上圖)本專題測試程 式通訊後狀況;圖中的人像 是本組成員。

圖 4.25(左圖)是 NetMeeting 通訊後狀況。

第五章 實作之問題討論及解決方法

Q2:VB6.0 中的 Winsock 元件,在使用 Winsock1(0).Listen 變成 接受連線用的之後,其它使用 Winsock1 的 Winsock 陣列(例 如:Winsock(5))就不能再做向別人連線的動作。

Sol:另外使用一個 Winsock 元件”Winsock1”來負責做向別人連 線的動作,Winsock2 用來接受連線要求。後來參考了一些

Client 連到 Server 做動作時就會造成 Server 忙於把被查的 資料更新到營幕上,所以造成 Server 緩慢。把 Server 改成 不把被查的資料更新在營幕上,情況就有改善了。

TAPI 端:

Q1:由於國內相關的中文文件太少.故花了許多時間研究了外國的相關 文件.並且沒有很多 Samplay Code 可以參考.故只能辛苦鑽研 TAPI 的 SDK 文件.

Sol:時間就是關鍵

Q2:有時候會因為網路頻寬的不足,所以聲音和視訊會 delay, Sol:目前還沒有一個有效的方法來解決.

第六章 結論與展望

VoIP(Voice over Internet Protocol)是指在 IP 數據網絡上

(IP-based data networks)提供通話服務,為網絡通訊的一大突破。

在 TCP/IP 網路協定上,可以將語音數字化,經過壓縮,以封包型態傳 換,稱之為 VoIP Trunk Gateway,還有打當地電話還是要付費,這時候計 費和此 VoIP Trunk Gateway 裝置提供就要靠 ITSP(Internet Telephony Service Provider ,也就是網際網路電話服務供應商),類似於使用行 動電話可以選擇 ”中華電信”或是”台灣大哥大”等等不同的公司 提供服務一樣,您要使用網路電話,也必須選擇網際網路電話服務供應 商,這些公司提供將使用者發送的 VoIP 語音封包轉接到世界各地市內 電話的服務(PC to Phone),因此可以為企業或個人節省可觀的長途電 話費,所以,許多的服務及設備公司也都想參與 VoIP 的發展,這也就是 and Sullivan 的數據分析,經由傳統公眾電信網絡(PSTN) 打電話, 將因網路電話的快速成長而逐年萎縮至市場的 20%以內,其研究資料 顯示,一九九八年上網通話量僅佔通話市場的 6.2%,未來每年網路電

話將以數倍快速成長,其預估電信公司每年將會失去 15~20%的語音市 場,到二○○四年,經由 PSTN 打電話的僅剩 18.9%,而其餘 81%利用 傳統電信公司網路打電話的則將被網路電話及其它方式取代,可見得 網路電話在未來極具潛力。

第七章 心得

client 的這一組,不過主要是做 server,一開始也是遇到問題,後來

看了網路上的資訊和書,才了解到其實可以用 winsock 做出來,這時

雖然當時便有了像 NetMeeting 這樣的產品存在,但是在台灣真正 使用網路來講電話的人還是不夠普及。所以這樣的技術在台灣根本不

參考資料

[1] 王國榮著,Visual Basic 資料庫程式設計,旗標出版社,2001 年 10 月

[2] 陳峰棋著,Visual Basic 網路應用程式設計,知城出版社,2002 年 3 月

[3] 盧毅著,Visual Basic 程式設計學習寶典,碁峯出版社,2000 年 8 月

[4] Peter G. Aitken 著; 張力平,吳佛東譯,深入 VISUAL BASIC 4.0 系統核心,松崗出版社,1996 年

[5] 蕭世彰,周千代編著,Visual Basic 6.0 Activex 控制項技術手 冊,儒林出版社,2000 年

[6] 王國榮著,Visual Basic 6.0 與 Windows API 講座,旗標出版社,

1998 年

[7] 網路通訊 127 期,2002 年 2 月份 [8] 網路通訊 128 期,2002 年 3 月份

[9] 網路資訊 122+123 期,2002 年 1、2 月份 [10] 網路資訊 132 期,2002 年 11 月份 [11] http://www.msdn.microsoft.com/

[12] http://www.iptelephony.org/ (VoIP) [13] http://www.ip-centrex.org/ (IP Centrex)

[14] http://www.pulver.com (VoIP 分析師 Jeff Pulver 的網頁)

附錄

操作手冊

程式的主畫面,將滑鼠停在按鈕或其它介 面上,會出現輔助訊息,顯示其功能。

右邊的快速啟動按鈕可以在點選使用者後 ,快速的使用常用的功能,不用再另外按 滑鼠右鍵或工具列。

工具列的管理功能

執行功能

工具功能

說能功能:幫助使用軟體

按滑鼠右鍵可快速使用常用的功能

Step1:第一次使用本軟體,系統會自動跳出註冊視窗,填寫完註冊資 訊後,按下確定,系統會自動將註冊資訊傳給 Server 完成註冊 手序。

Step2:使用功具列的“查詢其它使用者名單” 功能,選擇 ID、Name 或 Email,然後輸入查詢關鍵字,按下搜尋鈕向 Server 查詢其 它使用者,用來加入朋友名單。

Step3:找到要加入的朋友後,按下加入好友鈕,就會傳遞要求加入好

Step3:找到要加入的朋友後,按下加入好友鈕,就會傳遞要求加入好

在文檔中 網路通訊系統 (頁 35-0)

相關文件