Протокол в сокетах может быть реализован почти как последовательный протокол. Но хорошим примером является использование команд, которые вы могли бы реализовать с использованием некоторого макета, основанного на позициях текста в его более простой форме, например
Клиент пишет:
$ADD|Yongwei|Xing|25|M|#
Сервер отвечает и подтверждает, что все прошло нормально (данные были действительны) или Ошибка с кодом, если нет:
$ACK#
или
$ERR|2|#
Где ADD - команда, которую ваш код должен прочитать и оценить. Возможно, вы можете использовать первые три символа в качестве команды и разделенные параметры, как в этом примере.
Я рекомендую использовать специальные символы вместо разделителей $ и #. Специальные символы - это первые 30 символов таблицы ASCII, и для работы есть правильные символы:
dec char meaning:
2 STX Start of text
3 ETX End of text
4 EOT End of trasmission
5 ENQ Enquiry (asking for data, asking for a chance of transmission)
6 ACK Acknowledge (confirmation of data received, allowing trasmission)
Подтверждение может быть использовано в качестве подтверждения, например,
Клиент уведомляет сервер о том, что он намеревается передать некоторые данные, отправив запрос ascii char (я использую <и> для выражения специального символа):
<ETX>
Если сервер готов к чтению данных, подтверждает подтверждение:
<ACK>
затем клиент начинает отправку данных с командами:
<STX>ADD|jhon|deer|56|M|<ETX>
и для каждой команды сервер подтверждает это <ACK>
Таким образом, клиент продолжает передачу, а когда данные передаются, затем отправляет <EOT>
, чтобы заметить сервер, что он может прекратить чтение данных (поэтому пытается прочитать его как команду).