用Java发送和接收套接字消息

用Java发送和接收套接字消息,java,sockets,time,nullpointerexception,thread-sleep,Java,Sockets,Time,Nullpointerexception,Thread Sleep,我们正在为我们的大学做一个套接字编程项目。我们正在开发一个文件同步软件,目前我们正忙于通过套接字发送和接收消息 所以,当在本地机器上进行测试时,代码可以完美地工作。但是,当我们通过LAN和WiFi模拟服务器-客户机环境时,会出现空指针异常。文件分块发送,因此只有5-10个文件通过 我猜在通过套接字发送消息所需的总时间方面存在一些问题,这就是我们得到异常的原因 用于发送消息的方法发送消息并启动计时器线程。如果在2秒内未收到来自服务器的答复,则将再次发送该消息。以下是发送消息的代码: public

我们正在为我们的大学做一个套接字编程项目。我们正在开发一个文件同步软件,目前我们正忙于通过套接字发送和接收消息

所以,当在本地机器上进行测试时,代码可以完美地工作。但是,当我们通过LAN和WiFi模拟服务器-客户机环境时,会出现空指针异常。文件分块发送,因此只有5-10个文件通过

我猜在通过套接字发送消息所需的总时间方面存在一些问题,这就是我们得到异常的原因

用于发送消息的方法发送消息并启动计时器线程。如果在2秒内未收到来自服务器的答复,则将再次发送该消息。以下是发送消息的代码:

public static void sendMessage(final byte[] message) {
  try {
    final Thread timer = new Thread() {                
      @Override
      public void run() {
        try {
          System.out.println("timer started");
          sleep(1500);
          System.out.println("timer timeout");
          sendMessage(message);
        } catch (Exception e) {
          e.printStackTrace();
        }
      }
    };

    Thread thread = new Thread() {
      @Override
      public void run() {
        try {
          byte[] buffer = new byte[1250];
          serverByteStream.read(buffer);
          timer.stop();
        } catch (Exception e) {
        }
      }
    };

    timer.start();
    serverByteStream.write(message);
    thread.start();
  } catch (Exception e) {   
  }
}

当您再次递归调用
sendMessage()
时,您应该同时终止
线程
线程


请在出现错误的地方发布完整的堆栈跟踪和代码。

请在ServerThread.copyFile(ServerThread.java:372)和ServerThread.run(ServerNit.java:166)@GregorKoukkoullis发布异常堆栈跟踪。java.lang.NullPointerException是否也要查看它引用的代码?整个堆栈跟踪。从
e.printStackTrace()
获得的输出。您应该避免在线程上使用方法stop(),最好设置一个由线程的run方法检查的属性并中断线程NPE只是编程错误。它们与网络、时间、套接字或休眠线程无关。堆栈跟踪中有足够的信息让您能够自己解决这个问题,作为一名专业程序员,您确实应该这样做。