(JAVA)基于Socket的TCP和UDP编程

最近空闲下来了,顺便学习了下Java的网络编程,例子都是来源网络,整理了下,先记录下来,以便后用!

一. TCP 、UDP、Scoket

TCP: Transmission Control Protocol

UDP: User Datagram Protocol

Socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API),通过Socket,我们才能使用TCP/IP协议。



TCP和UDP是OSI模型中的运输层中的协议。TCP提供可靠的通信传输,而UDP则常被用于让广播和细节控制交给应用的通信传输。

TCP充分实现爱呢了数据传输时各种控制功能,可以进行丢包的重发控制,还可以对次序乱掉的分包进行顺序控制。而这些在UDP中都没有。此外,TCP作为一种面向有连接的协议,只有在确认通信对端存在时才会发送数据,从而可以控制通信流量的浪费。


TCP与UDP如何加以区分使用?

TCP用于在传输层有必要实现可靠性传输的情况。由于它是面向有连接并具备顺序控制、重发控制等机制的。所以它可以为应用提供可靠传输。

另一方面,UDP主要用于那些对高速传输和实时性有较高要求的通信或广播通信。举一个IP电话进行通话的例子。如果使用TCP,数据在传送途中如果丢失会被重发,但是这样无法流畅地传输通话人的声音,会导致无法进行正常交流。而采用UDP,它不会进行重发处理。从而也就不会有声音大幅度延迟到达的问题。即使有部分数据丢失,也只是影响某一小部分的通话。此外,在多播与广播通信中也使用UDP而不是UDP。RIP、DHCP等基于广播的协议也要依赖于UDP。

二. TCP和UDP的区别

1. TCP面向连接;UDP是无连接的,即发送数据之前不需要建立连接。通俗理解:TCP就是打电话,对方必须应答,才能连接,UDP就是写信,只管信寄出去,不管对方收到与否;

2. TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付;

3. TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流;UDP是面向报文的;

UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等);

4. 每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信;

5. TCP首部开销20字节;UDP的首部开销小,只有8个字节;

6. TCP的逻辑通信信道是全双工的可靠信道,UDP则是不可靠信道;



三. 两者的程序设计框架

1. TCP:



2. UDP:




四. TCP、UDP优缺点

TCP优缺点:

优点:


1. TCP提供以认可的方式显式地创建和终止连接。


2.TCP保证可靠的、顺序的(数据包以发送的顺序接收)以及不会重复的数据传输。


3. TCP处理流控制。


4. 允许数据优先


5. 如果数据没有传送到,则TCP套接口返回一个出错状态条件。


6. TCP通过保持连续并将数据块分成更小的分片来处理大数据块。—无需程序员知道


缺点:TCP在转移数据时必须创建(并保持)一个连接。这个连接给通信进程增加了开销,让它比UDP速度要慢。


UDP优缺点:

1. UDP不要求保持一个连接


2. UDP没有因接收方认可收到数据包(或者当数据包没有正确抵达而自动重传)而带来的开销。


3. 设计UDP的目的是用于短应用和控制消息


4. 在一个数据包连接一个数据包的基础上,UDP要求的网络带宽比TDP更小。