先检查server和client之间的连接,从client ping server。简单地说,这个Exception是由VM的host os造成的,和你的java 程序没太多关系,除非你把server的地址搞错了。

解决方案 »

  1.   

    在局域网里头,不管SERVER和CLIENT是不是在一台机器上,运行时正常的。
    但是放到INTERNET上以后,就不行了。我让SERVER和CLIENT是在一台机器上运行的。CLIENT 里头的SERVER端的地址我试过SERVER在INTERNET上的真实地址,还有127。0。0。1。但是都不行,报同一个找不到路由的错误。 
      

  2.   

    估计你是通过代理上网的,所以直接通过socket连接肯定不行,需要在程序中设置系统属性的代理服务器和端口,且需要用URL类和URLConnection类来进行连接。
    具体的一些例子,在论坛以前的帖子中都提到过,你可以搜索一下。
      

  3.   

    一句话: 你的client没和server连上
      

  4.   

    现在的情况是:win2K(SP2,含javaVM),装过web gain,运行server端正常,然后本机运行客户端报错如下:Exception in thread "main" java.util.zip.ZipException: 系统找不到指定的文件。
            at java.util.zip.ZipFile.open(Native Method)
            at java.util.zip.ZipFile.<init>(ZipFile.java:110)
            at java.util.jar.JarFile.<init>(JarFile.java:115)
            at java.util.jar.JarFile.<init>(JarFile.java:57)我是个新手,大家见笑了:) 请问这是怎么回事?
      

  5.   

    server运行在internet上的一台机器上,我从公司的局域网内希望能够用如下程序连接到server.我的程序代码如下:          
          new BufferedReader reader;
          PrintWriter writer;
          ....................
                welcome = reader.readLine();
                System.out.println(welcome);
                writer.println("hello");
                这个时候,运行到welcome = reader.readLine的时候,需要等待很长时间,welcome得到的返回值是一个空值.假如我加一句:
               writer.println("test");
               welcome = reader.readLine();
                System.out.println(welcome);
                writer.println("hello");
                welcome = reader.readLine();
    welcome = reader.readLine这句就会很快跳过,welcome打印出来是:HTTP/1.1 501 Not Implemented.
      

  6.   

    你把你这个reader,writer是如何构造的代码贴出来,因为我觉得你现在的代码有点奇怪。从writer 往server写一个 "test",这可不是任何HTTP协议支持的东西,当然会返回 Not Implemented了。HTTP协议支持的有GET,POST,HEAD,PUT等等,好好看看RFC吧。
      

  7.   

    FAINT
    WUWUWUWUWA~~~~~~~~~~~~~~~~~~~~```package cynthia;import java.io.*;
    import java.net.*;public class Client {
        public InputStream in;
        public OutputStream out;
        private Socket client;
        public Client (String host,int port){
            try{
                client = new Socket(host,port);
                System.out.println("Client socket: "+client);
                in = client.getInputStream();
                out = client.getOutputStream();
                
            }catch(IOException e){
                System.out.println("IOExc:"+e);
            }
        }
    }package cynthia;import java.io.*;
    import java.net.*;public class scanner{
        public static void main(String [] args){
            String welcome,reponse;
            Client client;
            BufferedReader reader;
            PrintWriter writer;
            client = new Client("xxxx",80);
            try{
                reader = new BufferedReader(new InputStreamReader(client.in));
                writer = new PrintWriter (new OutputStreamWriter(client.out),true);
                welcome = reader.readLine();
                writer.println("hello");
                welcome = reader.readLine();
                if (welcome.startsWith("me") ){
                    System.out.println("Server says: '"+welcome+"'");
                    System.out.println("this is");
                    writer.println("quit");
                }
                writer.println("next i will quit");
                welcome = reader.readLine();
                if (welcome.startsWith("me")){
                    System.out.println("Server says: '"+welcome+"'");
                    System.out.println("this is");
                }
                System.out.println("Hello");
                writer.println("hello");
                
                System.out.println("quit");
                //writer.println("quit");
                //reponse = 
            }catch (IOException e){
                System.out.println("IOException get at the scanner");
                System.out.println(e);
            }
            try{
                Thread.sleep(2000);
            }catch (InterruptedException ignored){
                System.out.println("get a sleep exception");    
            }
        }    
    }
      

  8.   

    HTTP协议的核心是request - response,也就是说server收到一个request,就会产生一个response。而且这种request以及response的格式是在RFC中定义好的。再看看你的代码:
    try{
        reader = new BufferedReader(new InputStreamReader(client.in));
        writer = new PrintWriter (new OutputStreamWriter(client.out),true);    welcome = reader.readLine(); // 想收到一个response,可是没有先给一个request!!!只会有一个结果,超时
        writer.println("hello"); // 这倒算是一个request, 可是不符合协议规定的格式把其它什么乱七八糟的东西都去掉,试试这两句吧:
        writer.println("GET /index.htm HTTP/1.0");  // 这才是标准的HTTP的GET格式,可以把index.htm 改成任何该server上存在的文件名称,也可以带目录名如 /cgi-bin/welcome.pl
        welcome = reader.readLine();
      

  9.   

    可是我并没有利用http服务呀,而且对方机器上的www服务是关掉的呀。我希望的不过是借用他的80端口而已(不好意思,公司的防火墙只开了一个80端口)。我的这些程序在局域网内运行是正常的。为什么一旦到了internet上面,就不行了么?可能是防火墙引起的问题么?
      

  10.   

    再说一下为什么要考虑HTTP协议的问题,因为你是建立了一个到"xxxx" 80端口的联接,这就是一个标准的HTTP端口,server会把这个端口的一切东西当作HTTP协议的东西来处理。
      

  11.   

    你说的server是指什么?像ociq这类软件是怎么实现用80作为代理的?
      

  12.   

    对呀,问题关键在于在那台Server上是什么样的服务绑定到端口80上了。
    从你说的返回HTTP/1.1 501 Not Implemented,可以看出,是HTTPD之类的Web Server绑定到了这个端口上了。
    OICQ可以用80作代理吗?是吗?那我在公司也可以用了。:)
    原理很简单:用一个不是httpd这样的服务程序来监听这个端口,只起一个转发数据的功能就行。这是一个专用的服务程序,你也可以做一个。但是,你程序中想访问的机器如果是外部的,就不是你能控制的了。
      

  13.   

    对方80端口上面用的是我的写的一个server,和这各client是配套的。不可能使用http协议写的什么东西。oicq我也是听说,最新版的可以用http代理的,我刚刚下了一个,还没有用。可恶的公司,为什么是开一个80呢。搞得我头都要大了。
      

  14.   

    现在LAN中用的proxy并不只是简单的tunnel,所以它会检查所有的http request和http response。 也就是说那个501 status不是你在internet上的server发回的,而是proxy...解决办法,简单的:request 变成   GET /xxxx HTTP/1.1 其中/xxxx可以根据你request的情况自己定义,比如/data表示索取数据,/user表示索取用户信息。Response 先读完整个request再根据/xxx的内容发送response.格式为HTTP/1.1 200 OK
    content-type: text/plain (这里要根据你送回数据的类型选MIME类型)
    content-length: xxx (response 内容的长度)xxxxxxxx (具体返回的内容)千万注意所有http request和http reponse的header必须用iso8859_1编码,切不能直接传String,需用char。另外注意所有的空格,换行用"\r\n",在response的content-length后需多加一个换行(如上所示)再给两个小列子/**
     * On the client side sending request, we should 
     * call readReponse immediate after this method was called
     */
    private sendRequest(String target, OutputStream out)
    {   
      //故意写长一点可以看清request中的细节
       printHead("GET");
       printHead(" ");
       printHead(target);
       printHead(" ");
       printHead("HTTP/1.1");
       printHead("\r\n");
       endHeaderBuffer(out); // Write buffer to output stream.
    }/**  
     * On the Server side, sending response, we
     * should call processRequest() before this 
     * method is called.
     */
    private void sendResponse(OutputStream out)
    {
       // clear header buffer before this is called.   printHead("HTTP/1.1 200 OK");
       printHead("\r\n");
       printHead("Content-Type: text/plain");
       printHead("\r\n");
       printHead("Content-Length: "+getContentLen());
       printHead("\r\n");
       printHead("\r\n");   endHeaderBuffer(out);// write out all the headers in the buffer
       doRealOutput(out);//write the content of your response    
    }
        
    /**
     * Print a head to buffer....
     */
    private void printHead( String s ) 
    {
      if (s==null) 
        s="null";  int len = s.length();        
        for (int i = 0; i < len; i++) 
         {
           char c = s.charAt (i);            
     
           if ((c & 0xff00) != 0)             
           // high order byte must be zero              
     
          System.out.println("Header character is not iso8859_1, not supported yet: " + c ) ;
                
          if( bufferCount >= buffer.length ) 
          {
            byte bufferNew[]=new byte[ buffer.length * 2 ];
            System.arraycopy( buffer,0, bufferNew, 0, buffer.length );
            buffer=bufferNew;
          }
                
          buffer[bufferCount] = (byte)c;
          bufferCount++;
         }
     }
      

  15.   

    1。我没有通过任何代理,但是在出口有一个firewall,firewall只开通了一个80端口。2。我用我写的client连接对方机器上面的运行在80端口的server,server没有收到响应,但是我通过ie试图连接对方主页的动作却被server记录了下来。3。client运行在局域网里头。server运行在internet,有独立的ip address.n天了,还没有搞定,我快要放弃了,大家帮帮忙吧。
      

  16.   

    唉!firewall,proxy本质上都是一样的。你也应该自己多动手试试,给了你那么多建议...