Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
TCP服务器从非Java客户端读取数据包结构 我想在C++客户端和java服务器之间进行通信。 到目前为止还不错(是的,我知道持久性的问题),但我想读一读服务器端定义的结构,它是在客户端定义的_Java_Sockets_Tcp_Tcpserver - Fatal编程技术网

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
声明为空字符串。

如果您觉得我的回答对您有帮助,您可以。