客户端:
import java.net.*;
import java.io.*;
class B {
public static void main(String[] args){
Socket cSocket;
BufferedWriter writer;
    try {
    cSocket=new Socket("localhost",26260);
    writer=new BufferedWriter(new OutputStreamWriter(cSocket.getOutputStream()));
    writer.write("login");
    writer.close();
    cSocket.close();
    }
    catch (Exception ex) {
      ex.printStackTrace();
    }
    }
}服务器:
import java.net.*;
import java.io.*;
class MainServer {
  public static void main(String[] args) {
    ServerSocket ss;
    Socket sIn;
    OnlineThread ot;
    try {
      ss=new ServerSocket(26260);
      synchronized(new Object()){
        while (true) {
          sIn = ss.accept();
          new OnlineThread(sIn).start();
        }
      }
    }
    catch (Exception ex) {
      System.out.println("端口绑定失败");
    }
    }
}class OnlineThread extends Thread{
  private Socket cIn;
  private BufferedReader reader;
  private BufferedWriter writer;
  String receiveStr;
  public OnlineThread(Socket cIn){
    this.cIn=cIn;
    try {
      reader = new BufferedReader(new InputStreamReader(cIn.getInputStream()));
    }
    catch (Exception ex) {
      ex.printStackTrace();
    }
  }
  //登陆处理
  public void run(){
    while (true) {
      try {
        receiveStr = reader.readLine();
        System.out.println(receiveStr);
      }
      catch (Exception ex) {
        ex.printStackTrace();
      }
      if (receiveStr.equals("login"))
        login();
      else if (receiveStr.equals("logout"))
        logout();
    }
  }
  public void login() {
    System.out.println("in");  }
  public void logout(){
System.out.println("out");
  }
}

解决方案 »

  1.   

    receiveStr = reader.readLine(); //null if the end of the stream has been reached
     if (receiveStr.equals("login")) //so NullPointerException
      

  2.   

    可能出现的情况太多了,BufferedReader、Cocket、BufferedWriter都可能为空值
    debug定位一下
      

  3.   

    //服务器:
    import java.net.*;
    import java.io.*;
    class MainServer {
      public static void main(String[] args) {
        ServerSocket ss;
        Socket sIn;
        OnlineThread ot;
        try {
          ss=new ServerSocket(26260);
          synchronized(new Object()){
            while (true) {
              sIn = ss.accept();
              new OnlineThread(sIn).start();
            }
          }
        }
        catch (Exception ex) {
          System.out.println("端口绑定失败");
        }
        }
    }class OnlineThread extends Thread{
      private Socket cIn;
      private BufferedReader reader;
      private BufferedWriter writer;
      String receiveStr;
      public OnlineThread(Socket cIn){
        this.cIn=cIn;
        try {
          reader = new BufferedReader(new InputStreamReader(cIn.getInputStream()));
        }
        catch (Exception ex) {
          ex.printStackTrace();
        }
      }
      //登陆处理
      public void run(){
        while (true) {
          try {
            receiveStr = reader.readLine();
            System.out.println(receiveStr);
          }
          catch (Exception ex) {
            ex.printStackTrace();
          }
          if (receiveStr.equals("login"))
            login();       
       
          else if (receiveStr.equals("logout"))
            logout();
            
          break;  // 添加
        }
      }
      public void login() {
        System.out.println("in");  }
      public void logout(){
    System.out.println("out");
      }
    }
    //客户端:
    import java.net.*;
    import java.io.*;
    class B {
    public static void main(String[] args){
    Socket cSocket;
    BufferedWriter writer;
        try {
        cSocket=new Socket("localhost",26260);
        writer=new BufferedWriter(new OutputStreamWriter(cSocket.getOutputStream()));
        writer.write("login");
        writer.close();
        cSocket.close();
        }
        catch (Exception ex) {
          ex.printStackTrace();
        }
        }
    }
      

  4.   

    既然服务器
    while (true) {
              sIn = ss.accept();
              new OnlineThread(sIn).start();
     }那么每一次连接的
    //登陆处理 无须 while (true) 
    这样会导致客户端传过来的数据即便没有了,它还继续在读.于是就出现
    NullPointerException!
    当然,你可以交互和客户端交流,但是需在必要时刻break.这要自己控制了. : )