您的位置:首页 > 理论基础 > 计算机网络

网络编程C#篇(一):TCP/UDP

2007-08-09 19:14 232 查看
由于最近的爱好,重新被激发,所以开始,写关于网络编程方面的知识。近段主要想写一下C#方面的网络编程,有什么不对,请高手们指正。

基础篇:
关于这方面的文章主要是一个理论知识,重在理解。由于,本人的文笔有限。所以,有什么不对,还请大家更正。
网络编程主要是用到了两个协议:TCP和UDP
TCP编程的特点:
对于TCP,要记住的最重要的事情是它是一个面向链接的协议。两个设备之间一旦已经存在链接,就会形成一个可靠的数据流,保证数据从一个设备准确的移送到另一个设备。虽然使用TCP的用户不用担心数据的丢失和错位。但是,使用TCP编程的时候,需要的考虑的大问题是:缓冲区。
由于TCP必须保证数据的完整性,所以,在从远程设备收到“已收到数据”的肯定的应答信息之前,它一直把所有发送的数据都存放在一个本地缓冲器中。同样地,当从网络接收数据的时候,TCP也必须有一个接收数据的本地缓冲器,以保证在把数据递送给应用程序之前所有的数据块是按顺序接收的。由于这个单独的TCP缓冲器,在用户程序与远程主机上目的程序之间移动数据操作起来显得比预期的困难一些。所以,无论是发送方还是接收方数据在发送或者接收的时候都会先放在缓冲区中。但是,TCP不保留数据消息的界线(数据块之间的边界),即缓冲区中的数据块被作为一个包发送。所以编程者必须在自己的网络程序中加以弥补。
UDP编程的特点:
创建UDP就是为了解决TCP的消息边界问题。UDP保留了从应用程序发送到网络上的所有消息的数据边界。由于UDP的特殊设计,不担心可靠数据的传输问题,它不需要使用本地缓冲器保留发送的或接收的数据。代替的做法是,当从应用程序接收到消息时,每条消息都作为一个单独的包转发。同样,从网络上收到的每条消息也作为一个单独的包转发给应用程序。UDP在网络包中保留了消息的边界。但是,由于UDP不保证数据的传递,所以如果涉及到数据到达目的地的问题,用户应用程序必须执行那种功能。因为一台设备发出了UDP数据包并不一定意味着接收设备收到数据包,所以用户必须保证用户的程序能够处理丢失包的问题。
当程序需要分清服务器和客户机的时候,最好使用TCP协议,而UDP一般是在主次不是分的很清楚(即关系平等)的时候用到。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息