MFC C#网络编程的规划

我经常编写一些网络程序,就从网络数据收发的角度去讲一些编程的技巧:

        总体来讲,就是程序的怎样设计要比实际代码的编写重要的多。

        大多数人可能都具备了一个项目中零碎的基础。例如:1)基本的控件使用;2)线程的创建于管理;3)socket网络编程;4)数据库的使用;5)和一大堆库函数的调用。但是怎样将这些技术组合起来去完成一个实际项目却感到无从下手。

        从简单的单机编程到网络编程。个人的编程能力也逐渐提高。

        首先,我们需要克服拿到项目,马上就在编译器中设计UI,然后加载一些事件函数。我觉得最重要的就是在大脑中构想出整个项目的格局。区分出各个功能模块,充分发挥各个模块的分工。这些可以借助一些例如微软的visio设计好。

        有了大体的格局,下面得注意一些编程的规则。全局变量,常量的设计,作用域的大小。尤其是线程配合全局变量容不容易产生矛盾。

        我在网络编程时经常就因为这些设计的问题,导致开启第一条线程正常,关闭后在开启第二次就出问题了。还有就是网络编程尤其要注意套接字阻塞问题。经常出现的问题就是TCP/UDP写入函数(accept和recv);因为调试到这里,该函数的线程往往是在休眠状态下的。这使其它线程在修改全局变量时,休眠线程不能响应。

        例子一:

            while(brun)
            {
                byte[] bytes = udpclient.Recvice(ref iep);                

            }

            return 0;

        经常用brun全局变量作为跳出循环的关键。但是在Recvice这个IO请求休眠时,通过改变brun时无法跳出循环结束线

        程的。想马上结束线程就必须通过该线程的引用对象Thread类的abort()结束。

         例子二:变量(对象)的作用域

        if(a>b)

        {

        object c=b;

        }

        object x=c;

        其实x=c时,c就已经不存在了。

        例子三:句柄(在32位情况下就是一个编号,一个索引的值,在MFC中SOCKET也可以被int类型代替 )。银耳这些值可以进行传递。如函数传递,线程传递。但是这个索引的主体资源的释放要在创建该主体的位置进行。

        例子四:将一个套接字可以在多个位子发送数据。但只能在一个位子接收数据。为防止数据混乱这就时一个方法吧。

其实有些技巧我就不一一例举,但总的来说。对于一个只要不是10个一类的函数就能解决的一个程序。花在规划上的时间就必须加大再加大。

        

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值