Обработка связи клиент / сервер по TCP - общий вопрос - PullRequest
1 голос
/ 25 мая 2011

Мой вопрос немного сложен для Google, потому что это скорее вопрос процесса, а не чисто технической проблемы.

Я настраиваю базовую систему клиент / сервер TCP иинтересно, как в идеале должно работать двустороннее общение.В моей конкретной ситуации клиент должен будет предоставить учетные данные для входа в систему и сделать конкретные запросы от сервера (сервер взаимодействует с удаленной базой данных).

Вот что я хотел бы сделать .. и я 'Я просто смотрю на вход других разработчиков.

SERVER: Wait for new connections
CLIENT: Connects to server
CLIENT: Once connected, send login credentials with an instruction code.
        i.e. $LOGIN$,username,password
SERVER: Check instruction code, if code = $LOGIN$, try to authenticate
SERVER: If authentication fails, send user message saying login failed
        i.e. $MSG$,101,Login Failed
CLIENT: If instruction code = $MSG$ and if message id = 101, display message and disconnect.

И еще один сценарий ... допустим, клиент хочет запросить журнал того, что недавно произошло на сервере (текст окна консольного приложения).

CLIENT: Send request message to server for recent log
        i.e. $REQ$,105
SERVER: If instruction = $REQ$ and request id = 105, get window text and send to client
        i.e. $DATA$,105,<data here>
CLIENT: If instruction = $DATA$ and data id = 105, parse data and display to user

Запрашиваемые данные могут быть в виде обычного текста или в формате .net с возможностью преобразования данных в XML и т. Д. Это могут быть разные вещи.Советы?

Спасибо!

1 Ответ

2 голосов
/ 25 мая 2011

Я настоятельно рекомендую использовать WCF Data Services через безопасное (https) соединение. Он идеально подходит для гибкого и эффективного предоставления наборов данных по сети, полагаясь на проверенную аутентификацию ASP.NET для обеспечения безопасности.

Если вы все еще хотите использовать базовый TCP / IP, учтите следующее:

  • Вам потребуется зашифрованная связь (SSL / TLS или аналогичная), поскольку вы передаете информацию для аутентификации.
  • Общая структура сообщений - «тип, длина, данные» (TLD). Это обеспечивает некоторую обратную совместимость, поскольку получатель может пропускать типы сообщений, которые он не распознает.
  • Помните, что TCP / IP - это не протокол обмена сообщениями, а протокол потоковой передачи, поэтому вам потребуется фрейм сообщения .
  • Вам также необходимо включить положения для обнаружения полуоткрытых соединений .
  • Оцените уровень защиты, необходимый для предотвращения атак с использованием SQL-инъекций; в общем, сервер, получающий SQL в виде текста, является плохой идеей.

Обратите внимание, что службы данных WCF (при использовании через HTTPS) обрабатывают все вышеперечисленное для вас.

...