Я полагаю, вы используете TCP-сокеты для взаимодействия клиент-сервер? Один из способов отправки данных различных типов на сервер и обеспечения возможности их различения заключается в выделении первого байта (или более, если у вас более 256 типов сообщений) в качестве некоторого идентификатора. Если первый байт равен единице, то это сообщение 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).
Обратите внимание, что writeUTF
записывает измененный формат UTF-8, которому предшествует указатель длины беззнакового двухбайтового кодированного целого числа, что дает вам 2^16 - 1 = 65535
байтов для отправки. Это позволяет readUTF
найти конец закодированной строки. Если вы выбираете свою собственную структуру записи, вам следует убедиться, что конец и тип записи либо известны, либо обнаружимы.