zoukankan      html  css  js  c++  java
  • TCP/IP通信程序设计的丰富多样性

     

    TCP/IP通信程序设计的丰富多样性



    刚接触TCP/IP通信设计的人根据范例可以很快编出一个通信程
    序,据此一些人可能会认为TCP/IP编程很简单。其实不然,
    TCP/IP
    编程具有较为丰富的内容。其编程的丰富性主要体现在
    通信方式和报文格式的多样性上。


    一。通信方式

    主要有以下三大类:

    (
    )SERVER/CLIENT方式

    1.
    一个Client方连接一个Server方,或称点对点(peer to peer)
    2.
    多个Client方连接一个Server方,这也是通常的并发服务器方式。
    3.
    一个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.

     

     

    长连接 短连接 区别

     

     

    1. 长连接与短连接是对tcp协议而言的,tcp存在建立和释放,udp本身就不需要连接。

    2. tcp建立连接需要三次握手 假设客户机a要连接服务器b,经过下面三个步骤就建立了连接:
    a-->SYN-->b
    b-->SYN/ACK-->a
    a-->ACK-->b

    3. 释放连接要四个步骤:
    a-->ACK/FIN-->b
    b-->ACK-->a
    b-->ACK/FIN-->a
    a-->ACK-->b

    4. 举例说:如果客户端调用memcache connect建立连接,那么在你这个脚本运行结束后这个连接将自动断开(客户端会发送ACK/FIN过去,完成释放连接的四个步骤),即使你没有主动去close()关闭这个连接。
    如果客户端调用了memcache里的pconnect 建立连接,而且你没有主动调用close()关闭这连接,它会在脚本结束后还存在。(也就是说不会发ACK/FIN过去)

     

    什么是长连接短连接

    解释1

    所谓长连接指建立SOCKET连接后不管是否使用都保持连接,但安全性较差,  
    所谓短连接指建立SOCKET连接后发送后接收完数据后马上断开连接,一般银行都使用短连接

     

    解释2

    长连接就是指在基于tcp的通讯中,一直保持连接,不管当前是否发送或者接收数据。  
    而短连接就是只有在有数据传输的时候才进行连接,客户-服务器通信/传输数据完毕就关闭连接。

     

    解释3

    长连接和短连接这个概念好像只有移动的CMPP协议中提到了,其他的地方没有看到过。  
    通信方式  
     
    各网元之间共有两种连接方式:长连接和短连接。所谓长连接,指在一个TCP连接上可以连续发送多个数据包,在TCP连接保持期间,如果没有数据包发送,需要双方发检测包以维持此连接。短连接是指通信双方有数据交互时,就建立一个TCP连接,数据发送完成后,则断开此TCP连接,即每次TCP连接只完成一对 CMPP消息的发送。  
     
    现阶段,要求ISMG之间必须采用长连接的通信方式,建议SPISMG之间采用长连接的通信方式。

     

    解释4

    短连接:比如http的,只是连接、请求、关闭,过程时间较短,服务器若是一段时间内没有收到请求即可关闭连接。  
     
    长连接:有些服务需要长时间连接到服务器,比如CMPP,一般需要自己做在线维持。

    6.1        长连接
    通信双方以客户-服务器方式建立TCP连接,用于双方信息的相互提交。当信道上没有数据传输时,通信双方应每隔时间C发送链路检测包以维持此连接,当链路检测包发出超过时间T后未收到响应,应立即再发送链路检测包,再连续发送N-1次后仍未得到响应则断开此连接。
        参数CTN原则上应可配置,现阶段建议取值为:C=3分钟,T=60秒,N=3
        网关与SP之间、网关之间的消息发送后等待T秒后未收到响应,应立即重发,再连续发送N-1次后仍未得到响应则停发。现阶段建议取值为:T=60秒,N=3
      消息采用并发方式发送,加以滑动窗口流量控制,窗口大小参数W可配置,现阶段建
    议为16,即接收方在应答前一次收到的消息最多不超过16条。


    6.2        短连接
    通信双方以客户-服务器方式建立TCP连接,应答与请求在同一个连接中完成。系统采用客户/服务器模式,操作以客户端驱动方式发起连接请求,完成一次操作后关闭此连接。
        网关与SP之间、网关之间的消息发送后等待T秒后未收到响应,应立即重发,再连续发送N-1次后仍未得到响应则停发。现阶段建议取值为:T=60秒,N=3

  • 相关阅读:
    JavaScript
    94.Binary Tree Inorder Traversal
    144.Binary Tree Preorder Traversal
    106.Construct Binary Tree from Inorder and Postorder Traversal
    105.Construct Binary Tree from Preorder and Inorder Traversal
    90.Subsets II
    78.Subsets
    83.Merge Sorted Array
    80.Remove Duplicates from Sorted Array II
    79.Word Search
  • 原文地址:https://www.cnblogs.com/sunwei2012/p/1821256.html
Copyright © 2011-2022 走看看