2015-06-23 68 views
0

我有一個WebSocket協議的問題。當我在開發(NetBeans)時執行代碼並且工作正常時,即使當我執行jar文件仍然有效時,但是...當我在Windows 7 64位平臺上執行jar時... WebSocket關閉本身。在Java上編寫WebSocket服務器。問題在Windows 7 64位

我正在本地機器上的服務器和客戶端,即使我停用Windows防火牆,沒有任何變化。即使我使用3種瀏覽器(Firefox,Chrome和Opera)進行測試,並且我資助了相同的結果。

任何想法?

服務器監聽線程

InputStream listen; 

    while (true) { 
     try { 
      if (socket.isClosed()) { 
       socket.close(); 
       return; 
      } else { 
       listen = socket.getInputStream(); 
       byte[] readData = new byte[1024]; 
       int totalRead = listen.read(readData); 

       if (totalRead > 0) { 
        byte[] result = new byte[totalRead]; 

        System.arraycopy(readData, 0, result, 0, totalRead); 

        String resultString = new String(result); 

        if (resultString.substring(0, 3).equals("GET")) { 
         HtmlRequest myRequest = new HtmlRequest(resultString); 
         caller.push(myRequest); 
        } else { 
         caller.push(WebsocketProtocol.decrypt(result, totalRead)); 
        } 
       } 

       System.out.println(getName()+": total read -> "+totalRead); 
      } 
     }catch(SocketException e){ 
      System.out.println(getName() + ": SocketException "+e.getMessage()); 
     } catch (IOException ex) { 
      System.out.println(getName() + ": IOException "+ex.getMessage()); 
     } catch (NullPointerException ex){ 
      System.out.println(getName() + ": NullPointerException "+ex.getMessage()); 
     } catch (Exception e) { 
      System.out.println(getName() + ": Exception "+e.getMessage()); 
     } 
    } 

代碼WebSocket協議的代碼:

public static byte[] decrypt(byte[] leido, int largo) { 
    byte rLength = 0; 
    int rMaskIndex = 2; 
    int rDataStart = 0; 

    byte data = leido[1]; 
    byte op = (byte) 127; 
    rLength = (byte) (data & op); 

    if (rLength == (byte) 126) { 
     rMaskIndex = 4; 
    } 
    if (rLength == (byte) 127) { 
     rMaskIndex = 10; 
    } 

    byte[] masks = new byte[4]; 

    int j = 0; 
    int i = 0; 
    for (i = rMaskIndex; i < (rMaskIndex + 4); i++) { 
     masks[j] = leido[i]; 
     j++; 
    } 

    rDataStart = rMaskIndex + 4; 

    int messLen = largo - rDataStart; 

    byte[] message = new byte[messLen]; 

    for (i = rDataStart, j = 0; i < largo; i++, j++) { 
     message[j] = (byte) (leido[i]^masks[j % 4]); 
    } 
    return message; 
} 

public static byte[] encrypt(String message) { 
    byte[] bytesContent = message.getBytes(); 

    int countFrames = 0; 

    byte[] frame = new byte[10]; 

    frame[0] = (byte) 129; 

    if (bytesContent.length <= 125) { 
     frame[1] = (byte) bytesContent.length; 
     countFrames = 2; 

    } else if (bytesContent.length > 125 && bytesContent.length <= 65535) { 
     frame[1] = (byte) 126; 
     int largo = bytesContent.length; 
     frame[2] = (byte) ((largo >> 8) & (byte) 255); 
     frame[3] = (byte) (largo & (byte) 255); 
     countFrames = 4; 
    } else { 
     frame[1] = (byte) 127; 
     int largo = bytesContent.length; 
     frame[2] = (byte) ((largo >> 56) & (byte) 255); 
     frame[3] = (byte) ((largo >> 48) & (byte) 255); 
     frame[4] = (byte) ((largo >> 40) & (byte) 255); 
     frame[5] = (byte) ((largo >> 32) & (byte) 255); 
     frame[6] = (byte) ((largo >> 24) & (byte) 255); 
     frame[7] = (byte) ((largo >> 16) & (byte) 255); 
     frame[8] = (byte) ((largo >> 8) & (byte) 255); 
     frame[9] = (byte) (largo & (byte) 255); 
     countFrames = 10; 
    } 

    byte[] answer = new byte[countFrames + bytesContent.length]; 

    int currentPosition = 0; 
    for (int i = 0; i < countFrames; i++) { 
     answer[currentPosition] = frame[i]; 
     currentPosition++; 
    } 
    for (int i = 0; i < bytesContent.length; i++) { 
     answer[currentPosition] = bytesContent[i]; 
     currentPosition++; 
    } 
    return answer; 
} 
+0

我沒有檢查你的代碼位它可能是一個併發問題,你不覺得嗎? –

+0

我曾經認爲,但是,我必須在Windows 7(32位)上找到同樣的問題。或者,當我使用netbeans執行應用時......情況並非如此。 它必須由平臺的東西......我認爲 –

+0

我不是netbeans的專家,但也許你可以執行你的代碼作爲調試模式或作爲真正的執行模式? –

回答

1

貌似失敗是有關在Windows上JVM的默認字符集7

在致電

call java -jar filename.jar 

你必須添加

call java -Dfile.encoding=UTF-8 -jar filename.jar 
相關問題