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例子吧