2014-04-10 172 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和錯誤發生的代碼。