使用Java网络编程编写SIP消息的收发,TCP和UDP有什么区别? 网络编程中,TCP与UDP有什么不同啊
\u5728java\u7a0b\u5e8f\u7684\u7f16\u5199\u4e0a\uff08\u6ce8\u610f\u4e0d\u662f\u95eeTCP/UDP\u534f\u8bae\u7684\u533a\u522b\uff09\uff0c\u57fa\u4e8eUDP/TCP\u7f16\u5199SIP\u6d88\u606f\u7684\u6536\u53d1\u6709\u4ec0\u4e48\u533a\u522b\uff1f\u672c\u6765\u5728java\u4e2dUDP\u548cTCP\u4f7f\u7528\u7684\u5305\u5c31\u4e0d\u540c\uff01
UDP\u4e0d\u8fde\u63a5\u5c31send() receive()
TCP\u9700\u8981\u83b7\u5f97\u4e00\u4e2aOutputStream\u548cInputStream\u624d\u80fd\u8bfb\u5199,\u5728\u83b7\u5f97\u6d41\u65f6\u5c31\u7b49\u4e8e\u5728\u5efa\u7acb\u8fde\u63a5
OK!?
tcp\u80fd\u786e\u4fdd\u4f60\u7684\u5305\u6b63\u786e\u7684\u53d1\u9001\u5230\u4e86\u6307\u5b9a\u5730\u5740\uff0c\u800cudp\u53ea\u8d1f\u8d23\u53d1\u9001\uff0c\u4e0d\u7ba1\u662f\u5426\u9001\u8fbe\u53ca\u9001\u8fbe\u7684\u5305\u662f\u5426\u6b63\u786e\u3002
目前通用的编程语言有两种形式:汇编语言和高级语言。汇编语言的实质和机器语言是相同的,都是直接对硬件操作,只不过指令采用了英文缩写的标识符,更容易识别和记忆。它同样需要编程者将每一步具体的操作用命令的形式写出来。汇编程序通常由三部分组成:指令、伪指令和宏指令。汇编程序的每一句指令只能对应实际操作过程中的一个很细微的动作,例如移动、自增,因此汇编源程序一般比较冗长、复杂、容易出错,而且使用汇编语言编程需要有更多的计算机专业知识,但汇编语言的优点也是显而易见的,用汇编语言所能完成的操作不是一般高级语言所能实现的,而且源程序经汇编生成的可执行文件不仅比较小,而且执行速度很快。
高级语言是目前绝大多数编程者的选择。和汇编语言相比,它不但将许多相关的机器指令合成为单条指令,并且去掉了与具体操作有关但与完成工作无关的细节,例如使用堆栈、寄存器等,这样就大大简化了程序中的指令。同时,由于省略了很多细节,编程者也就不需要有太多的专业知识。
高级语言主要是相对于汇编语言而言,它并不是特指某一种具体的语言,而是包括了很多编程语言,如目前流行的VB、VC、FoxPro、Delphi等,这些语言的语法、命令格式都各不相同。
高级语言所编制的程序不能直接被计算机识别,必须经过转换才能被执行,按转换方式可将它们分为两类:
解释类:执行方式类似于我们日常生活中的“同声翻译”,应用程序源代码一边由相应语言的解释器“翻译”成目标代码(机器语言),一边执行,因此效率比较低,而且不能生成可独立执行的可执行文件,应用程序不能脱离其解释器,但这种方式比较灵活,可以动态地调整、修改应用程序。
编译类:编译是指在应用源程序执行之前,就将程序源代码“翻译”成目标代码(机器语言),因此其目标程序可以脱离其语言环境独立执行,使用比较方便、效率较高。但应用程序一旦需要修改,必须先修改源代码,再重新编译生成新的目标文件(* .OBJ)才能执行,只有目标文件而没有源代码,修改很不方便。现在大多数的编程语言都是编译型的,例如Visual C++、Visual Foxpro、Delphi等。
TCP保证送达,所以速度慢,但好控制。
UDP不保证送达,所以速度快,但需要自己检查是否丢包。
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可靠的点对点连接将会用于绝大多数的网络应用。
绛旓細鍥犳姹囩紪婧愮▼搴忎竴鑸瘮杈冨啑闀裤佸鏉傘佸鏄撳嚭閿欙紝鑰屼笖浣跨敤姹囩紪璇█缂栫▼闇瑕佹湁鏇村鐨勮绠楁満涓撲笟鐭ヨ瘑锛屼絾姹囩紪璇█鐨勪紭鐐逛篃鏄樉鑰屾槗瑙佺殑锛岀敤姹囩紪璇█鎵鑳藉畬鎴愮殑鎿嶄綔涓嶆槸涓鑸珮绾ц瑷鎵鑳藉疄鐜扮殑锛岃屼笖婧愮▼搴忕粡姹囩紪鐢熸垚鐨勫彲鎵ц鏂囦欢涓嶄粎姣旇緝灏忥紝
绛旓細鍩轰簬sip鐨剉oip缃戠粶閫氳瘽鍩烘湰杩囩▼鏄:(1),寤虹珛sip鏈嶅姟鍣,鍏充簬濡備綍鎼缓sip鏈嶅姟鍣,璇峰弬鑰冩垜鐨勫崥瀹㈢偣鍑绘墦寮閾炬帴 (2)闇瑕佸弬涓庨氳瘽鐨勬墍鏈夊鎴风娉ㄥ唽鐢ㄦ埛鍒皊ip鏈嶅姟鍣(3)涓涓鎴风鍙戣捣sip閫氳瘽鍒板彟涓涓鎴风,杩欎釜娑堟伅棣栧厛鍙戝埌sip鏈嶅姟鍣,sip鏈嶅姟鍣ㄦ敹鍒版秷鎭悗杞彂鍒扮洰鐨勫鎴风(4)鐩殑瀹㈡埛绔帴鏀剁數璇.<uses-permis...
绛旓細浣跨敤浜屽垎鎼滅储娉曟潵鎼滅储鎸囧畾鐨 int 鍨嬫暟鏁扮粍锛屼互鑾峰緱鎸囧畾鐨勫笺傚繀椤诲湪杩涜姝よ皟鐢ㄤ箣鍓嶅鏁扮粍杩涜鎺掑簭锛堜笉绠$敤浠涔堬紝鍙鎺掑簭浜嗗氨鍙互锛屾帹鑽愶紝閫氳繃 Arrays.sort(int[]) 鏂规硶锛夈傚鏋滄病鏈夊鏁扮粍杩涜鎺掑簭锛屽垯缁撴灉鏄笉纭畾鐨勩傚鏋滄暟缁勫寘鍚涓甫鏈夋寚瀹氬肩殑鍏冪礌锛屽垯鏃犳硶淇濊瘉鎵惧埌鐨勬槸鍝竴涓傜湅API鍟 杩欓噷鏄疉PI...
绛旓細閮藉彲浠ュ晩锛sip鏄熀浜庢枃鏈殑锛屼綘鐢java浠涔堢殑閮借鐨
绛旓細1锛氳蒋浠跺噯澶囷細A: SIP SERVER h for Linux鐨勶細oss1_2_1_0.zip B:JAVA鐜锛岃繖涓槸for Linux鐨勶紝 h 鏂囦欢鍚嶏細j2eesdk-1_4-linux.bin C: Tomcat, for Linux鐨勶細jakarta-tomcat-4.1.30.tar.gz 2锛氬畨瑁咃細 锛坵indows鐨勫緢绠鍗曪紝瀹夎j2re-1_4_2_04-windows-i586-p.exe 鐨凧AVA鐜锛屽弻鍑sip ...
绛旓細鏈潵鍦java涓UDP鍜孴CP浣跨敤鐨勫寘灏变笉鍚岋紒UDP涓嶈繛鎺ュ氨send() receive()TCP闇瑕佽幏寰椾竴涓狾utputStream鍜孖nputStream鎵嶈兘璇诲啓,鍦ㄨ幏寰楁祦鏃跺氨绛変簬鍦ㄥ缓绔嬭繛鎺 OK!?
绛旓細鏈塇TTP涓虹敤鎴稺eb, SMTP, POP, IMAP涓虹敤鎴风數瀛愰偖浠;FSP, TFTP鐢ㄤ簬鏂囦欢浼犺緭锛孨FS鐢ㄤ簬鏂囦欢璁块棶;鏂囦欢鍏变韩浣跨敤Gnutella鍜孊itTorrent;浼氳瘽鍙戣捣鍗忚(SIP)鍜孲kype鐢ㄤ簬璇煶閫氫俊銆傛澶栵紝鎮ㄧ殑绋嬪簭鍙互鍦ㄥ繀瑕佹椂瀹氫箟鑷繁鐨勫簲鐢ㄧ▼搴忕骇鍗忚銆(椤甸潰)5銆Java缃戠粶缂栫▼鍩烘湰姒傚康——IP銆乀CP銆乁DP IP琚璁℃垚鍏佽浠绘剰...
绛旓細1銆缂栧啓aidl鏂囦欢:ISipService.aidl,骞跺畾涔浣跨敤鐨勬帴鍙(灏辩瓑鍚屼簬interface涓鏍)2銆佷娇鐢╩akefile鐢熸垚涓庝箣鍚屽悕鐨JAVA鏂囦欢,SipService.java,姝ょ被缁ф壙extends ISipService.Stub骞跺疄鐜版帴鍙e畾涔夌殑鏂规硶鎴栬呭湪SipService extends Service,骞朵唬鐮佷腑鍔犲叆ISipService.stub sipImpl = new ISipService.stub(){//瀹炵幇鍏舵帴鍙f柟娉,鍦...
绛旓細鑰屼笖,鍥犱负 SIP 鐨勬秷鎭瀯寤烘柟寮忕被浼间簬 HTTP,寮鍙戜汉鍛樿兘澶熸洿鍔犳柟渚夸究鎹峰湴浣跨敤閫氱敤鐨缂栫▼璇█(濡 Java)鏉ュ垱寤哄簲鐢ㄧ▼搴忋傚浜庣瓑寰呬簡鏁板勾甯屾湜浣跨敤 SS7 鍜岄珮绾ф櫤鑳缃戠粶 (AIN) 閮ㄧ讲鍛煎彨绛夊緟銆佷富鍙彿鐮佽瘑鍒互鍙婂叾浠栨湇鍔$殑杩愯惀鍟,鐜板湪濡傛灉浣跨敤 SIP,鍙渶鏁版湀鏃堕棿鍗冲彲瀹炵幇楂樼骇閫氫俊鏈嶅姟鐨勯儴缃层 杩欑鍙墿灞曟у凡缁忓湪瓒婃潵瓒婂鍩轰簬 ...