TCP 服务器从非 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后面有个space,为什么?因为要看客户端是怎么构造数据包的)
如您所见,我的输出包含单词 "null"(不知道为什么?),但您也看到单词 "null" 未被计算在内,导致 packet len returns 16 为:用户名 (space) pw (space) (testuser testpw )
希望你们能帮帮我 :)
提前致谢!
正如您在代码的评论中所说,您将 msg
定义为 null
字符串,然后附加到它。
您应该将 msg
声明为空字符串。
所以我想在 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后面有个space,为什么?因为要看客户端是怎么构造数据包的)
如您所见,我的输出包含单词 "null"(不知道为什么?),但您也看到单词 "null" 未被计算在内,导致 packet len returns 16 为:用户名 (space) pw (space) (testuser testpw )
希望你们能帮帮我 :)
提前致谢!
正如您在代码的评论中所说,您将 msg
定义为 null
字符串,然后附加到它。
您应该将 msg
声明为空字符串。