对应用程序级协议进行编程的方法?
|
我正在用C#做一些简单的套接字编程。我试图通过从客户端控制台读取用户名和密码,将凭据发送到服务器以及从服务器返回身份验证状态来对用户进行身份验证。基本的东西。我的问题是,如何确保数据采用服务器和客户端都期望的格式?
例如,这是我在客户端上读取用户凭据的方式:
Console.WriteLine(\"Enter username: \");
string username = Console.ReadLine();
Console.WriteLine(\"Enter plassword: \");
string password = Console.ReadLine();
StreamWriter clientSocketWriter = new StreamWriter(new NetworkStream(clientSocket));
clientSocketWriter.WriteLine(username + \":\" + password);
clientSocketWriter.Flush();
在这里,我在客户端用冒号(或其他符号)来分隔用户名和密码。在服务器上,我只是使用\“:\”作为标记来拆分字符串。这行得通,但似乎……不安全。客户端和服务器之间是否应该共享某种定界符标记,这样我就不必像这样硬编码它了?
服务器响应与此类似。如果身份验证成功,如何以客户端期望的格式发送回响应?我是否只需发送一个\“ SUCCESS \”或\“ AuthSuccessful = True / False \”字符串?我如何确保客户端知道服务器发送数据的格式(不仅仅是将其硬编码到客户端中)?
我想我要问的是如何设计和实现应用程序级协议。我意识到它对您的应用程序来说是唯一的,但是程序员通常使用的典型方法是什么?此外,如何保持格式一致?我也非常感谢一些与此文章相关的链接。
没有找到相关结果
已邀请:
4 个回复
缕嚏冻
岭取
吐兄
它具有基于文本的优点,因此易于阅读和理解。 缺点(可能不是问题,但可能是问题)是从客户端和服务器来回传输的字节数可能未知。因此,如果您需要确切地知道正在发送和接收多少字节,则可能不是您想要的协议类型。 协议的另一种类型是基于二进制的,并在标头中发送固定大小的消息。这样做的好处是,可以准确地知道预期客户端将接收多少数据。它还可以根据发送的内容来节省带宽。尽管ascii也可以节省您的空间,但这取决于您的应用程序要求。基于二进制的协议的缺点是仅通过查看它就很难理解……要求您不断查看文档。 在实践中,我倾向于将两种策略混入根据应用程序要求定义的协议中。
古擅坛犯