有个问题我想请问下
tcp对网络资源的消耗是在建立tcp连接的时候,还是连接后每次发送消息都要进行三次握手?
我想用udp写一个聊天室,自己写一个简单udp差错重传和超时重传,重传是使用tcp传输。如果tcp仅仅是在建立连接的时候消耗网络资源,那我每次重传都要建立连接断开连接,那样不就还不如只用tcp写聊天室了
如果有哪位高手有过tcp、udp混合使用过的经验,也请指导下这方面编程需要注意的地方吧。
希望有知道这方面知识的高手能帮我解决这个疑惑。谢谢! 

解决方案 »

  1.   

    QQ 登陆用tcp 聊天用udp
      

  2.   

    TCP连接的开销大,一般指的是对服务器端资源的开销;就客户端的资源来讲效果甚微。TCP的三次握手,发生在连接建立的阶段,三次握手后,连接正式建立。具体采用UDP/TCP协议进行信息的传输,关键要看一次传输的数据量大小以及信息是否要确保可靠性。如果一次传输的数据量很大(超过512字节,甚至2K字节),或者传输的数据必须保证可靠性,那么,最好选用TCP协议。聊天程序,聊天内容的传输,一般采用UDP,因为,一句话一般不会超过512字节,最长一般不会超过2K字节。这样,使用一个UDP包即可完成传输,不存在分包问题。
    而差错重传、超时重传的功能资源,一般都消耗在发送端(客户端),接收端消耗资源很小很小(最简情况是无)。另外,采用UDP进行信息的传输,是没必要自己设计实现《动态滑动窗口协议》的,与其这样,不如直接采用TCP协议进行传输,把这部分功能交由操作系统来完成。
    楼主的差错重传、超时重传,只针对当前包即可。
      

  3.   

    哦~~~,忽略了个问题,上面说的UDP传输,是打孔之后的传输,不存在服务端程序的转发情况,呵呵。简单的UDP聊天室,服务端没必要实现差错重传、超时重传,也就是说,没必要实现可靠性(尤其是局域网内)。当然,功能越强,复杂度越大。
      

  4.   

    preferme,为什么同样是接收数据,服务端用tcp方式接收开销就大,而用UDP开销就小有时甚至是无呢?
    tcp为了保证可靠传输需要三次握手,每次传输数据是不是都要三次握手,若仅仅如此,开销是不是也大不了多少呢