基于多线程的c/s socket类

来源:互联网 发布:评价火星哥的唱功知乎 编辑:程序博客网 时间:2024/05/14 05:37

 转自

http://www.codeproject.com/KB/IP/serversocket.aspx

 

把TCP/IP协议栈以及基本概念做了一个简单的介绍,然后对使用socket构建server和client的步骤做了介绍,最后给了一个SocketComm的便利类。从中可以学到一些基本的C/S开发的理念。

 

比较逗的是,最后有一个Elmue和作者打嘴仗,看的我挺高兴。

 

[下午补记]基本上看完了源代码,果然如Elmue所说,代码那是相当的混乱啊,不过居然还能得到4.4分的高分,想不太明白。举几个例子:

1)关闭线程使用TerminateThread(),这个是非常粗暴的关闭线程的方法,是实在没有办法的办法,为什么不做一个线程同步那?根据MSDN,这个函数是:

TerminateThread is used to cause a thread to exit. When this occurs, the target thread has no chance to execute any user-mode code and its initial stack is not deallocated.

2)为了复用而不顾功能。SocketComm貌似设计的比较好,无论client还是server都可以使用,但是你知道他是如何区分client和server的吗?没错,if...else。恶也就恶吧,估计作者为了减少if...else的代码量,居然把client的socket建立过程使用了bind,等等,可以说只是为了复用而复用,而且还没有复用好,起码也得用个什么模式吧,呵呵。

3)UI设计和代码更加混乱。首先,界面和逻辑混到了一锅粥;其次,看一段代码:

如果没有DDX的话,是不需要UpdateData()的。NextDlgCtrl(),我知道现在应该是什么控件在得到focus吗?猜不太出来。

 

4)居然没有异常处理。延时处理基本还有,但是异常没有,那么,比如这样的代码几乎肯定是找死:

sendto()可是流操作,出点差错,等着死锁吧。

 

不过基本思想是没问题的,而且也能够学到一些东西:client和server的构建过程;使用select,基于event的异步;多线程模型(虽说多线程用的太乱了些)。

原创粉丝点击