1、MESSAGE消息
1)頭欄位填寫說明
Call-id: 必選
CSeq: 必選
From: 必選
To: 必選
Max-Forwards: 必選
Via: 必選
常用的可選參數:
指定的消息體
2)消息實例
發送MESSAGE請求消息給192.168.2.48的6010埠,參考消息如下(帶了「Hello」的消息體):
MESSAGE sip:[email protected]:6010 SIP/2.0
Call-ID: @192.168.2.89
From: <sip:[email protected]>;tag=-0037-708c9a5cba8dd878
To: <sip:[email protected]>
CSeq: 1 MESSAGE
Via: SIP/2.0/UDP 192.168.2.89:14010;branch=z9hG4bK--22bd7222
Max-Forwards: 30
Allow: INVITE,ACK,OPTIONS,BYE,CANCEL,REGISTER,INFO,UPDATE,PRACK,REFER,SUBSCRIBE,NOTIFY,MESSAGE
Contact: <sip:192.168.2.89:14010>
Content-Type: text/plain
Content-Length: 5
Hello
收到來自192.168.2.48的6010埠的返回消息,參考消息如下(修改了消息體的內容,變成了「Hello amigo」):
SIP/2.0 200 OK
Via: SIP/2.0/UDP 192.168.2.89:14010;branch=z9hG4bK--22bd7222
From: <sip:[email protected]>;tag=-0037-708c9a5cba8dd878
To: <sip:[email protected]>;tag=-002-3c18e810ab17c76f
Call-ID: @192.168.2.89
CSeq: 1 MESSAGE
Allow: INVITE,ACK,OPTIONS,BYE,CANCEL,REGISTER,INFO,UPDATE,PRACK,REFER,SUBSCRIBE,NOTIFY,MESSAGE
Contact: <sip:192.168.2.48:54010>
Content-Type: text/plain
Content-Length: 11
2. 用JAVA編寫基於SIP協議的VoIP客戶端
swing的現狀是沒人用的東西
3. 在java程序的編寫上(注意不是問TCP/UDP協議的區別),基於UDP/TCP編寫SIP消息的收發有什麼區別
本來在java中UDP和TCP使用的包就不同!
UDP不連接就send() receive()
TCP需要獲得一個OutputStream和InputStream才能讀寫,在獲得流時就等於在建立連接
OK!?
4. 使用JAVA SOCKETS實現 SIP協議
使用二分搜索法來搜索指定的 int 型數數組,以獲得指定的值。
必須在進行此調用之前對數組進行排序(不管用什麼,只要排序了就可以,推薦,通過 Arrays.sort(int[]) 方法)。
如果沒有對數組進行排序,則結果是不確定的。
如果數組包含多個帶有指定值的元素,則無法保證找到的是哪一個。
看API啊
這里是API 里邊說的。
//到這里看看吧
網路知道的
我在那邊答了
5. 使用Java網路編程編寫SIP消息的收發,TCP和UDP有什麼區別
TCP---傳輸控制協議,提供的是面向連接、可靠的位元組流服務。當客戶和伺服器彼此交換數據前,必須先在雙方之間建立一個TCP連接,之後才能傳輸數據。TCP提供超時重發,丟棄重復數據,檢驗數據,流量控制等功能,保證數據能從一端傳到另一端。
UDP---用戶數據報協議,是一個簡單的面向數據報的運輸層協議。UDP不提供可靠性,它只是把應用程序傳給IP層的數據報發送出去,但是並不能保證它們能到達目的地。由於UDP在傳輸數據報前不用在客戶和伺服器之間建立一個連接,且沒有超時重發等機制,故而傳輸速度很快
UDP
UDP 與 TCP 的主要區別在於 UDP 不一定提供可靠的數據傳輸。事實上,該協議不能保證數據准確無誤地到達目的地。UDP 在許多方面非常有效。當某個程序的目標是盡快地傳輸盡可能多的信息時(其中任意給定數據的重要性相對較低),可使用 UDP。ICQ 短消息使用 UDP 協議發送消息。
許多程序將使用單獨的TCP連接和單獨的UDP連接。重要的狀態信息隨可靠的TCP連接發送,而主數據流通過UDP發送。
TCP
TCP的目的是提供可靠的數據傳輸,並在相互進行通信的設備或服務之間保持一個虛擬連接。TCP在數據包接收無序、丟失或在交付期間被破壞時,負責數據恢復。它通過為其發送的每個數據包提供一個序號來完成此恢復。記住,較低的網路層會將每個數據包視為一個獨立的單元,因此,數據包可以沿完全不同的路徑發送,即使它們都是同一消息的組成部分。這種路由與網路層處理分段和重新組裝數據包的方式非常相似,只是級別更高而已。
為確保正確地接收數據,TCP要求在目標計算機成功收到數據時發回一個確認(即 ACK)。如果在某個時限內未收到相應的 ACK,將重新傳送數據包。如果網路擁塞,這種重新傳送將導致發送的數據包重復。但是,接收計算機可使用數據包的序號來確定它是否為重復數據包,並在必要時丟棄它。
TCP與UDP的選擇
如果比較UDP包和TCP包的結構,很明顯UDP包不具備TCP包復雜的可靠性與控制機制。與TCP協議相同,UDP的源埠數和目的埠數也都支持一台主機上的多個應用。一個16位的UDP包包含了一個位元組長的頭部和數據的長度,校驗碼域使其可以進行整體校驗。(許多應用只支持UDP,如:多媒體數據流,不產生任何額外的數據,即使知道有破壞的包也不進行重發。)
很明顯,當數據傳輸的性能必須讓位於數據傳輸的完整性、可控制性和可靠性時,TCP協議是當然的選擇。當強調傳輸性能而不是傳輸的完整性時,如:音頻和多媒體應用,UDP是最好的選擇。在數據傳輸時間很短,以至於此前的連接過程成為整個流量主體的情況下,UDP也是一個好的選擇,如:DNS交換。把SNMP建立在UDP上的部分原因是設計者認為當發生網路阻塞時,UDP較低的開銷使其有更好的機會去傳送管理數據。TCP豐富的功能有時會導致不可預料的性能低下,但是我們相信在不遠的將來,TCP可靠的點對點連接將會用於絕大多數的網路應用。
6. 安卓4.0中有自帶的sip協議棧(Java編寫)嗎,或者需要移植像pjsip協議棧上去
好像自2.3以上版本就帶sip協議棧了
7. java sip打電話實現,如何判斷用戶不說話
基於sip的voip網路通話基本過程是:(1),建立sip伺服器,關於如何搭建sip伺服器,請參考我的博客點擊打開鏈接 (2)需要參與通話的所有客戶端注冊用戶到sip伺服器(3)一個客戶端發起sip通話到另一個客戶端,這個消息首先發到sip伺服器,sip伺服器收到消息後轉發到目的客戶端(4)目的客戶端接收電話.
<uses-permission android:name="android.permission.USE_SIP" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.ACCESS_wifi_STATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-feature android:name="android.hardware.sip.voip" android:required="true" />
<uses-feature android:name="android.hardware.wifi" android:required="true" />
<uses-feature android:name="android.hardware.microphone" android:required="true" />
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!
8. 請問怎麼通過SIP協議傳輸文件(比如圖片文件、視頻文件、文檔之類的)(用java語言)最好有代碼!謝謝
你指的是什麼?書?(卓越、當當都有賣)客戶端?(可以去中國上下,挺多的,不過我就用過sip-communicator,跟QQ的功能相近)源代碼?(這個也比較多,不過初學者一般就看jain-sip裡面的example例子吧