2014-04-10 163 views
-1

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

因此,在本地机器上测试时,代码完美工作。但是,当我们通过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) { 
    } 
} 
+0

请发布异常堆栈跟踪。 –

+0

ServerThread.copyFile上的java.lang.NullPointerException(ServerThread.java:372)在ServerThread.run(ServerNit.java:166) @GregorKoukkoullis您是否想要查看它所指的代码? – LukaVazic

+0

整个堆栈跟踪。你从'e.printStackTrace()'得到的输出。您应该避免在线程上使用方法stop(),更好地设置由线程的run方法检查的属性并中断线程。 –

回答

0

当你再次递归调用sendMessage(),你应该杀了thread线程也。

请发布完整的stacktrace和错误发生的代码。