TCP服务器从非Java客户端读取数据包结构 我想在C++客户端和java服务器之间进行通信。 到目前为止还不错(是的,我知道持久性的问题),但我想读一读服务器端定义的结构,它是在客户端定义的
假设我的客户机以这种结构发送一个数据包:TCP服务器从非Java客户端读取数据包结构 我想在C++客户端和java服务器之间进行通信。 到目前为止还不错(是的,我知道持久性的问题),但我想读一读服务器端定义的结构,它是在客户端定义的,java,sockets,tcp,tcpserver,Java,Sockets,Tcp,Tcpserver,假设我的客户机以这种结构发送一个数据包: char *pLoginData = new char[512]; // ... char *packet = pLoginData; *(WORD*)pLoginData = (usernameLength + 1 + passwordLength + 1); pLoginData += 2; strcpy((char*)(pLoginData), username.c_str()); pLoginData += usernameLength +
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)(testuser testpw) 希望你们能帮我:)
提前谢谢 正如您在代码中的注释中所说,您将
msg
定义为null
字符串,然后附加到该字符串
您应该将
msg
声明为空字符串。如果您觉得我的回答对您有帮助,您可以。