从没搞过代理服务器编程,最近想学习一下。
首先,我说一下我对代理服务器通信过程的理解(SOCKET5):
1.客户端连接到代理服务器开放的端口;
2.客户端向代理服务器发送验证申请;
3.代理服务器向客户端发送一个数据包,从而客户端得知自己的通信申请是否被批准;
4.客户端向代理服务器发送一个数据包,告知代理服务器自己要连接的目的主机的地址和端口;
5.代理服务器开始进行到目的主机的真正连接;
6.代理服务器为客户端开放一个新的端口并向客户端发送一个数据包告知客户端这个新的端口;
7.客户端创建一个新的套接字并连接到代理服务器的新的端口;
8.然后,代理服务器把由新端口接收到的数据都转发给目的主机,把从目的主机发过来的数据都由新端口转发给客户端。
再说一下我的实验:
服务器程序、代理服务器程序、客户端程序都在一台电脑上运行;
服务器是我自己写的,只接受连接然后把收到的内容原样发回去,监听 6000 端口;
代理服务器用的 CCPolicy;
问题:
在上面的步骤中,客户端连接到代理服务器、验证都没问题,然后客户端向代理服务器请求对目的主机的连接,代理服务器真实地连接到了目的主机程序,然后代理服务器向客户端发回一个新的 IP&端口,但客户端再创建新的 SOCKET 连接这个数据包所指定的 IP&端口 时总是失败,而且查看代理服务器的网络连接状态,也没有发现有这个与客户端的新的连接的存在(附图)。
不知道是我自己的理解不对,还是具体步骤有问题,资料很少,请各位不咅赐教,谢谢!