2012-02-21 100 views
0

我懷疑這與endianness有關,但我不知道如何解決它。我有一個C++客戶端告訴Java服務器它將要發送多少個字節,以便Java服務器在輸入流上調用readInt()。然後服務器繼續讀取其餘的數據。Java DataInputStream readInt()從C++客戶端獲得巨大的價值

目前,如果C++調用服務器:

char l = '3'; 
BytesSent = send(Socket, &l, 1, 0); 

然後相應的Java方面是:

int lBytesSent = m_InDataStream.readInt(); 

m_AckNack = new byte[lBytesSent]; 
m_InDataStream.read(m_AckNack) 

字節lBytesSent趨於然後只是拋出一個異常時,它的一些巨大的價值來創建陣列(不奇怪)

C++套接字只是簡單地打開:

Socket = socket(AF_INET, SOCK_STREAM, 0); 
Option = 1000; 
setsockopt(Socket, SOL_SOCKET, SO_RCVTIMEO, (char *) &Option, sizeof(Option)); 
server.sin_family = AF_INET; 
server.sin_port = htons(Port); 
server.sin_addr.s_addr = INADDR_ANY; 
memset(&(server.sin_zero), '\0', 8); 
connect(Socket, (sockaddr*)&server, sizeof(server)); 

和Java方面:

ServerSocket listener = new ServerSocket(port); 
Socket server; 
server = listener.accept(); 

刪除錯誤檢查的清晰度。

任何建議將是巨大的

非常感謝

馬克

回答

3

嘗試發送它(在C++側)之前通過htonl運行號:

long x = htonl(42); /* x now contains 42 represented in network byte order */ 
+0

謝謝 - 忘記所有關於網絡訂購 – Mark 2012-02-26 23:32:26