如何穿过代理服务器

时间:2022-09-09 18:24:02
我要写一个点对点应用的网络软件,遇到一个特大的问题,就是如何穿过代理服务器,使得两个都通过代理上网的用户都可以利用我这个软件互相通信???
各位高手!是你们发挥的时候拉,,,帮帮忙了,小弟不胜感激!!!


这里再谢过!!!

6 个解决方案

#1


晕倒!
理论就不清晰!
你知道大家常说的“穿透防火墙和代理”是什么意思吗?
是指通过http协议来封装他们自己的服务。
为什么http协议可以?因为防火墙和代理通常只对http协议放行,就算最火的墙和最严的代理,也绝对允许http协议,否则,别人无法浏览网页。还代理什么了?

因此,你想“穿透”这些东西,没有别的选择。

也因此,你必须有第三方服务器做中转,就象qq的中转聊天功能一样。

#2


将 Java 和代理结合起来的秘诀即在 Java 运行时激活特定的系统属性。这些属性未被写入正式文件,只是作为 Java 传说的一部分在 Java 编程人员中秘传。为了支持代理,Java 应用程序不仅需要指定代理本身的信息,而且需要指定用于认证的用户信息。在开始使用网际协议之前,您需要在程序中添加以下几行代码:

System.getProperties().put( "proxySet", "true" );
System.getProperties().put( "proxyHost", "myProxyMachineName" );
System.getProperties().put( "proxyPort", "85" );


上面的第一行通知 Java 您要通过代理进行连接,第二行指定代理所在的机器,第三行指定代理监听的端口。有些代理在授权用户访问因特网之前,要求用户输入用户名和口令。如果您使用位于防火墙之内的 Web 浏览器,您就可能碰到过这种情况。以下是执行认证的方法:

URLConnection connection = url.openConnection();
String password = "username:password";
String encodedPassword = base64Encode( password );
connection.setRequestProperty( "Proxy-Authorization", encodedPassword );


这段代码的思想是,您必须调整 HTTP 标头以发出用户信息。这是通过调用 setRequestProperty() 来实现的。这种方法允许您在发出请求之前处理 HTTP 标头。HTTP 要求用 base64 对用户名和口令进行编码。幸运的是,有一组公用域 API,它们将代您执行编码(请参阅参考资源部分)。

如您所见,在 Java 应用程序中加入代理支持并不需要做多少工作。有了现在的知识,再做一点研究(您必须查明您的代理是如何处理您感兴趣的协议以及如何进行用户认证的),您就能用其他协议实现代理。



 ------------------------------------------------------
           我们还年轻牛奶会有的奶牛也会有的 
             可天天在 csdn 混这些会有吗 ??

#3


呵呵,以上是转载,可不是我自己写的:)

 ------------------------------------------------------
           我们还年轻牛奶会有的奶牛也会有的 
             可天天在 csdn 混这些会有吗 ??

#4


microsoft msn 6.0就可以

#5


同意,接分

#6


瞎同意。
zez的帖子对整体构思没任何意义。

#1


晕倒!
理论就不清晰!
你知道大家常说的“穿透防火墙和代理”是什么意思吗?
是指通过http协议来封装他们自己的服务。
为什么http协议可以?因为防火墙和代理通常只对http协议放行,就算最火的墙和最严的代理,也绝对允许http协议,否则,别人无法浏览网页。还代理什么了?

因此,你想“穿透”这些东西,没有别的选择。

也因此,你必须有第三方服务器做中转,就象qq的中转聊天功能一样。

#2


将 Java 和代理结合起来的秘诀即在 Java 运行时激活特定的系统属性。这些属性未被写入正式文件,只是作为 Java 传说的一部分在 Java 编程人员中秘传。为了支持代理,Java 应用程序不仅需要指定代理本身的信息,而且需要指定用于认证的用户信息。在开始使用网际协议之前,您需要在程序中添加以下几行代码:

System.getProperties().put( "proxySet", "true" );
System.getProperties().put( "proxyHost", "myProxyMachineName" );
System.getProperties().put( "proxyPort", "85" );


上面的第一行通知 Java 您要通过代理进行连接,第二行指定代理所在的机器,第三行指定代理监听的端口。有些代理在授权用户访问因特网之前,要求用户输入用户名和口令。如果您使用位于防火墙之内的 Web 浏览器,您就可能碰到过这种情况。以下是执行认证的方法:

URLConnection connection = url.openConnection();
String password = "username:password";
String encodedPassword = base64Encode( password );
connection.setRequestProperty( "Proxy-Authorization", encodedPassword );


这段代码的思想是,您必须调整 HTTP 标头以发出用户信息。这是通过调用 setRequestProperty() 来实现的。这种方法允许您在发出请求之前处理 HTTP 标头。HTTP 要求用 base64 对用户名和口令进行编码。幸运的是,有一组公用域 API,它们将代您执行编码(请参阅参考资源部分)。

如您所见,在 Java 应用程序中加入代理支持并不需要做多少工作。有了现在的知识,再做一点研究(您必须查明您的代理是如何处理您感兴趣的协议以及如何进行用户认证的),您就能用其他协议实现代理。



 ------------------------------------------------------
           我们还年轻牛奶会有的奶牛也会有的 
             可天天在 csdn 混这些会有吗 ??

#3


呵呵,以上是转载,可不是我自己写的:)

 ------------------------------------------------------
           我们还年轻牛奶会有的奶牛也会有的 
             可天天在 csdn 混这些会有吗 ??

#4


microsoft msn 6.0就可以

#5


同意,接分

#6


瞎同意。
zez的帖子对整体构思没任何意义。