多线程的网络通信程序

起因是学校课要求写一个双机网络通信,并且可以发送文件的程序。

使用的是传统的socket (recv(),send() …..)等。而且是阻塞模式,使用图形界面MFC编写 (VC 6.0)。但为了能让程序不出现假死现象( recv,accept 这样的函数都会出现这样的事情),所以采用了多线程技术,其实也就是用了AfxBeginThread ,TerminateThread等等。这样对于阻塞函数都让他们在新建立的线程里运行就好了。

另外解决的一个大问题就是,创建的新线程无法对窗口进行操作,比如要自在编辑框显示一句话等等。如果直接取得窗口类的句柄操作,会出现wincore的错误,也就是跨线程错误。主要原因也就是——-MFC的线程被自己外部创建的线程调用就会有这个错误。解决的方法就是在线程里用SendMessage给窗口发送一个自定义的消息,比如我这里用的就是。

要实现这样的方法

在BEGIN_MESSAGE_MAP下面要添加

这里写出一些关键的代码,具体程序可以到点击这里下载

我注释的相当详细了。
编译的话,debug版可以正常工作,但release版就无法正常工作了

serverdlg.cpp

clientDlg.cpp

再次回到clientDlg.cpp中,接下来就是程序的主体部分了。

接下来是客户端的程序了,和server一样也要自定义消息

Tagged , , , , , , , . Bookmark the permalink.

发表评论

电子邮件地址不会被公开。 必填项已用*标注