2010-08-27 153 views
2

我们希望实现一个服务器/客户端应用程序供内部使用。有没有人知道如何实现基于套接字的应用协议?如何实现应用程序协议

最好的问候!

+0

这个问题相当广泛。有许多应用程序协议,包括HTTP,FTP,SSH等等。如果你可以更具体,我们可能会更有帮助。 – kbrimington 2010-08-27 04:25:25

回答

2

套接字中的协议几乎可以作为串行协议来实现。但一个很好的例子就是使用命令,你可以使用基于文本位置的布局来实现它的更基本的形式,例如,

客户写道:

$ADD|Yongwei|Xing|25|M|# 

服务器响应和aknowledge如果一切正常(该数据是有效的),或者用代码,如果没有一个错误:

$ACK# 

或:

$ERR|2|# 

ADD是您的代码必须读取和评估的命令。也许你可以使用前三个字符作为命令,参数分隔,就像这个例子一样。

我建议您使用特殊字符而不是$和#分隔符。特殊字符的ASCII表的前30个字符,并且有适合工作的正确的字符:

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字符(我使用<和>来表示一个特殊字符)来传输一些数据

客户端通知服务器:

<ETX> 

如果服务器已准备好读数据,然后用确认的确认:

<ACK> 

则客户端使用命令启动发送数据:

<STX>ADD|jhon|deer|56|M|<ETX> 

以及服务器用<ACK> 确认它的每一个命令所以客户端一直在发送数据,并且当数据被传送时,然后发送一个<EOT>来通知服务器可以停止读取数据(这样一来,试图读取它作为一个命令)。

0

这是一个相当开放的问题,但是如果你在套接字层面上操作,你可能是一个太深的层次,特别是如果你正在做应用程序开发。诸如用于网络通信的库boost::asio以及用于表示和编码/解码的库将有所帮助。使用Google Web Toolkit (GWT)将简化创建UI。您也可以考虑使用App Engine来托管后端代码,因为它会为您提供比大多数DIY作业更高的可靠性和可扩展性。

0

对于内部使用,最简单的解决方案是最好的解决方案。使用套接字(Windows上的winsock2,* BSD和Linux上的POSIX套接字),您应该在客户端和服务器之间交换一些明文,例如FTP protocol,例如:

在FTP中,客户端发送类似ASCII关键字的命令:QUIT ,LIST,STOR ...,参数用空格分隔。标记应该指示命令的结束。最简单的标记是字符\n。然后,服务器向客户端发送返回代码以指示是否存在错误。返回码只是一个数字,全部以纯文本格式显示。与返回代码一起,有一条消息可以解释错误,如果有的话。

FTP已在1985年的RFC中指定。它仍然正常工作,并且仍然被广泛使用。 HTTP在客户端发送由纯文本中的几行组成的HTTP标头(由\n分隔)的意义上类似。

您应该关心的主要问题是您的解决方案的安全性。即使在内联网上,例如,也必须使用安全机制来避免企业网络上的数据泄漏。

最简单的事情就是使用ssh(如OpenSSH)来加密你的网络连接。它允许您控制谁可以调用服务器(身份验证)并允许您加密数据。如果您的数据位于专用于您的应用程序的专用网络上,则无需加密数据。