Sockets 如何实现应用程序协议

Sockets 如何实现应用程序协议,sockets,network-programming,winsock,Sockets,Network Programming,Winsock,我们想要实现一个供内部使用的服务器/客户端应用程序。有人知道如何实现基于套接字的应用程序协议吗 致以最良好的祝愿 套接字中的协议几乎可以作为串行协议来实现。但一个很好的例子是使用命令,您可以使用一些基于文本位置的布局以其更基本的形式实现,例如 客户写道: $ADD|Yongwei|Xing|25|M|# 如果一切正常(数据有效),服务器将作出响应并确认,如果不正常,服务器将发出错误代码: $ACK# 或: 其中ADD是代码必须读取和计算的命令。也许您可以使用前三个字符作为命令,并使用分隔的参

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


致以最良好的祝愿

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

客户写道:

$ADD|Yongwei|Xing|25|M|#
如果一切正常(数据有效),服务器将作出响应并确认,如果不正常,服务器将发出错误代码:

$ACK#
或:

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


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

<ACK>

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

<STX>ADD|jhon|deer|56|M|<ETX>
ADD | jhon | deer | 56 | M|
对于每个命令,服务器都会使用

因此,客户端继续传输数据,当数据传输时,会发送一个
,通知服务器ti可以停止读取数据(So尝试将其作为命令读取)。

这是一个相当开放的问题,但如果您在套接字级别上操作,则可能是太深了,尤其是在进行应用程序开发时。一个用于网络通信、表示和编码/解码的库将有所帮助。使用将简化UI的创建。您也可以考虑使用托管后端代码,因为它会给您比大多数DIY作业更高的可靠性和可扩展性。p> 对于内部使用,最简单的解决方案就是最好的解决方案。使用套接字(Windows上的winsock2,*BSD和Linux上的POSIX套接字),您应该在客户端和服务器之间交换一些纯文本,例如:

在FTP中,客户端发送ASCII关键字等命令:退出、列表、存储。。。参数之间用空格分隔。标记应指示命令的结束。最简单的标记是字符
\n
。然后,服务器将返回代码发送回客户端,以指示是否存在错误。返回代码只是一个数字,全部为纯文本。与返回代码一起出现的是一条小消息,用于解释是否存在错误

1985年,RFC中规定了FTP。而且它仍然工作良好,仍然被广泛使用。HTTP类似于客户端发送由几行纯文本组成的HTTP头,由
\n
分隔

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


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

问题相当广泛。有许多应用程序协议,包括HTTP、FTP、SSH等。如果你能更具体一点,我们可能会更有帮助。
<ACK>
<STX>ADD|jhon|deer|56|M|<ETX>