2015-09-02 4 views
0

Я создаю приложение чата в Java. Пользователь может отправлять несколько новых строк в одном сообщении. Раньше я не разрешал пользователю отправлять новые строки. Поэтому было легко использовать новый символ линии как End of Message. Но теперь я разрешаю пользователю отправлять новые строки в сообщении. Какой символ/строку следует использовать для обозначения конца сообщения.Приложение для чата. Каким должен быть символ сообщения

+2

Символ ['EOF'] (http://www.fileformat.info/info/unicode/char/0003/index.htm) кажется очень хорошим выбором. –

+3

Символ NUL ('\ 0') выглядит хорошим кандидатом. Еще лучше, если вы можете изменить протокол для отправки длины ввода, за которой следуют фактические байты. – KDM

ответ

0

Вы можете легко избежать окончания сообщения, добавив дополнительные 4 байта. Первые 4 байта представляют длину вашего сообщения. Затем добавьте полное сообщение.

Пример кода отправителя:

BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(socket.getOutputStream()); 

    String msg = "its a test message"; 
    byte[] byteMsg = msg.getBytes(); 

    int length = byteMsg.length; 
    byte[] lengthByte = ByteBuffer.allocate(4).putInt(length).array(); 

    byte[] finalMsg = new byte[length+4]; 
    System.arraycopy(lengthByte, 0, finalMsg, 0, 4); 
    System.arraycopy(byteMsg, 0, finalMsg, 4, length); 

    bufferedOutputStream.write(finalMsg); 

Когда вы читаете сообщение, затем прочитать первые 4 байта. Преобразуйте этот 4 байта в целое число. Это длина вашего входящего сообщения. Затем проанализируйте этот байт.

0

Это ваше приложение, поэтому вы можете использовать все, что захотите, включая EOF и NUL символов, предложенных Марко и KDM.

Просто убедитесь, что это символ, который ваши пользователи не будут использовать в своих сообщениях.

+0

Downvoter, пожалуйста, объясните причину downvote. Поскольку я собираюсь использовать этот метод в моем простом приложении. Я буду использовать более продвинутый метод, например, указать длину сообщения в сообщении, как только демо будет передано. –