簡體   English   中英

TCP-Server從非Java客戶端讀取數據包結構

[英]TCP-Server reading a packet structure from a non Java client

因此,我想在C ++客戶端和Java服務器之間進行通信。
到目前為止,一切都很好(是的,我知道Endiness概率),但是我想在服務器端讀取在客戶端定義的結構。

假設我的客戶以這種結構發送了一個數據包:

char *pLoginData = new char[512];
// ...
char *packet = pLoginData;
*(WORD*)pLoginData = (usernameLength + 1 + passwordLength + 1);

pLoginData += 2;

strcpy((char*)(pLoginData), username.c_str());
pLoginData += usernameLength + 1;

strcpy((char*)(pLoginData), password.c_str());
pLoginData += passwordLength + 1;

// now send it
m_iResult = send(connectSocket, packet, *(WORD*)(packet) + 2, 0);

在服務器端,我能走多遠:

// init socket, init DataInputStream..
// ...
messageByte[0] = in.readByte(); // defined as: byte[] messageByte = new byte[1000];
System.out.println("Packet len: " + messageByte[0]);

bytesRead = in.read(messageByte);
msg += new String(messageByte, 0, bytesRead); // defined as: String msg = null;

System.out.println(msg);

不幸的是輸出:

Packet len: 16
null testuser testpw 

(為什么testpw后面有一個空格,為什么?因為看客戶端如何構造數據包)
如您所見,我的輸出包含單詞“ null”(不知道為什么嗎?),但是您還看到單詞“ null”沒有計數,這導致數據包len返回16,即:用戶名(空格)pw(空格) (測試用戶testpw)

希望你們能在這里幫助我:)
提前致謝!

正如您在代碼注釋中所說的那樣,您將msg定義為null字符串,然后將其附加到該字符串。

您應該將msg聲明為空字符串。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM