zoukankan      html  css  js  c++  java
  • 网络编程(二)

    一.TCP(Transmission Control Protocol 传输控制协议)协议

     1.TCP协议概述:

      TCP是一种可靠的,面向连接的,端对端的网络协议。

      TCP/IP通信协议是一种可靠的网络协议,它在通信的两端各建立一个Socket,从而在通信的两端之间形成网络虚拟链路。一旦建立了虚拟的网络链路,两端的程序就可以通过虚拟链路进行通信。 

      TCP协议使用重发机制-当一个通信实体发送一个消息给另一个通信实体后,需要收到另一个通信实体的确认信息,如果没有收到确认信息,则会再次重发刚才发送的信息,因此通过这种重发机制,TCP协议向应用程序提供了可靠的通信连接。

      

    2.TCP协议如何建立连接:

      TCP协议通过“三次握手”建立连接,当主动方发出SYN连接请求后,等待对方回答SYN+ACK,并最终对对方的 SYN 执行 ACK 确认,这种建立连接的方法可以防止产生错误的连接。

       

      "三次握手"过程如下:

      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客户端和服务器端成功地建立连接,可以开始传输数据了。

    3.服务器端Socket

      Java中接收其他通信实体连接请求的类是ServerSocket,ServerSocket对象用于监听来自客户端的Socket连接,如果没有连接,它将一直处于等待状态。方法如下:

      Socket accept():如果收到客户端的连接请求,该方法将返回一个与客户端对应的Socket

      构造方法:ServerSocket ss = new ServerSocket(8000);   //8000为端口号,未指定IP,默认绑定本机IP

      设置超时:

      连接,读取操作超过合理时间后,系统判定为操作失败,主要作用是避免执行网络连接,读取服务器数据的进程一直阻塞。

      setSoTimeout(time);     //time为超时时间

      Socket s = new Socket("127.0.0.1",8000);   

      s.setSoTimeout(10000);

    4.客户端Socket

      客户端通常使用Socket来连接到指定服务器,Socket有下面两个构造方法

      Socket(InetAddress/String remoteAddress,int port)   //较为简便,常用

      Socket(InetAddress/String remoteAddress,int port,InetAddress localAddr,int localPort)

      //这个构造器不仅指定远程主机IP和端口,还指定了本地IP和端口,适用于本机主机有多个IP的情况

      Socket s = new Socket("127.0.0.1",8000);

    5.建立连接后的数据通信

      客户端,服务器端产生对应的Socket之后,连接便已建立,程序无须再区分服务器端和客户端,而是通过各自的Socket进行通信,Socket提供了输入流和输出流来发送和接受数据:

      InputStream getInputStream()   返回该Socket对应的输入流,让程序通过该输入流从Socket中取出数据

      OutputStream getOutputStream()   返回该Socket对应的输出流,让程序通过该输出流向Socket输出数据

    二:UDP(User Datagram Protocol)协议

    1.UDP概述:

      UDP即用户数据报协议,它是一种不可靠的,面向非连接的协议。

      面向非连接指的是在正式通信前不必与对方先建立连接,不管对方状态就直接发送,至于对方是否可以收到这些数据内容,UDP协议无法控制,所以说它是一种不可靠的协议。

      UDP协议的主要作用是完成网络数据流和数据报之间的转换--在信息的发送端,UDP协议将网络数据流封装成数据报,然后将数据报发送出去;在信息的接收端,UDP协议将数据报转换成实际数据内容。

    2.TCP协议和UDP协议的对比:

      TCP协议:可靠,传输大小无限制,但是需要连接建立时间,差错控制开销大

      UDP协议:不可靠,差错控制开销小,传输大小限制在64KB以下,不需要建立连接,比较高效

    3.数据通信

      DatagramSocket:代表UDP协议的Socket,相当于码头,只用于接收和发送数据报

      DatagramPacket:代表数据报,相当于集装箱

      DatagramSocket的3个构造方法:

        DatagramSocket();

        DatagramSocket(int port);

        DatagramSocket(int port , InetAddress laddr);

        创建完DatagramSocket对象后使用如下两个方法接收和发送数据

        receive(DatagramPacket p):  从该DatagramSocket中接收数据

        send(DatagramPacket p):  从该DatagramSocket对象向外发送数据报

        DatagramPacket的构造方法

          接收数据的一端应该使用的: DatagramPacket(byte[] buf , int length)

                        DatagramPacket(byte[] buf , int offset , int length)

          发送数据的一端应该使用的:   DatagramPacket(byte[] buf,int length,InetAddress addr,int port)

                DatagramPacket(byte[] buf , int offset , int length,InetAddress addr,int port)

  • 相关阅读:
    python学习之路基础篇(第八篇)
    python学习之路基础篇(第七篇)
    python学习之路基础篇(第六篇)
    python学习之路基础篇(第五篇)
    python学习之路基础篇(第四篇)
    目标检测——IoU 计算
    MXNet 中的 hybird_forward 的一个使用技巧
    Anchor 的两种编程实现
    我的目标检测笔记
    动手创建 SSD 目标检测框架
  • 原文地址:https://www.cnblogs.com/gdpdroid/p/4114809.html
Copyright © 2011-2022 走看看