我也是初学JAVA,在书上看到个例子。我javac JabberClient.java会生成JabberClient.class和JabberServer.class,但是执行时得到如下结果,很是奇怪,为什么全是null呢?
addr = localhost/127.0.0.1
socket = Socket[addr=localhost/127.0.0.1,port=8080,localport=1933]
null
null
null
null
null
null
null
null
null
null
closing...//: c15:JabberServer.java
// From 'Thinking in Java, 2nd ed.' by Bruce Eckel
// www.BruceEckel.com. See copyright notice in CopyRight.txt.
// Very simple server that just
// echoes whatever the client sends.
import java.io.*;
import java.net.*;public class JabberServer {  
  // Choose a port outside of the range 1-1024:
  public static final int PORT = 8080;
  public static void main(String[] args) 
      throws IOException {
    ServerSocket s = new ServerSocket(PORT);
    System.out.println("Started: " + s);
    try {
      // Blocks until a connection occurs:
      Socket socket = s.accept();
      try {
        System.out.println(
          "Connection accepted: "+ socket);
        BufferedReader in = 
          new BufferedReader(
            new InputStreamReader(
              socket.getInputStream()));
        // Output is automatically flushed
        // by PrintWriter:
        PrintWriter out = 
          new PrintWriter(
            new BufferedWriter(
              new OutputStreamWriter(
                socket.getOutputStream())),true);
        while (true) {  
          String str = in.readLine();
          if (str.equals("END")) break;
          System.out.println("Echoing: " + str);
          out.println(str);
        }
      // Always close the two sockets...
      } finally {
        System.out.println("closing...");
        socket.close();
      }
    } finally {
      s.close();
    }
  } 
} ///:~//: c15:JabberClient.java
// From 'Thinking in Java, 2nd ed.' by Bruce Eckel
// www.BruceEckel.com. See copyright notice in CopyRight.txt.
// Very simple client that just sends
// lines to the server and reads lines
// that the server sends.
import java.net.*;
import java.io.*;public class JabberClient {
  public static void main(String[] args) 
      throws IOException {
    // Passing null to getByName() produces the
    // special "Local Loopback" IP address, for
    // testing on one machine w/o a network:
    InetAddress addr = 
      InetAddress.getByName(null);
    // Alternatively, you can use 
    // the address or name:
    // InetAddress addr = 
    //    InetAddress.getByName("127.0.0.1");
    // InetAddress addr = 
    //    InetAddress.getByName("localhost");
    System.out.println("addr = " + addr);
    Socket socket = 
      new Socket(addr, JabberServer.PORT);
    // Guard everything in a try-finally to make
    // sure that the socket is closed:
    try {
      System.out.println("socket = " + socket);
      BufferedReader in =
        new BufferedReader(
          new InputStreamReader(
            socket.getInputStream()));
      // Output is automatically flushed
      // by PrintWriter:
      PrintWriter out =
        new PrintWriter(
          new BufferedWriter(
            new OutputStreamWriter(
              socket.getOutputStream())),true);
      for(int i = 0; i < 10; i ++) {
        out.println("howdy " + i);
        String str = in.readLine();
        System.out.println(str);
      }
      out.println("END");
    } finally {
      System.out.println("closing...");
      socket.close();
    }
  }
} ///:~

解决方案 »

  1.   

    Started: ServerSocket[addr=0.0.0.0/0.0.0.0,port=0,localport=8080]
    Connection accepted: Socket[addr=/127.0.0.1,port=2490,localport=8080]
    Echoing: howdy 0
    Echoing: howdy 1
    Echoing: howdy 2
    Echoing: howdy 3
    Echoing: howdy 4
    Echoing: howdy 5
    Echoing: howdy 6
    Echoing: howdy 7
    Echoing: howdy 8
    Echoing: howdy 9
    closing...我这里一点问题都没有。
      

  2.   

    addr = localhost/127.0.0.1
    socket = Socket[addr=localhost/127.0.0.1,port=8080,localport=2490]
    howdy 0
    howdy 1
    howdy 2
    howdy 3
    howdy 4
    howdy 5
    howdy 6
    howdy 7
    howdy 8
    howdy 9
    closing...这是Client端的。
      

  3.   

    楼主是直接javac再java的吗?还是放在别的JAVA工具IDE里运行的?
    奇怪啊,我java JabberServer会报下面的错啊。
    Exception in thread "main" java.net.BindException: Address already in use: JVM_Bind
            at java.net.PlainSocketImpl.socketBind(Native Method)
            at java.net.PlainSocketImpl.bind(Unknown Source)
            at java.net.ServerSocket.bind(Unknown Source)
            at java.net.ServerSocket.<init>(Unknown Source)
            at java.net.ServerSocket.<init>(Unknown Source)
            at JabberServer.main(JabberServer.java:14)
      

  4.   

    ying1979(鹰),请问你是怎么测试这个代码的?我就是在自己机器上先javac再java的。这个不会要真的弄2台机器来测吧?
      

  5.   

    Exception in thread "main" java.net.BindException: Address already in use: JVM_Bind
    是jvm已经使用了 呵呵 你启动了多个实例吧 估计你是用IDE环境,而且有应用服务器
      

  6.   

    我没用IDE环境,apache-tomcat是开着的,执行的时候就会报那个已绑定的异常,关了tomcat就正常了。楼上的意思是如何开着web服务器的话我得找2台机器来测试?
      

  7.   

    我知道楼上的意思了,8080端口被tomcat占用了。