【编者按】:网学网理学论文为您提供 网络信息安全防范客户机与代理服务器间通信的设计与实现 参考,解决您在 网络信息安全防范客户机与代理服务器间通信的设计与实现 学习中工作中的难题,参考学习。
代理服务器的工作过程是接收被代理端请求,连接真正的主机,接收主机返回的数据,将接收数据发送到被代理端。因此,在设计中,我们将此代理服务器的通信过程设置如下:
首先,我们进入VC++6.0后,我新建工程时,选择Win32Console Application,并选择a Application that supports MFC.这样我们的程序就能够得到MFC的支持。
对于每一个用户的请求(Internet请求,由浏览器发出),本程序将启动两个线程,一个把本地用户的请求数据发送到远程的Internet主机,另一个线程把远程主机的回应数据发送到本地请求用户。
UserToProxyThread ( void * pParam ) :它是用来把本地用户请求数据发送到远程主机的,起服务器线程角色。当接到本地(局域网)用户的请求,它就启动另一个自身线程,以侦听别的用户的请求,并读出已接收到的请求数据,接着启动第二个线程ProxyToServer()(这个线程用来连接远程主机),当远程主机连接成功后,它把已读出的本地用户请求数据发送到远程主机。这两个函数是本程序的核心函数。
UserToProxyThread()函数是本程序的核心函数。在启动函数StartServer ()中我们已经建立了侦听套接字进行网络侦听,一旦有客户请求,必须要接受请求。为此,我们调用Accept()接受请求,并将返回的的套接字对象赋给我们先前建立一个套接字对象msg socket。这样我们就可以通过套接字对象msg socket进行客户和代理服务器之间的数据收发了。msg socket=accept(gListen Socket,(struct sockaddr*)&from,&fromlen);参数gListen Socket为正在侦听的套接字, (structsockaddr*)&from为存有客户信息的结构体,&fromlen为结构长度。若接受成功,则表明客户和代理服务器之间就建立起了连接,我们可以设置一些值:
Spair.IsUser ProxyClosed=FALSE; //客户到代理的连接为导通
Spair.IsProxy ServerClosed=TRUE; //代理到远程服务器连接为断开
Spair.user proxy=msg socket; //将返回的用户套接字赋予结构体相应的变量。