【问题标题】:TCP-Server reading a packet structure from a non Java clientTCP-Server 从非 Java 客户端读取数据包结构
【发布时间】:2018-02-21 21:25:16
【问题描述】:

所以我想在 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(空格) (testuser testpw)

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

【问题讨论】:

    标签: java sockets tcp tcpserver


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2018-08-02
      • 1970-01-01
      • 2020-01-28
      • 2021-09-05
      • 2014-12-01
      • 2012-05-26
      • 1970-01-01
      • 2022-01-23
      • 2022-06-29
      相关资源
      最近更新 更多