TCP-Server从非Java客户端读取数据包结构

时间:2018-02-21 13:14:34

标签: java sockets tcp tcpserver

所以我想在C ++客户端和Java服务器之间进行通信 到目前为止一直这么好(是的,我知道Endiness prob)但是我想在我的服务器端读取一个在客户端定义的定义结构。

假设我的客户端以此结构发送数据包:

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”(dunno为什么?),但是你也看到“null”这个词不计算,导致数据包len返回16,即:username(space)pw(space) (testuser testpw)

希望你们能在这里帮助我:) 提前谢谢!

1 个答案:

答案 0 :(得分:2)

正如您在代码中的评论中所说,您将msg定义为null字符串,然后附加到该字符串。

您应该将msg声明为空字符串。