正文

C#通讯编程步步高(序)2007-05-27 22:46:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/tujun/26208.html

分享到:

在C#中,通讯编程是十分容易的一件事情.以前在C++中很长的代码能完成的事情,在C#中几句代码就能解决,这得益于.net框架提供的高度封装的类库.学习C#3年了,觉得应该把自己的心得写出来,供别人也供自己以后学习.

注:以下内容纯粹属于随笔,没有目录.可能内容中有些错误,欢迎指正.

另:这里所说的通讯编程指Windows系统下的通讯编程.

一.网络通讯

网络通讯最主要的方法就是Socket通讯,所以我也只学习了Socket TCP/UDP通讯,至于什么命名管道啊什么的通讯我没有去学习,不是不值得学,而是因为自己精力有限,把所有的精力都放到了Socket TCP/UDP通讯上.

二.通讯协议

1.TCP

TCP通讯协议是基于IP协议之上的一种面向可靠连接的通讯协议,在它之上有类似很多的比如http,ftp等协议都是我们熟悉的.它的优点是传输可靠,能够保证数据完整的正确的发送到接收方,在对数据正确性和完整性比较高的场合,TCP通讯是我的选择.

TCP协议的通讯过程:首先,必须先建立和接收方的通讯链接(Connect),接收方响应链接(Accept);然后才是发送数据(Send),接收方接收数据(Receive);最后双方拆除链接(Disconnect).

上面的通讯过程是我们具体使用TCP协议进行编程时的操作,实际上对于底层通讯,在链接建立和数据通讯的过程中,通讯双方的Socket实际要做很多事情,当然,这些不是我们关心的,我们也无须控制它,除非我们熟知通讯双方的网络状况,我们才可以调整Socket在通讯过程中的一些配置参数(SetSocketOptions),参数非常之多,我也没具体了解过,不过可以参考<TCP/IP协议详解>和<Windows网络编程>等书.

使用TCP/IP协议编程务必了解NG算法.NG算法是一种排队算法,通俗的讲,因为TCP/IP的传输效率问题(TCP协议的数据头比UDP协议的数据头要大),它采用一种算法,使网络上一次数据交互能够最大可能的传输数据,也就是在一定时间内,调用Send方法发送数据的时候,TCP并非立即发送,而是等待缓冲区到一定水位后再进行发送,除非等待的时间到达,否则TCP会一直等待缓冲区内有更多的数据.

NG算法能解决TCP/IP通讯效率的问题,但是也给我们编程带来了一定的难度,其中最大的麻烦就是包粘连问题.也就发送方发送数据是一个包一个包进行发送的,但是接收方可能一次性就能从接收缓冲区内读出1~n个数据包.因此接收方务必处理好这个问题. 不过据我经验而言,接收时一般接收到的数据包的个数均为整数,没发现过一个数据包只接收一半的情况,除非发送方一个包的数据长度超出了接收缓冲区的大小.

 下一节:UDP协议概述

阅读(4533) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册