在客户端建了一个socket,然后再服务器端写了个serversocket.
但是客户端和服务器之间有一个代理服务器,比如说代理服务器的地址是:10.1.10.10端口是8080
访问网络的话还需要用户名和密码,用户名是111密码是6666666。在客户端怎样写才能访问到服务器端的程序呢???
救命啊,我写了一个多星期的程序了,突然遇到这个问题怎么也结决不了了。那位高手帮帮忙啊,分不够可以加。

解决方案 »

  1.   

    我现在对这个问题很晕阿,你说吧他们设的是http代理,但是socket和serversocket通信用的是什么协议呢??这样的话怎么解决呢 。晕死了
      

  2.   

    如果方便的话也请二楼给我讲一讲socket代理和http代理的区别吧,如果没有设socket代理是不是没办法解决呢?如果设了socket代理的话要怎样写呢?
      

  3.   

    socket-serversocket和代理不是一个7层通讯模型中不是一个通信层面的. socket实现了TCP协议, 物流HTTP代理还是Socket代理都是基于TCP协议的. 你要做的是找到HTTP代理的协议或Socket代理的协议, 并且用socket-serversocket实现代理协议即可
      

  4.   

    怎样用socket-serversocket实现代理协议呢?
      

  5.   

    这个类似于穿越防火墙问题,需要一些其他机制!最主要的就是一个NAT转换!你可以去看看开源的HTTP Proxy,看看他们怎么写的你就知道了!
      

  6.   

    是http代理,要怎么写呢?是不是用从socket中得到的输出流写。
      

  7.   

    你现在有一个 HTTP Proxy,但却需要它为你的 socket 程序做代理(而你的 socket 程序通信的内容却不是 HTTP 的)。是这样吧?我刚好最近也要做类似的事情。关注~~据说,HTTP 协议中,除了 GET、POST 之外,还有一个 CONNECT,启动之后可以做“纯粹的 socket 通信数据流转发”。值得关注。另外,要是哪位大侠能给介绍一下 HTTP Proxy 的工作原理,或者指点一些参考资料就好了  :)等问题解决了,我帮楼主再送 100 分!  ^_^
      

  8.   

    咱们按把大象塞到冰箱里面的思路,来谈谈这个问题:1、怎么在JAVA中设置HTTP代理:
    System.setProperty("http.proxyHost", "xxx.xxx.xxx.xxx");
    System.setProperty("http.proxyPort", "8080");
    System.setProperty("http.proxyType", "4");
    System.setProperty("http.proxySet", "true");2、怎么访问带密码的保护资源
    Authenticator.setDefault(
          new Authenticator() {
                protected PasswordAuthentication getPasswordAuthentication() {
                    return new PasswordAuthentication(username,
                            new String(password).toCharArray());
                }
            });3、怎么访问服务器。
    因为你用了HTTP代理和Authenticator,那么你现在已经不能用Socket了。可以用的只有URL,URLConnection
      

  9.   

    maquan('ma:kju):
    不要食言哦!
      

  10.   

    不是吧,如果是这样的话我服务器端也不能用serversocket了么,只能架一个tomacat服务器了???我靠,这下麻烦大了,真的没有其他办法了么??
      

  11.   

    URLConnection 能跟一个 ServerSocket 建立起 socket 连接吗?HOW-TO?
      

  12.   

    maquan('ma:kju) :
    of course can !服务器代码都在你自己手上,难道还怕客户端URLConnection吗
      

  13.   

    肯定有socket层得解决办法
    可惜换了下书只看到了代理服务器怎么写
      

  14.   

    试了一下,还是没弄明白。现在先不说 proxy 的事情,单说用 URLConnection 实现 socket 通信吧。应该用一个什么样的 URL 来打开 URLConnection 对象呢?我用“http://localhost;88”,结果实际上得到的是一个 sun.net.www.protocol.http.HttpURLConnection 对象,而它并不能用来做直接的 socket 通信,只能按 HTTP 协议发送 GET 命令什么的。大侠帮忙啊!
      

  15.   

    为了不让这个帖子太冷,我先汇报一点新的进展吧:初步结论:用 HTTP Proxy 做“纯 socket 通信代理”在特定条件下是可以的。条件是,HTTP Proxy 支持 HTTP 1.1 的 CONNECT 命令。方法:用 socket 连接到 HTTP Proxy 的代理端口(比如 8080),然后先发送一个 HTTP 的 CONNECT 命令给它,内容如下(其中第三行只有在 Proxy 要求认证的情况下才需要)    CONNECT <目标地址>:<目标端口> HTTP/1.1
        User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)
        Proxy-Authorization: Basic bWFxOm1hcQ==
        <空行>此后,你的客户机跟这个 socket 之间的所有通信内容(包括切断连接的动作),都会被 HTTP Proxy 转发到目标机器上。
      

  16.   

    补充两点:1. 发送了 CONNECT 命令后,客户机应该能从 socket 中收到一个 HTTP response,大概会是下面的样子:
        HTTP/1.0 200 Connection established
        Proxy-agent: CCProxy 6.3.8
        <空行>2. Proxy-Authorization 那行是一个 base64 的东西,如果你把“bWFxOm1hcQ==”用 base64 解码,就能看见我的用户名和密码了  ;p