2011-05-25 80 views
1

谷歌我的问题有点棘手,因为它更多的是关于过程的问题,而不是严格的技术问题。通过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 

的数据可能是纯文本,或者.NET数据表转换成XML等,这可能是很多方面的事情。

思考呢?提示?

谢谢!

+0

也许这个问题可能会被重写为更加“规范”的形式:“如何在.NET中使用TCP实现双向通信?” – hemp 2011-05-25 17:27:41

回答

2

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

如果你仍然想基本的TCP/IP,考虑以下因素:

  • 你需要加密通信(SSL/TLS或类似的),因为你已经通过认证的信息。
  • 消息的通用结构是“类型,长度,数据”(TLD)。这实现了一些向后兼容性,因为接收器可以跳过它不识别的消息类型。
  • 请记住,TCP/IP不是一个消息协议,而是一个流协议,所以你需要message framing
  • 您还需要包含detecting half-open connections的条款。
  • 评估防止SQL注入攻击所需的防护级别;一般来说,将SQL作为文本接收的服务器是一个坏主意。

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

+0

优秀的回复,谢谢。我不知道WCF,但我一定会考虑它。 – arc 2011-05-25 18:28:08