使用TCP协议后,当某个设备与服务器连接后,
1、数据的传输是否总是通过这个连接进行
2、TCP不会中断该连接
3、设备即使间隔了较长时间,如1小时来传输数据,是否还是会依然使用一开始建立的连接进行传输
如果以上全都是,
c#socket编程,使用TCP协议,tcpListener.BeginAcceptTcpClient时,是否能根据是否新设备而建立新连接还是继续使用已有连接?

解决方案 »

  1.   

    本质上IP是无连接的,连接只是TCP这个的协议中的概念,所以这个连接是逻辑上的
    只有在Read/WRite时才能再次获悉状态,所以可以通过心跳方式维持这个逻辑意义上的连接使用TCP协议后,当某个设备与服务器连接后,
    1、数据的传输是否总是通过这个连接进行
    不是,如果超时(超出TCP的逻辑连接时间),判定失败,回收后下次肯定重新建立连接
    2、TCP不会中断该连接
    本身就没有连接
    3、设备即使间隔了较长时间,如1小时来传输数据,是否还是会依然使用一开始建立的连接进行传输
    看你Timeout怎么设置了
      

  2.   


    可不可以这样理解,当设备与服务器连接正常后,只要在比较短的时间内发送心跳包,设备就不需要再和服务器重新建立连接了。
    表现在c# socket编程中,就是
    clientListener.EndAcceptTcpClient(ar).GetStream().BeginRead(...)的回调方法中继续调用BeginRead?而设备不是连续发送数据,而是间隔几十秒,这样做正确么?
      

  3.   

    发心跳只是能够获知当前链路是否真实连通,再次强调这个连接是逻辑连接,因为IP层无连接,所以你通过心跳只是维持一个逻辑连接,意义不大,另外心跳时间不用比较短,只要小于tcp timeout即可,一般1分钟一次,心跳的主要意图是获得当前网络状态,而不是为了节约一个连接,如果长时间没有数据传输,就应该回收相应资源,有了再建就是了