PC到PC的IP電話實現

2021-04-16 12:26:38 字數 3182 閱讀 5175

文章摘要:

pc到pc的ip**實現

基於實驗和研究的目的,本文實現了乙個從計算機到計算機的ip**的軟體。軟體的開發環境為windows 98平台,開發工具採用visual c++ 5.0。本軟體能夠在網路上實現多人之間的文字傳輸和兩人之間的語音對話。下文將對本軟體展開分析。

一 軟體設計

實現此軟體的重點和難點如下:

圖一 語音傳輸流程

圖二軟體的整體結構和資料流程

至此我們已經搭起了整個軟體的基本框架,對於軟體的資料流程也已分析得比較透徹,下一步就是具體的實現了。

二 軟體實現

圖三 錄音流程 

程式中還有特別重要的一點是語音裝置的window訊息的相應,通過語音裝置傳送的一系列訊息,如mm_win_open錄音裝置開啟訊息,mm_wim_close錄音裝置關閉訊息等,我們可以響應語音裝置的開啟,關閉,開始錄音和放音,停止錄音和放音,錄音時乙個記憶體塊錄滿,放音時乙個記憶體塊放完等各種事件,來進行相關的處理。需要注意的是這些訊息在vc的classwizard類工具的訊息序列中是看不到的,需要手工編輯訊息響應巨集和**。

2.語音資料的網路傳輸

tcp/ip協議是網路上最通用的協議,本軟體採用tcp/ip協議來進行資料語音的網路傳輸。csocket類是visual c++ 4.0新增加的乙個類,它是對原來的windows socket api的封裝,用它進行網路程式設計比用windows socket api要方便得多。

建立網路的連線主要有如下三個步驟,一是在程式中加入windows sockets支援,二是以csocket為基類構造兩個新類cserversocket和cmsgsocket。cserversocket用來接收請求連線的申請,cmsgsocket用來傳輸資料。三是建立伺服器方和客戶機方的連線。下表顯示了在伺服器與客戶機之間建立通訊所需做的工作的順序,具體的函式引數可查閱連機文件。伺服器方首先構造乙個cserversocket類的物件,用來接收請求連線的申請,呼叫此物件的listen成員函式,表示處於等待連線狀態,等待客戶機方發出申請連線(connect)的訊息,當接收到此訊息後,cserversocket類的onaccept訊息響應函式即會響應,此時再構造乙個cmsgsocket類的物件(用來傳輸資料),然後呼叫cserversocket類的accept成員函式表示接受連線申請,若此函式返回真值,則表示連線成功。客戶機方則只需構造乙個cmsgsocket類的物件,呼叫此物件的connect成員函式,申請連線即可。

按上述順序建立連線後,伺服器方和客戶機方都呼叫cmsgsocket物件的send函式來傳送資料,當接收到資料時,cmsgsocket類的onreceive訊息響應函式即會響應,再呼叫receive函式來接收資料,這樣伺服器方和客戶機方就可以進行資料通訊了。

在程式中要注意網路訊息的響應,如接收到資料,有客戶申請連線,已連線上,對方已斷開等等,與一般的訊息響應函式不同,它已經整合在csocket類的成員函式中,而不用訊息響應巨集。如在cserversocket類中過載csocket類的成員函式onaccept,即可以處理申請連線的訊息,在cmsgsocket類中過載csocket類的成員函式onreceive,即可以處理接收到資料的訊息。過載csocket類的成員函式onclose函式,即可以處理對方網路已斷開的訊息。另外用csocket類的成員函式getpeername可以得到對方的ip位址,在程式中可以儲存下來,供以後連線使用,使用者不必再重新輸入。

3.對單工音效卡的支援

音效卡有單工音效卡和雙工音效卡之分,雙工音效卡可以同時錄音和放音,而單工音效卡乙個時間段只能從事一種工作,要麼錄音,要麼放音。

對ip**來說,當然是要用雙工音效卡,才能達到**的效果。但考慮到當前廣大使用者的計算機配置的都是單工音效卡,本軟體也加入了對單工音效卡的支援。軟體可以自動檢測計算機的音效卡,針對不同的音效卡採用不同的工作方式。當音效卡為雙工音效卡時,可以同時聽和說,當音效卡為單工方式時則使用者可以控制,在聽和說之間進行切換。

具體的實現方法是,當一方為單工音效卡時,首先通過網路通知對方,讓對方有心理準備。然後在實際的通話過程中,一方進行切換時,就通知另一方,另一方也自動進行切換,進入對應的方式。即一方為說時,另一方就自動為聽,反之亦然,這樣雙方就不會發生衝突。具體的程式設計實現比較複雜,但只要考慮周到,也並不困難,這裡不再贅述。

三 軟體介面和使用方法

軟體介面如圖四,介面上方的ip位址列可輸入欲連線的計算機的ip位址,單擊右邊的代表連線含義的圖示即可與之連線,連通或未連通在介面上方的文字框內都有提示。使用者也可以按連線按紐旁邊的斷開按紐斷開與任意已連通的物件的網路連線。

網上成員的下拉框內有當前與使用者連通的所有使用者的姓名。

介面下方的文字框可以輸入多行文字,在介面下方的下拉框內選擇傳送物件,傳送物件就是所有與使用者連通的其他人,單擊左邊的按紐,就可以將文字傳送給所選擇的物件。如下圖:接收到的文字和傳送物件會在介面上方的文字框內顯示出來。

單擊**按紐,類似與**撥號,使用者可以選擇乙個與他連通的人進行語音通話,對方的計算機就會有振鈴聲,對方可以選擇是否接通進行通話,類似與摘機。若對方同意通話,雙方就可以用麥克風和耳機進行通話。若音效卡具備全雙工功能,即音效卡可以同時錄音和放音,雙方就可以象打**一樣進行交談。若音效卡不具備全雙工功能,事實上當前市場上的大多數音效卡都不具備此效能,則聽和說同時只能選擇其中一種,考慮到實際情況,本軟體提供了對單工音效卡的支援,可以自動識別音效卡的單雙工特性,分別予以處理,如果是單工音效卡,使用者可以在說和聽時單擊**圖示按紐(當通話時,**圖示會改變為麥克風圖示或喇叭圖示,麥克風圖示代表說,喇叭圖示代表聽),進行功能切換。當然最好是雙方都具備全雙工音效卡,都可以同時說和聽,這樣才有**的效果。

通話完畢,雙方都可以單擊**圖示旁邊的停止圖示按紐停止交談,類似與結束通話**。

使用者依據網路狀況的好壞,可以採用壓縮和不壓縮的方式來傳輸語音。在區域網內用不壓縮的方式就可以達到很好的效果。

圖四 軟體介面

實踐證明,本軟體在實際執行中穩定可靠,在區域網上音質和延遲都基本上達到了**的效果。

四 軟體的不足和進一步工作

本軟體從總體上已經達到了ip**的基本要求,但是由於作者的時間和條件有限,軟體也存在一些不足和需要進一步完善的地方。

最大的不足是每秒0.8k的語音資料在我們國家當前的internet上還是顯得過高,本軟體中語音壓縮率還有待繼續提高。

另外在軟體的整體功能上還可以進一步加強。例如語音通話中可以加入錄音功能,實現起來也並不困難,將記憶體中的語音資料寫入檔案即可,同理也可以實現語音信箱的功能。其它一些重要的功能,如檔案傳輸,多方通話等等,都可以加入軟體中。

作者會員名:ruan_bangqiu

PC到PC的IP電話實現

文章摘要 pc到pc的ip 實現 基於實驗和研究的目的,本文實現了乙個從計算機到計算機的ip 的軟體。軟體的開發環境為windows 98平台,開發工具採用visual c 5.0。本軟體能夠在網路上實現多人之間的文字傳輸和兩人之間的語音對話。下文將對本軟體展開分析。一 軟體設計 實現此軟體的重點和...

PC到PC的IP電話實現

文章摘要 pc到pc的ip 實現 基於實驗和研究的目的,本文實現了乙個從計算機到計算機的ip 的軟體。軟體的開發環境為windows 98平台,開發工具採用visual c 5.0。本軟體能夠在網路上實現多人之間的文字傳輸和兩人之間的語音對話。下文將對本軟體展開分析。一 軟體設計 實現此軟體的重點和...

免費PC到固話 手機 小靈通的電話軟體

關於加人取消一分鐘的說明 必須是別人新申請的帳號第乙個加你為好友,系統預設就是你邀請了這位朋友使用此軟體,系統就會獎勵你一歐元,並且給予你7日的無限打機會。不過大家不必刻意的去追求別人加你為好友,因為系統預設中國是免費撥打的,只是保證帳戶有1歐元或者2歐元就可以無限制了,我覺得如果已經是無限制而且有...