转自
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的异步;多线程模型(虽说多线程用的太乱了些)。