通过TCP处理客户端/服务器通信-一般问题



用谷歌搜索我的问题有点棘手,因为这更多的是关于流程的问题,而不是严格意义上的技术问题。

我正在设置一个基本的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

所请求的数据可以是纯文本,也可以是翻译成XML的.net数据表,等等。

对此有何感想?小贴士?

谢谢!

我强烈建议通过安全(https)连接使用WCF数据服务。它非常适合以灵活高效的方式通过网络公开数据集,并依赖于经过验证的ASP。NET身份验证的安全性。

如果您仍然想要基本的TCP/IP,请考虑以下内容:

  • 您将需要加密通信(SSL/TLS或类似),因为您正在传递身份验证信息
  • 消息的常见结构是"类型、长度、数据"(TLD)。这实现了一些向后兼容性,因为接收器可能会跳过它无法识别的消息类型
  • 请记住,TCP/IP不是一个消息传递协议,而是一个流协议,因此您需要消息帧
  • 您还需要包括用于检测半开放连接的规定
  • 评估防止SQL注入攻击所需的保护级别;一般来说,服务器以文本形式接收SQL是个坏主意

请注意,WCF数据服务(当通过HTTPS使用时)为您处理以上所有内容。

最新更新