如何实现应用协议

时间:2010-08-27 04:11:17

标签: sockets network-programming winsock

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

最诚挚的问候!

3 个答案:

答案 0 :(得分:2)

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

客户写道:

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

如果一切正常(数据有效),服务器会响应并知道,如果没有,则服务器响应并显示错误:

$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)

Ackowledge可以用作确认,例如

客户通知服务器,他打算通过发送查询ascii字符传输一些数据(我使用<和>来表示特殊字符):

<ETX>

如果服务器已准备好读取数据,则通过确认确认:

<ACK>

然后客户端开始使用命令发送数据:

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

并且对于每个命令,服务器使用<ACK>确认它 因此,客户端继续传输,并在传输数据时,然后发送<EOT>以通知服务器ti可以停止读取数据(因此尝试将其作为命令读取)。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

在FTP中,客户端发送ASCII关键字等命令:QUIT,LIST,STOR ...参数用空格分隔。标记应指示命令的结束。最简单的标记是字符\n。然后,服务器将返回代码发送回客户端以指示是否存在错误。返回代码只是一个数字,都是纯文本。除了返回代码之外还有一条消息,可以解释错误(如果有的话)。

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

您应该关注的主要问题是解决方案的安全性。即使在Intranet上,也必须使用安全机制来避免企业网络中的数据泄露。

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