TCP协议和UDP协议的区别及简单运用

TCP:
transfer control protocol
一种面向连接(连接导向)的、可靠的、 基于字节流的运输层(Transportlayer) 通信协议 。
特点
面向连接
点到点的通信
高可靠性
占用系统资源多、效率低
其中这里就会涉及到三次握手:
1.客户端发送了一个带有SYN的Tcp报文到服务器,这个三次握手中的开始。表示客户端想要和服务端建立连接。
2.服务端接收到客户端的请求,返回客户端报文,这个报文带有SYN和ACK标志,询问客户端是否准备好。
3.客户端再次响应服务端一个ACK,表示我已经准备好,连接建立成功。
在java中的使用:
  1. 使用基于TCP协议的Socket网络编程实现
  2. TCP协议基于请求-响应模式
  3. 在网络通讯中,第一次主动发起通讯的程序被称作客户端(Client)程序
  4. 第一次通讯中等待连接的程序被称作服务器端(Server)程序
  5. 利用IO流实现数据的传输
示例代码:文件上传
服务端:
/**
* 存储文件
* 创建服务器
* 1、指定端口 使用ServerSocket创建服务器
* 2、阻塞式等待连接 accept
* 3、操作: 输入输出流操作
* 4、释放资源
*/
public class FileServer {
   public static void main(String[] args) throws IOException {
      System.out.println("-----Server-----");
      // 1、指定端口 使用ServerSocket创建服务器
      ServerSocket server =new ServerSocket(8888);
      // 2、阻塞式等待连接 accept
      Socket  client =server.accept();
      System.out.println("一个客户端建立了连接");
      // 3、操作: 文件拷贝 存储
      InputStream is =new BufferedInputStream(client.getInputStream());
      OutputStream os =new BufferedOutputStream(new FileOutputStream("baidu123.html"));
      byte[] flush =new byte[1024];
      int len = -1;
      while((len=is.read(flush))!=-1) {
         os.write(flush,0,len);
      }
      os.flush();
      //3、释放资源
      os.close();
      is.close();
      // 4、释放资源
      client.close();
      server.close();
   }
}

客户端:

/**
* 上传文件
* 创建客户端
* 1、建立连接: 使用Socket创建客户端 +服务的地址和端口
* 2、操作: 输入输出流操作
* 3、释放资源
*/
public class FileClient {
   public static void main(String[] args) throws UnknownHostException, IOException {
      System.out.println("-----Client-----");
      //1、建立连接: 使用Socket创建客户端 +服务的地址和端口
      Socket client =new Socket("localhost",8888);
      //2、操作: 拷贝 上传
      InputStream is =new BufferedInputStream(new FileInputStream("baidu.html"));
      OutputStream os =new BufferedOutputStream(client.getOutputStream());
      byte[] flush =new byte[1024];
      int len = -1;
      while((len=is.read(flush))!=-1) {
         os.write(flush,0,len);
      }
      os.flush();
      //3、释放资源
      os.close();
      is.close();
      client.close();
   }
}
UDP:
User DatagramProtocol
一种无连接的传输层协议,提供面向事 务的简单不可靠信息传送服务。
特点
非面向连接,传输不可靠,可能丢失
发送不管对方是否准备好,接收方收 到也不确认
可以广播发送
非常简单的协议,开销小,基于报文
操作
主要涉及到两个类。
DatagramSocket:用于发送或接收数据包的套接字
DatagramPacket:数据包
下面就接受发送信息来看看:
发送步骤:
1、使用DatagramSocket  指定端口 创建发送端
2、准备数据 ,一定转成字节数组
3、封装成DatagramPacket 包裹,需要指定目的地
4、发送包裹send(DatagramPacket p)
5、释放资源
接受步骤:
1、使用DatagramSocket  指定端口 创建接收端
2、准备容器 封装成DatagramPacket 包裹
3、阻塞式接收包裹receive(DatagramPacket p)
4、分析数据
5、释放资源
示例:
发送端
System.out.println("发送方启动中.....");
// 1、使用DatagramSocket  指定端口 创建发送端
DatagramSocket client =new DatagramSocket(8888);
//2、准备数据 一定转成字节数组
String data = "悟空最牛皮";
byte[] datas = data.getBytes();
//3、封装成DatagramPacket 包裹,需要指定目的地
DatagramPacket packet =new DatagramPacket(datas,0,datas.length,
   new InetSocketAddress("localhost",6666));
//4、发送包裹send(DatagramPacket p) *
client.send(packet);
// 5、释放资源
client.close();

接收端:

System.out.println("接收方启动中.....");
// 1、使用DatagramSocket  指定端口 创建接收端
DatagramSocket server =new DatagramSocket(6666);
// 2、准备容器 封装成DatagramPacket 包裹
byte[] container =new byte[1024*60];
DatagramPacket packet = new DatagramPacket(container,0,container.length);
// 3、阻塞式接收包裹receive(DatagramPacket p)
server.receive(packet); //阻塞式
// 4、分析数据
byte[]  datas =packet.getData();
int len = packet.getLength();
System.out.println(new String(datas,0,len));
// 5、释放资源
server.close();

TCP与UDP的区别

1.TCP基于连接与UDP无连接﹔

2.对系统资源的要求:TCP较多,UDP少;

3.UDP程序结构较简单;

4.TCPS是流模式,UDP是数据报模式;

5.TCP保证数据正确性,UDP可能丢包,TCP保证数据顺序,UDP不保证;

UDP和TCP协议的主要区别是两者在如何实现信息的可靠传递方面不同。

TCP协议中包含了专门的传递保证机制,当数据接收方收到发送方传来的信息时,会自动向发送方发出确认消息,发送方只有在接收到该确认消息之后才继续传送其它信息,否则将一直等待直到收到确认信息为止。与TCP不同,UDP协议并不提供数据传送的保证机制。如果在从发送方到接收方的传递过程中出现数据报的丢失,协议本身并不能做出任何检测或提示。因此,通常人们把UDP协议称为不可靠的传输协议。相对于TCP协议,UDP协议的另外一个不同之处在于如何接收突发性的多个数据报。不同于TCP, UDP并不能确保数据的发送和接收顺序。

关注公众号,可以免费获取毕业设计项目、各种免费软件、资料,笔记哦。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

心之所向...

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值