网络协议 TCP 和 UDP

来源:互联网 发布:xampp安装教程 linux 编辑:程序博客网 时间:2024/05/21 10:16

TCP 和 UDP 的概念

IP 和端口
IP:是每台主机所对应的唯一标识,通过 IP 来区分网络中的不同主机。
端口:同一台主机中,不同的应用程序的唯一标识,通过端口来区分同一台主机中的不同应用程序。

Socket

  1. Socket 通常称为“套接字”,用于描述 IP 地址和端口的,是一个通信链的句柄,在 Internet 上的主机一般运行了多个服务软件,同时提供多种服务,每种服务都打开一个 Socket,并绑定到一个端口上,不同的端口对应于不同的服务软件。

  2. 应用程序通过“套接字”向网络发出请求或者响应请求。Socket 和 ServerSocket 类位于 java.net 包中,ServerSocket 用于服务端,Socket 是用于建立网络连接时使用的。连接成功时,应用程序两端都会产生一个 Socket 实例,通过操作这个实例从而完成会话。

TCP
TCP(Transmission Control Protocol,传输控制协议) 是面向连接的传输层协议,所谓的“连接”是指客户端与服务器端进行数据传输之前必须先建立连接,也就是我们经常听到的 TCP 协议中的“三次握手”的概念(相对应的有四次挥手的概念)。
可以这么理解“三次握手”:

  1. 第一次握手,客户端对服务器端说:”我要向你发送数据,可以吗?”;
  2. 第二次握手,服务器对客户端说:“可以,你什么时候给我发送数据?”;
  3. 第三次握手,客户端对服务器端说:“我现在就向你发送数据”;

    数据发送中……

数据发送完成后就需要有一个断开连接的过程,这时就有一个“四次挥手”的概念。

  1. 第一次挥手,客户端对服务器端说:“数据发送完了,我要断开连接可以吗?”;
  2. 第二次挥手,服务器对客户端说:“数据我还没有接收完,你等我通知后再断开连接”;
  3. 第三次挥手,服务器对客户端说:”数据接收完了,你可以断开连接了“;
  4. 第四次挥手:客户端对服务器端说:“好的,我现在就断开连接”;

断开连接……

UDP
UDP (User Data Protocal,用户数据报协议)是面向非连接的传输层协议,也就是说基于 UDP 协议通信的过程中是不需要事先进行连接的,它会将通信的数据打包成若干个包,然后将这些包直接从客户端发送给服务端,由于不需要事先进行连接,所以传输数据的准确性、完整性等都不如 TCP 协议,但是其传输效率高,适合及时通讯,比如 QQ 就是采用的 UDP 协议。

TCP 与 UDP 协议通信时的具体编码

TCP
创建客户端连接代码如下:

class Client{    //定义客户端 socket    private Socket socket;    //创建构造方法初始化,socket 创建的同时就会建立连接,如果连接异常就会抛异常    public Client(){        try{            socket = new Socket("localhost",8088);        }catch(Exception e){            e.printStackTrace();        }       }    //客户端工作方法    public void start(){        try{            OutputStream out = socket.getOutputStream();            OutputStreamWriter osw =                     new OutputStreamWriter(out,"utf-8");            PrintWriter pw = new PrintWriter(osw,true);            pw.println("你好!服务器");        }catch(Exception e){            e.printStackTrace();        }finally{            if(socket != null){            try{                socket.close();            }catch(Exception e){                e.printTrankTrace();            }            }        }    }    //客户端的 main 方法    public static void main(String[] args){        Client client = new Client();        client.start();    }}

UDP
创建客户端代码如下:

public class Client{    try{        private void start(){        //创建客户端与服务端连接的桥梁 DatagramSocket        DatagramSocket client = new DatagramSocket();        String str = "hello! I'm Client";        byte[] sendBuff = str.getBytes();        //获取数据包对象的目标地址        InetAddress addr =  InetAddress.getByName("127.0.0.1");        //端口号        int port = 8088;        //构建发送数据包对象        DatagramPacket sendPacket = new      DatagramPacket(sendBuff,sendBuff.lenth,addr,port);        //发送数据包        clent.send(sendPacket);        //接收数据        Byte[] rece = new Byte[100];        //构建接收数据包对象,将数据包中 length 长度的数据装进 rece 数组      DatagramPacket recePacket =                             new DataPacket(rece,rece.length);        //接收数据包中的数据到 recePacket 中, receive 会“阻塞”        client.receive(recePacket);        String recStr = new                                                                                                                                                                                        String(recePacket.getData(),0,recePacket.getLength());        System.out.prinln("服务端说:"+recStr);              client.close();        }    }catch(Exception e){        e.printStackTrace();    }    public static void main(String[] args){        Client client = new Client();        client.start();    } }

TCP 和 UDP 的特点

  1. TCP 是面向连接的,UDP 是面向非连接的;
  2. TCP 传输数据的完整性、准确性较高,UDP 传输数据的速率、及时性较好;
  3. TCP 协议在具体的代码实现过程中是通过 Soket 对象来进行连接,然后从对象中读取输入流和输出流,在流中进行通信,而 UDP 是通过将数据封装成 DatagramPacket 包来进行通信,其中包中装有要发送到的地址;
  4. TCP、UDP 都是传输层协议;
0 0
原创粉丝点击