Хотя существует несколько способов обеспечить аутентификацию по TCP-соединению, для всех требуется определенная форма «протокола», являющегося согласованной грамматикой / синтаксисом связи.
Например, в Simple Mail Transport Protocol происходит следующий диалог (где S: и C: обозначают строки, предоставляемые SMTP-сервером и почтовым клиентом соответственно):
S: 220 server.example.com
C: HELO client.example.com
S: 250 server.example.com
C: MAIL FROM:<sender@example.com>
S: 250 2.1.0 sender@example.com... Sender ok
C: RCPT TO:<recipient@example.com>
S: 250 recipient <recipient@example.com> OK
C: DATA
S: 354 enter mail, end with line containing only "."
C: full email message appears here, where any line
C: containing a single period is sent as two periods
C: to differentiate it from the "end of message" marker
C: .
S: 250 message sent
C: QUIT
S: 221 goodbye
В ответах с сервера начальное числовое значение указывает на успех или неудачу запрошенной операции или на то, что ответ содержит информационное сообщение. Использование трехзначного числового значения обеспечивает эффективный синтаксический анализ, поскольку все ответы, начинающиеся с 2xx, указывают на успешность, 3xx являются информационными, 4xx указывают на ошибки протокола, а 5xx зарезервированы для ошибок сервера. См. IETF RFC 5321 - http://tools.ietf.org/html/rfc5321 для полного протокола.
Итак, в вашем конкретном случае вы можете рассмотреть что-то простое:
[connect to TCP server]
S: ? # indicates the server is ready for authorization
C: username password # send authentication credentials
Затем сервер ответит:
S: ! # indicates successful authentication and
# that server is ready for more commands
Или
S: ? # indicates authentication failure
Если обнаружено слишком много неудачных попыток аутентификации, сервер может разорвать соединение, чтобы уменьшить вероятность злоупотреблений, таких как DDOS-атаки.
После аутентификации клиент может отправить:
C: > # begin streaming
Или любая другая команда, которую вы поддерживаете.