c socket以字符串形式发送命令

时间:2011-05-04 19:19:45

标签: c++ c string sockets send

我是C / C ++中socket编程的新手。我写了Client和Server Socket。他们可以发送和接收字符串。 我们的想法是将命令发送到字符串中的服务器。它看起来像这样:“GET X”或“SET X 2”。我知道我怎么能分裂字符串。并且程序知道字符串中的第一个字是命令,第二个字是属性,第三个字可以是SET-Command的值。 我的问题是我怎么能对programm说如果它得到字符串“GET X”它应该调用函数get(attribute)。 我认为第一个关于switch-case,但我认为它不是最好的解决方案。 如果它会是很多命令。 谢谢你

3 个答案:

答案 0 :(得分:1)

您基本上可以将问题归结为将操作名称映射到正在调用的实际函数的最佳方式,以及是否确实需要具有更好查找特性的解决方案。

  • 对于少数功能,基于O(n)的简单解决方案(例如线性搜索)就足够了。
  • 基于O(log(n))的方法(例如self-balancing binary trees)也足以支持更多操作。
  • 由于理论O(1)查找特性,大多数人都直接跳到基于hash table的解决方案。但是,这取决于良好的散列函数,在成本方面本身并不是免费的。

总是涉及时间和空间的权衡。因此,在决定哪种方法最适合您的应用之前,最好先了解一下。

无论如何,这些操作调度问题都得到了大量研究。例如,这里讨论了CORBA C ++ ORB实现中的操作调度策略one paper

除了优化操作查找外,您还可能需要处理其他因素,例如:

  • 并发:您的应用程序是否需要并行处理来自客户端的多个连接?分布式并发通常很难正确实现。
  • 序列化:您将如何通过线路发送和接收数据?您可能遇到的问题包括:发送纯文本可能很慢,数值可能必须转换为接收平台endianness,您的序列化协议可能会更改,这会影响您的用户等。

在客户端也可能需要处理许多其他问题。如果可能的话,我建议使用现有的类似RPC的技术,而不是自己重新发明轮子。

答案 1 :(得分:0)

我认为最好使用switch语句。

如果不是,您可以使用带有命令字符串的映射作为键,并将指向回调函数的指针用作值。

答案 2 :(得分:0)

你可以做的一种方法是拥有一个函数查找表,你可以调用它,这取决于所有返回char*的命令,并将响应发送回客户端。当然,你必须做一个基本的哈希函数。