[英]TCP-Server sending a file in a packet structure (to a non Java client)
[英]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.