我假设您正在使用TCP套接字进行客户端 - 服务器交互?将不同类型的数据发送到服务器并使其能够区分两者的一种方法是将第一个字节(如果消息类型超过256种,则更多)专用于某种标识符。如果第一个字节是 1,则它是消息 A,如果它是 2,则是消息 B。通过套接字发送此内容的一种简单方法是使用:DataOutputStream/DataInputStream
客户:
Socket socket = ...; // Create and connect the socket
DataOutputStream dOut = new DataOutputStream(socket.getOutputStream());
// Send first message
dOut.writeByte(1);
dOut.writeUTF("This is the first type of message.");
dOut.flush(); // Send off the data
// Send the second message
dOut.writeByte(2);
dOut.writeUTF("This is the second type of message.");
dOut.flush(); // Send off the data
// Send the third message
dOut.writeByte(3);
dOut.writeUTF("This is the third type of message (Part 1).");
dOut.writeUTF("This is the third type of message (Part 2).");
dOut.flush(); // Send off the data
// Send the exit message
dOut.writeByte(-1);
dOut.flush();
dOut.close();
服务器:
Socket socket = ... // Set up receive socket
DataInputStream dIn = new DataInputStream(socket.getInputStream());
boolean done = false;
while(!done) {
byte messageType = dIn.readByte();
switch(messageType)
{
case 1: // Type A
System.out.println("Message A: " + dIn.readUTF());
break;
case 2: // Type B
System.out.println("Message B: " + dIn.readUTF());
break;
case 3: // Type C
System.out.println("Message C [1]: " + dIn.readUTF());
System.out.println("Message C [2]: " + dIn.readUTF());
break;
default:
done = true;
}
}
dIn.close();
显然,您可以发送各种数据,而不仅仅是字节和字符串(UTF)。
请注意,写入修改后的 UTF-8 格式,前面是无符号的双字节编码整数的长度指示符,为您提供要发送的字节。这样就可以找到编码字符串的结尾。如果您决定自己的记录结构,则应确保记录的结尾和类型是已知的或可检测的。writeUTF
2^16 - 1 = 65535
readUTF