网络通信 TCP UDP

1.TCP  UDP简介 

TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。两台计算机可以把数据当做一个双向字节流进行交换。(IP协议是一种网络层协议,规定每个互联网上的计算机只能有一个唯一的ip地址)

UDP协议全称是用户数据报协议,在网络中它与TCP协议一样用于处理数据包,是一种无连接的协议。

两者区别:

 1.基于连接与无连接,TCP相当于打电话,UDP相当于发短信
  2.TCP要求系统资源较多,UDP较少; 
  3.UDP程序结构较简单 
  4.流模式(TCP)与数据报模式(UDP); 
  5.TCP保证数据正确性,UDP可能丢包 
  6.TCP保证数据顺序,UDP不保证 

UDP应用场景:
  1.面向数据报方式
  2.网络数据大多为短消息 
  3.拥有大量Client
  4.对数据安全性无特殊要求
  5.网络负担非常重,但对响应速度要求高

2.TCP的连接建立与连接终止(三次握手与四次别离)

1.TCP三次握手的过程如下:

  1. 客户端发送SYN(SEQ=x)报文给服务器端,进入SYN_SEND状态。

  2. 服务器端收到SYN报文,回应一个SYN (SEQ=y)ACK(ACK=x+1)报文,进入SYN_RECV状态。

  3. 客户端收到服务器端的SYN报文,回应一个ACK(ACK=y+1)报文,进入Established状态。

三次握手完成,TCP客户端和服务器端成功地建立连接,可以开始传输数据了。

至于为什么要三次握手??主要是传输的过程中数据可能丢失,需要一个反馈

2.四次别离过程如下:

为什么连接需要三次,断开需要四次了呢?

第一种情况:服务端干完了 

而并不是服务器每次都能干完 都能断开

第二种情况:

客户端频繁地发消息,这样六次会话都没登断开

所以最终有了四次别离

3.通信的代码实现(UDP)

//客户端
//准备要发送的信息
String msg="要发送的消息";
//创建套接字对象
DatagramSocket socket = new DatagramSocket();
//目标地址:电脑的IP地址
InetAddress host = InetAddress.getByName("192.168.*.*");
//指定包要发送的目的地
byte[]  data=msg.getBytes();
DatagramPacket request =
	        new DatagramPacket(data,data.length, host, 9999);//9999为端口 自定义
 //发送
socket.send(request);




//服务器端

//创建套接字对象
DatagramSocket socket = new DatagramSocket(9999); //9999为端口 自定义
//创建接受的容器		
byte[]  data=new byte[10];
		DatagramPacket request = new DatagramPacket(data, 10);
		
//接受消息
        while(true){
		socket.receive(request);
		//处理消息
		String s=new String(tong);
		System.out.println("收到消息: "+s);
		}
发布了19 篇原创文章 · 获赞 23 · 访问量 6830

猜你喜欢

转载自blog.csdn.net/qq_43176366/article/details/86590315