java - TCP 服务器从非 Java 客户端读取数据包结构

标签 java sockets tcp tcpserver

所以我想在 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,即:username (space) pw (space) (测试用户测试密码)

希望你们能帮我解决这个问题:)
提前致谢!

最佳答案

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

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

关于java - TCP 服务器从非 Java 客户端读取数据包结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48906923/

相关文章:

java - 如何在android应用程序中验证电话号码?

java - JUnit 测试 IndexOutOfBoundsException

c# - 在 c# 中使用 c 套接字时出现的问题

c++ - LibVLC 流式传输到内存 p_audio_data

java - 如何设置 Spring TCP 客户端和服务器模型?

tomcat - 我可以通过 server.xml 中的配置操作 tomcats 对 request.getServerName() 或 request.getLocalAddr() 的回答吗

java - 在 IIS 中运行 JasperReports 服务器

java - 没有 awt/swing 类的 Canvas 到 base64 图像

python - 通过代理IP将python应用程序连接到互联网?

c# - 测试TCP连接的Java等效方法