zoukankan      html  css  js  c++  java
  • 长连接和短连接

    长连接短连接

    TCP/IP编程具有较为丰富的内容。其编程的丰富性主要体现在通信方式和报文格式的多样性上。

    通信方式 主要有以下三大类:

    ()SERVER/CLIENT方式

    1.一个Client方连接一个Server方,或称点对点(peer to peer)

    2.多个Client方连接一个Server方,这也是通常的并发服务器方式。

    ()连接方式

    1.长连接 Client方与Server方先建立通讯连接,连接建立后不断开,然后再进行报文发送和接收。这种方式下由于通讯连接一直存在,可以用下面命令查看连接是否建立: netstat -f inet|grep 端口号(5678)。 此种方式常用于点对点通讯。

    2.短连接 Client方与Server每进行一次报文收发交易时才进行通讯连接,交易完毕后立即断开连接。此种方式常用于一点对多点通讯,比如多个Client连接一个Server.

    ()发送接收方式

    1.异步 报文发送和接收是分开的,相互独立的,互不影响。这种方式又分两种情况:

    (1)异步双工:接收和发送在同一个程序中,有两个不同的子进程分别负责发送和接收

    (2)异步单工:接收和发送是用两个不同的程序来完成。

    2.同步 报文发送和接收是同步进行,既报文发送后等待接收返回报文。同步方式一般需要考虑超时问题,即报文发上去后不能无限等待,需要设定超时时间,超过该时间发送方不再等待读返回报文,直接通知超时返回。

    实际通信方式是这三类通信方式的组合。比如一般书上提供的TCP/IP范例程序大都是同步短连接的SERVER/CLIENT程序。

    有的组合是基本不用的,比较常用的有价值的组合是以下几种:

    同步短连接Server/Client

    同步长连接Server/Client

    异步短连接Server/Client

    异步长连接双工Server/Client

    异步长连接单工Server/Client

    其中异步长连接双工是最为复杂的一种通信方式,有时候经常会出现在不同银行或不同城市之间的两套系统之间的通信。比如金卡工程。由于这几种通信方式比较固定,所以可以预 先编制这几种通信方式的模板程序。

    二.报文格式 通信报文格式多样性更多,相应地就必须设计对应的读写报文的接收和发送报文函数。

    ()阻塞与非阻塞方式

    1.非阻塞方式 读函数不停地进行读动作,如果没有报文接收到,等待一段时间后超时返回,这种情况一般需要指定超时时间。

    2.阻塞方式 如果没有报文接收到,则读函数一直处于等待状态,直到有报文到达。

    ()循环读写方式

    1.一次直接读写报文

    在一次接收或发送报文动作中一次性不加分别地全部读取或全部发送报文字节。

    2.不指定长度循环读写

    这一般发生在短连接进程中,受网络路由等限制,一次较长的报文可能在网络传输过程中被分解成了好几个包。一次读取可能不能全部读完一次报文,这就需要循环读报文,直到读完为止。

    3.带长度报文头循环读写

    这种情况一般是在长连接进程中,由于在长连接中没有条件能够判断循环读写什么时候结束,所以必须要加长度报文头。读函数先是读取报文头的长度,再根据这个长度去读报文.实际情况中,报头的码制格式还经常不一样,如果是非ASCII码的报文头,还必须转换成ASCII常见的报文头码制有:

    (1)n个字节的ASCII

    (2)n个字节的BCD

    (3)n个字节的网络整型码

    以上是几种比较典型的读写报文方式,可以与通信方式模板一起预先提供一些典型的API读写函数。当然在实际问题中,可能还必须编写与对方报文格式配套的读写API

    原文:

    http://www.cnblogs.com/liuyong/archive/2011/07/01/2095487.html

    http://wenku.baidu.com/view/c45a1926482fb4daa58d4b00.html

  • 相关阅读:
    Hive分桶bucket
    Error: java.io.IOException: org.apache.hadoop.hdfs.BlockMissingException: Could not obtain block
    接上一篇嵌套循环问题之解决
    RPA自动化机器人uibot之循环嵌套坑
    Chrom谷歌浏览器没网之最全解决办法之一
    (语法糖)列表生成式之怪诞--(暂时无法理解)
    浅析scrapy与scrapy-redis的区别
    浅谈Python中函数式编程、面向对象编程以及古怪的PythonIC
    OpenCV+TensorFlow图片手写数字识别(附源码)
    TensorFlow Object Detection API中的Faster R-CNN /SSD模型参数调整
  • 原文地址:https://www.cnblogs.com/mydomain/p/2734653.html
Copyright © 2011-2022 走看看